31. Keycloak as Authoritative Identity Provider
Date: 2025-01-28Status
AcceptedCategory
Authentication & AuthorizationContext
Modern enterprise applications integrate with multiple identity sources (LDAP, Active Directory, Azure AD, Google Workspace, Okta, GitHub) while maintaining consistent authentication, authorization, and user management. Operating multiple authentication systems in parallel creates significant challenges:- Identity Fragmentation: Users exist in multiple systems with inconsistent attributes
- Authorization Complexity: Permissions scattered across identity providers
- Operational Burden: Managing user lifecycle across disparate systems
- Security Gaps: No centralized audit trail or access control
- Integration Overhead: Each application must integrate with N identity providers
- Session Management: Inconsistent token formats, lifetimes, and refresh mechanisms
- Enterprise SSO: Users authenticate once across all applications
- Federated Identity: Support LDAP, ADFS, SAML, OIDC providers
- Centralized Administration: Single place to manage users, roles, permissions
- Consistent Tokens: JWT format across all authentication methods
- API Access: Programmatic user management (SCIM provisioning)
- Long-lived Sessions: Support for batch jobs, streaming tasks, background processes
Decision
We will use Keycloak as the single authoritative identity provider for all authentication and identity management, with identity federation to existing enterprise identity sources.Architecture
Core Principles
- Single Source of Truth: All identity data canonicalized in Keycloak
- Federation, Not Replication: External users authenticate via federation
- JWT Standardization: All auth flows produce Keycloak-issued JWTs
- Attribute Mapping: External attributes mapped to Keycloak schema
- Centralized Administration: All user management through Keycloak
Configuration
Consequences
Positive Consequences
- Centralized identity, consistent authentication, enterprise SSO
- Simplified integration, centralized audit trail
- Single role/group hierarchy, consistent token lifecycle
- Future-proof, industry-standard OIDC/SAML
Negative Consequences
- Single point of failure, operational complexity
- Migration effort, performance overhead
- Keycloak expertise required, SCIM gap (requires bridge)
Mitigation Strategies
- Multi-replica HA deployment, PostgreSQL clustering
- JWKS caching, connection pooling, Redis sessions
- Custom FastAPI SCIM endpoints bridging to Keycloak Admin API
Alternatives Considered
- Multiple Identity Providers: Rejected - identity fragmentation, inconsistent tokens
- Cloud IAM (Auth0/Okta): Rejected - cost at scale, vendor lock-in, data sovereignty
- Custom Identity Service: Rejected - development cost, security risks
- Hybrid Approach: Rejected - inconsistent UX, creates technical debt
Implementation Details
Seescripts/setup/setup_keycloak.py, scripts/setup/setup_ldap_federation.py, scripts/setup/setup_saml_idp.py, scripts/setup/setup_oidc_idp.py
References
- Keycloak Provider:
src/mcp_server_langgraph/auth/keycloak.py - Deployment:
deployments/base/keycloak-deployment.yaml - Related ADRs: ADR-0007, ADR-0032, ADR-0037, ADR-0038
- External: Keycloak Docs, SAML 2.0, OIDC Core 1.0