Identity Providers
Use identity providers when users should sign in to Keycloak with an external identity system instead of local usernames and passwords. This is the right fit for social login, corporate SAML or OIDC federation, Kubernetes or OpenShift workload identity, SPIFFE-based trust, and controlled token exchange between clients and external providers.
API Reference
| Kind | API Group | Terraform | CRD Explorer |
|---|---|---|---|
IdentityProvider | oidc.keycloak.crossplane.io/v1alpha1 | keycloak_oidc_identity_provider | View CRD Schema |
GoogleIdentityProvider | oidc.keycloak.crossplane.io/v1alpha1 | keycloak_oidc_google_identity_provider | View CRD Schema |
IdentityProvider | saml.keycloak.crossplane.io/v1alpha1 | keycloak_saml_identity_provider | View CRD Schema |
IdentityProviderMapper | identityprovider.keycloak.crossplane.io/v1alpha1 | keycloak_custom_identity_provider_mapper | View CRD Schema |
KubernetesIdentityProvider | identityprovider.keycloak.crossplane.io/v1alpha1 | keycloak_kubernetes_identity_provider | View CRD Schema |
OidcOpenShiftV4IdentityProvider | identityprovider.keycloak.crossplane.io/v1alpha1 | keycloak_oidc_openshift_v4_identity_provider | View CRD Schema |
SpiffeIdentityProvider | identityprovider.keycloak.crossplane.io/v1alpha1 | keycloak_spiffe_identity_provider | View CRD Schema |
ProviderTokenExchangeScopePermission | identityprovider.keycloak.crossplane.io/v1alpha1 | keycloak_identity_provider_token_exchange_scope_permission | View CRD Schema |
Working YAML examples
OIDC Identity Provider
Use this resource for a generic OpenID Connect identity provider when you need explicit authorization and token endpoints.
apiVersion: oidc.keycloak.crossplane.io/v1alpha1
kind: IdentityProvider
metadata:
name: oidc-identity-provider
spec:
deletionPolicy: Delete
forProvider:
alias: my-idp
authorizationUrl: https://authorizationurl.com
clientIdSecretRef:
key: client-id
name: client-secret
namespace: dev
clientSecretSecretRef:
key: client-secret
name: client-secret
namespace: dev
extraConfig:
clientAuthMethod: client_secret_post
realmRef:
name: "dev"
policy:
resolve: Always
tokenUrl: https://tokenurl.com
providerConfigRef:
name: "keycloak-provider-config"OIDC Identity Provider with organization binding
Use organization binding when the external IdP should route users into a specific Keycloak organization.
apiVersion: oidc.keycloak.crossplane.io/v1alpha1
kind: IdentityProvider
metadata:
name: org-provider
spec:
deletionPolicy: Delete
forProvider:
alias: my-idp
authorizationUrl: https://authorizationurl.com
clientIdSecretRef:
key: client-id
name: client-secret
namespace: dev
clientSecretSecretRef:
key: client-secret
name: client-secret
namespace: dev
extraConfig:
clientAuthMethod: client_secret_post
realmRef:
name: "orgs"
policy:
resolve: Always
tokenUrl: https://tokenurl.com
orgDomain: example.com
orgRedirectModeEmailMatches: true
organizationIdRef:
name: example
policy:
resolve: Always
providerConfigRef:
name: "keycloak-provider-config"Google Identity Provider
Use the Google-specific CRD when you want the provider defaults and options exposed by keycloak_oidc_google_identity_provider.
apiVersion: oidc.keycloak.crossplane.io/v1alpha1
kind: GoogleIdentityProvider
metadata:
name: google
spec:
forProvider:
alias: google-idp
clientIdSecretRef:
key: client-id
name: client-secret
namespace: dev
clientSecretSecretRef:
key: client-secret
name: client-secret
namespace: dev
hostedDomain: example.com
realmRef:
name: "dev"
policy:
resolve: Always
syncMode: IMPORT
trustEmail: true
providerConfigRef:
name: "keycloak-provider-config"SAML Identity Provider
Use the SAML CRD for enterprise identity providers that publish SAML metadata and SSO/SLO endpoints.
apiVersion: saml.keycloak.crossplane.io/v1alpha1
kind: IdentityProvider
metadata:
name: saml-identity-provider
spec:
deletionPolicy: Delete
forProvider:
alias: my-saml-idp
backchannelSupported: true
entityId: https://domain.com/entity_id
forceAuthn: true
postBindingAuthnRequest: true
postBindingLogout: true
postBindingResponse: true
realmRef:
name: "dev"
policy:
resolve: Always
singleLogoutServiceUrl: https://domain.com/adfs/ls/?wa=wsignout1.0
singleSignOnServiceUrl: https://domain.com/adfs/ls/
storeToken: false
trustEmail: true
providerConfigRef:
name: "keycloak-provider-config"Identity Provider Mapper
Use mappers to transform claims or assertions from the external identity provider into Keycloak user attributes.
apiVersion: identityprovider.keycloak.crossplane.io/v1alpha1
kind: IdentityProviderMapper
metadata:
name: oidc-identity-provider-mapper
spec:
deletionPolicy: Delete
forProvider:
extraConfig:
Claim: my-email-claim
UserAttribute: email
syncMode: INHERIT
identityProviderAlias: my-idp
identityProviderMapper: '%s-user-attribute-idp-mapper'
name: email-attribute-importer
realmRef:
name: "dev"
policy:
resolve: Always
providerConfigRef:
name: "keycloak-provider-config"Kubernetes Identity Provider
Use this resource when Kubernetes-issued tokens should be accepted as an external identity source.
apiVersion: identityprovider.keycloak.crossplane.io/v1alpha1
kind: KubernetesIdentityProvider
metadata:
name: k8s-federated-idp
spec:
deletionPolicy: Delete
forProvider:
alias: k8s-federated
realmRef:
name: "orgs"
policy:
resolve: Always
organizationIdRef:
name: example
policy:
resolve: Always
issuer: https://kubernetes.default.svc
trustEmail: true
syncMode: FORCE
enabled: true
providerConfigRef:
name: "keycloak-provider-config"OpenShift V4 Identity Provider
Use this resource to federate with OpenShift 4 clusters through the provider’s purpose-built OIDC integration.
apiVersion: identityprovider.keycloak.crossplane.io/v1alpha1
kind: OidcOpenShiftV4IdentityProvider
metadata:
name: openshift-v4-identity-provider
spec:
deletionPolicy: Delete
forProvider:
alias: openshift-v4
baseUrl: https://openshift.example.com:8443
clientId: openshift-client
clientSecretSecretRef:
key: client-secret
name: client-secret
namespace: dev
defaultScopes: user:full
realmRef:
name: "dev"
policy:
resolve: Always
syncMode: IMPORT
trustEmail: true
providerConfigRef:
name: "keycloak-provider-config"SPIFFE Identity Provider
Use this resource with Keycloak 26.5+ when workload identities should be validated through a SPIFFE trust domain and bundle endpoint.
apiVersion: identityprovider.keycloak.crossplane.io/v1alpha1
kind: SpiffeIdentityProvider
metadata:
name: spiffe-identity-provider
spec:
deletionPolicy: Delete
forProvider:
alias: spiffe-idp
bundleEndpoint: https://example.com/spiffe/bundle
realmRef:
name: "dev"
policy:
resolve: Always
trustDomain: spiffe://test-domain.example
providerConfigRef:
name: "keycloak-provider-config"Provider Token Exchange Scope Permission
Use token exchange scope permissions when selected clients are allowed to exchange tokens against an external identity provider.
apiVersion: identityprovider.keycloak.crossplane.io/v1alpha1
kind: ProviderTokenExchangeScopePermission
metadata:
name: token-exchange-permission
spec:
deletionPolicy: Delete
forProvider:
clientsRefs:
- name: token-exchange-test-client
policy:
resolve: Always
policyType: client
providerAliasRef:
name: token-exchange-test-idp
policy:
resolve: Always
realmIdRef:
name: dev
policy:
resolve: Always
providerConfigRef:
name: "keycloak-provider-config"Key fields
Common identity provider fields
| Field | Applies to | Why it matters |
|---|---|---|
alias | Most provider CRDs | Unique Keycloak alias used by login screens, mappers, and token exchange rules. |
realmRef / realmIdRef | All CRDs on this page | Selects the realm that owns the provider or permission. |
providerConfigRef | All resources | Points at the Crossplane provider configuration used to talk to Keycloak. |
enabled | Provider CRDs | Controls whether the provider is active for authentication. |
syncMode | OIDC, Google, Kubernetes, OpenShift, mappers | Decides how external identities are synchronized into Keycloak users. |
trustEmail | Google, SAML, Kubernetes, OpenShift | Marks externally supplied email addresses as trusted. |
organizationIdRef | OIDC org binding, Kubernetes | Binds the provider to a Keycloak organization. |
Protocol-specific fields
| Field | Resource | Why it matters |
|---|---|---|
authorizationUrl | OIDC IdentityProvider | Authorization endpoint for the external OIDC provider. |
tokenUrl | OIDC IdentityProvider | Token endpoint used by Keycloak to exchange authorization codes. |
clientIdSecretRef / clientSecretSecretRef | OIDC, Google, OpenShift | Reads client credentials from Kubernetes secrets instead of embedding them in manifests. |
entityId | SAML IdentityProvider | Declares the remote SAML IdP entity identifier. |
singleSignOnServiceUrl | SAML IdentityProvider | Remote SAML SSO entrypoint. |
singleLogoutServiceUrl | SAML IdentityProvider | Remote SAML logout endpoint. |
identityProviderAlias | IdentityProviderMapper | Attaches the mapper to a specific provider alias. |
extraConfig | OIDC providers and mappers | Holds provider- or mapper-specific settings such as client auth method or claim mapping. |
issuer | KubernetesIdentityProvider | Expected token issuer for Kubernetes service account tokens. |
baseUrl | OidcOpenShiftV4IdentityProvider | Base URL for the OpenShift cluster’s OIDC endpoints. |
bundleEndpoint | SpiffeIdentityProvider | URL that publishes the SPIFFE bundle used for trust validation. |
trustDomain | SpiffeIdentityProvider | SPIFFE trust domain accepted by the identity provider. |
providerAliasRef | ProviderTokenExchangeScopePermission | Refers to the external provider whose tokens may be exchanged. |
clientsRefs | ProviderTokenExchangeScopePermission | Lists the Keycloak clients that receive token exchange permission. |
Related Resources
- Organizations — Bind identity providers to Keycloak organizations.
- Authentication Flows — Redirect users through identity providers as part of custom login flows.
- Users — Understand how federated identities map to Keycloak user records.