identree authenticates users via OIDC. If your organization uses a SAML-only identity provider, deploy an OIDC-to-SAML bridge between your IdP and identree.
| Bridge | Notes |
|---|---|
| Keycloak | Identity brokering: accepts SAML from upstream IdP, exposes OIDC to identree |
| Authentik | SAML source + OIDC provider in one deployment |
| Dex | Lightweight, supports SAML connector to upstream IdP |
SAML IdP (Okta, Azure AD, etc.)
|
| SAML assertion
v
Keycloak (bridge)
|
| OIDC tokens
v
identree
- Deploy Keycloak
- Create a realm
- Add a SAML Identity Provider pointing at your SAML IdP's metadata URL
- Create an OIDC client for identree:
- Client ID:
identree - Valid Redirect URIs:
https://identree.example.com/callback - Client authentication: On (confidential)
- Client ID:
- Map SAML attributes to OIDC claims (groups, username)
- Configure identree:
IDENTREE_OIDC_ISSUER_URL=https://keycloak.example.com/realms/your-realm IDENTREE_OIDC_CLIENT_ID=identree IDENTREE_OIDC_CLIENT_SECRET=<from keycloak>
- No SAML parsing in identree. SAML is a complex protocol with a large attack surface (XML signature wrapping, assertion replay, etc.). Delegating it to a battle-tested implementation like Keycloak eliminates that risk.
- Battle-tested SAML implementations. Keycloak, Authentik, and Dex have mature SAML stacks used in production by thousands of organizations.
- One extra container, one fewer attack surface. The bridge adds a single container but removes an entire class of vulnerabilities from identree.
- Protocol flexibility. The same bridge can federate multiple upstream IdPs (SAML, LDAP, social) into a single OIDC issuer for identree.
- Deploy Authentik
- Create a SAML Source pointing at your SAML IdP
- Create an OAuth2/OIDC Provider for identree
- Create an Application linking the provider to identree
- Configure identree with the Authentik OIDC issuer URL and client credentials
- Deploy Dex
- Add a SAML connector in
dex.yaml:connectors: - type: saml id: enterprise-idp name: Enterprise IdP config: ssoURL: https://idp.example.com/saml/sso ca: /etc/dex/saml-ca.pem redirectURI: https://dex.example.com/callback usernameAttr: name emailAttr: email groupsAttr: groups
- Add a static client for identree:
staticClients: - id: identree secret: <generated-secret> name: identree redirectURIs: - https://identree.example.com/callback
- Configure identree:
IDENTREE_OIDC_ISSUER_URL=https://dex.example.com IDENTREE_OIDC_CLIENT_ID=identree IDENTREE_OIDC_CLIENT_SECRET=<from dex>
The existing Keycloak provider test (test/providers/keycloak/) validates that identree works correctly with Keycloak as an OIDC provider. This is the same configuration used in the bridge architecture -- identree connects to Keycloak via OIDC regardless of how Keycloak authenticates users upstream (password, SAML, social login, etc.).
To test the full SAML-to-OIDC bridge flow with two Keycloak instances, see test/providers/keycloak-saml-bridge/.