4.2 KiB
4.2 KiB
LDAP Plugin with Claims Enrichment and Client Provisioning
Module
Authority
Status
IMPLEMENTED
Description
Full LDAP identity provider plugin with claims enrichment (mapping LDAP attributes to OAuth claims), client provisioning (auto-creating OAuth clients from LDAP entries), capability probing, credential store, and messaging-backed claims cache.
Implementation Details
- LDAP Plugin Entry Point:
src/Authority/StellaOps.Authority/StellaOps.Authority.Plugin.Ldap/LdapIdentityProviderPlugin.cs-- implementsIAuthorityIdentityProviderPlugin; authenticates users against LDAP directories. - Plugin Registrar:
src/Authority/StellaOps.Authority/StellaOps.Authority.Plugin.Ldap/LdapPluginRegistrar.cs-- registers LDAP plugin services in the DI container. - Plugin Options:
src/Authority/StellaOps.Authority/StellaOps.Authority.Plugin.Ldap/LdapPluginOptions.cs-- configuration: LDAP server URL, base DN, search filters, attribute mappings, TLS settings. - Claims Enrichment:
src/Authority/StellaOps.Authority/StellaOps.Authority.Plugin.Ldap/Claims/LdapClaimsEnricher.cs-- maps LDAP attributes (group memberships, department, title) to OAuth2 claims. - Claims Cache:
src/Authority/StellaOps.Authority/StellaOps.Authority.Plugin.Ldap/Claims/ILdapClaimsCache.cs,InMemoryLdapClaimsCache.cs,MessagingLdapClaimsCache.cs-- caches enriched claims with in-memory and messaging-backed (distributed) implementations. - Client Provisioning:
src/Authority/StellaOps.Authority/StellaOps.Authority.Plugin.Ldap/ClientProvisioning/LdapClientProvisioningStore.cs-- auto-creates OAuth2 clients from LDAP entries (service accounts). - Capability Probe:
src/Authority/StellaOps.Authority/StellaOps.Authority.Plugin.Ldap/ClientProvisioning/LdapCapabilityProbe.cs-- probes LDAP server capabilities (supported controls, extensions, schema). - Capability Snapshot Cache:
src/Authority/StellaOps.Authority/StellaOps.Authority.Plugin.Ldap/ClientProvisioning/LdapCapabilitySnapshotCache.cs-- caches capability probe results to avoid repeated probes. - DN Helper:
src/Authority/StellaOps.Authority/StellaOps.Authority.Plugin.Ldap/ClientProvisioning/LdapDistinguishedNameHelper.cs-- parses and manipulates LDAP distinguished names. - Connection Factory:
src/Authority/StellaOps.Authority/StellaOps.Authority.Plugin.Ldap/Connections/DirectoryServicesLdapConnectionFactory.cs(implementsILdapConnectionFactory) -- creates LDAP connections with TLS. - Credential Store:
src/Authority/StellaOps.Authority/StellaOps.Authority.Plugin.Ldap/Credentials/LdapCredentialStore.cs-- manages LDAP bind credentials. - Security:
src/Authority/StellaOps.Authority/StellaOps.Authority.Plugin.Ldap/Security/LdapSecretResolver.cs-- resolves LDAP secrets from secure storage. - Metrics:
src/Authority/StellaOps.Authority/StellaOps.Authority.Plugin.Ldap/Monitoring/LdapMetrics.cs-- OpenTelemetry metrics for LDAP operations (bind latency, search duration, error rates). - Tests:
src/Authority/StellaOps.Authority/StellaOps.Authority.Plugin.Ldap.Tests/-- comprehensive tests across Claims/, ClientProvisioning/, Credentials/, Resilience/, Security/, Snapshots/ subdirectories.
E2E Test Plan
- Configure the LDAP plugin with a test LDAP server and authenticate a user; verify the token contains enriched claims from LDAP attributes (e.g.,
groups,department) - Verify claims caching: authenticate the same user twice and verify the second call uses cached claims from
InMemoryLdapClaimsCache - Verify client provisioning: configure auto-provisioning from an LDAP OU and verify an OAuth2 client is created for each service account entry
- Run
LdapCapabilityProbeagainst the LDAP server and verify it reports supported controls and extensions - Verify DN helper: parse a complex distinguished name (e.g.,
CN=John Doe,OU=Users,DC=example,DC=com) and verify each component is extracted correctly - Verify LDAP connection TLS: configure TLS and verify
DirectoryServicesLdapConnectionFactoryestablishes a secure connection - Simulate an LDAP server failure and verify the plugin returns an authentication error without leaking internal details
- Verify
LdapMetricsrecords bind latency and search duration via OpenTelemetry