37. Identity Federation Architecture
Date: 2025-01-28Status
AcceptedCategory
Authentication & AuthorizationContext
Enterprise users exist in multiple identity systems (Active Directory, Azure AD, Google Workspace, Okta, GitHub) and forcing migration to Keycloak-only creates adoption barriers. Need to support:- LDAP/Active Directory (10,000+ user enterprises)
- SAML providers (ADFS, Azure AD, Ping Identity)
- OIDC providers (Google, Microsoft, GitHub, Okta, OneLogin)
- Maintain single JWT output for consistent authorization
Decision
Implement Identity Federation via Keycloak as identity broker, federating all external identity providers while normalizing to consistent JWT output.Architecture
Federation Strategies
1. LDAP/Active Directory (User Storage Provider)
Use Case: Corporate directory with 1,000-100,000 users Configuration:2. SAML 2.0 (Identity Broker)
Use Case: Enterprise SSO (ADFS, Azure AD, Ping) Configuration:3. OIDC (Identity Broker)
Use Case: Social login, cloud providers Providers: Google, Microsoft, GitHub, Okta, OneLogin Configuration:Attribute Mapping
LDAP → Keycloak:Configuration
Consequences
Positive Consequences
- Enterprise adoption (no forced migration)
- Consistent JWT output (all providers → same format)
- Centralized user view (federated users in Keycloak)
- Attribute normalization (consistent schema)
- Single authorization model (OpenFGA uses Keycloak JWTs)
Negative Consequences
- Configuration complexity (multiple providers)
- LDAP/SAML expertise required
- Attribute mapping maintenance
- Performance (additional network hop)
- Provider outages impact authentication
Mitigation Strategies
- Automated setup scripts for common providers
- Monitoring provider availability
- Fallback to local Keycloak users if provider down
- Connection pooling to LDAP/SAML endpoints
Alternatives Considered
- Direct Integration: Rejected - each app integrates with N providers (complexity)
- No Federation: Rejected - forces user migration, adoption barrier
- Multiple Keycloak Realms: Rejected - inconsistent tokens, complex management
Implementation
Setup Scripts:scripts/setup/setup_ldap_federation.py- Configure LDAPscripts/setup/setup_saml_idp.py- Configure SAML providersscripts/setup/setup_oidc_idp.py- Configure OIDC providers
config/ldap_mappers.yaml- LDAP attribute mappingconfig/saml_mappers.yaml- SAML claim mappingconfig/oidc_providers.yaml- OIDC provider configs
sync_user_to_openfga() handles federated users automatically (extracts roles from Keycloak JWT regardless of source).
References
- Related ADRs: ADR-0031, ADR-0032
- External: SAML 2.0, OIDC Core, LDAP RFC 4511