Manage custom identity providers in the Chainguard Console
How to create, update, and delete a custom identity provider in the Chainguard Console, map IdP groups to roles, and set …
For the complete documentation index, see llms.txt.
System for Cross-domain Identity Management (SCIM) is an open standard for automating the exchange of user identity information between systems. Chainguard uses SCIM to create and deactivate user accounts based on your identity provider (IdP). Connect your IdP’s SCIM provisioning once; from then on, assigning a user to the application provisions them, and deactivating or unassigning them removes their Chainguard access. Accounts follow your IdP, so you manage access in one place.
Chainguard’s SCIM provisioning manages accounts, and it can also grant roles. Okta and Microsoft Entra ID can both push groups over SCIM, and Chainguard grants the roles you’ve mapped to each group as role bindings for its members. To set this up, refer to “Push groups to grant roles” in the Okta guide or the Entra ID guide.
You can also grant roles from the groups claim in your IdP’s login token, using group mappings. Chainguard applies these mappings only to a user who already holds a role in your organization. Enabling SCIM clears the identity provider’s default role, so with SCIM, a newly provisioned user needs a role from a pushed group before the groups claim takes effect.
This page explains how provisioning behaves and how to manage the connection over its lifetime. To connect a specific identity provider, follow its guide:
The commands on this page use chainctl. You can also generate, rotate, and revoke the token, and turn provisioning on and off, in the Chainguard Console. Refer to the “Set up SCIM provisioning” section of Manage custom identity providers in the Chainguard Console.
Provisioning behaves the same way for every provider:
externalId, never by email. A provisioned user connects to a login by matching the SCIM externalId your IdP sends against the subject of the login token. Each provider guide covers how to make the two align. Chainguard never uses email addresses for matching.The provider guides share the following prerequisites:
chainctl installed on your local machine. Follow our guide on How to install chainctl if you don’t already have this installed. You must also authenticate with chainctl auth login.The commands on this page refer to your identity provider by its UIDP, stored in the IDENTITY_PROVIDER environment variable. Retrieve and set it with the following command:
export IDENTITY_PROVIDER=$(chainctl iam identity-providers list -o json | jq -r '.items[0].id')Organizations generally have one identity provider, so the list usually holds a single entry and the .items[0].id filter selects it. If the list holds more than one — because you belong to several organizations, or your organization has several providers — run chainctl iam identity-providers list on its own and set IDENTITY_PROVIDER to the UIDP of the provider you are configuring.
Your IdP authenticates to Chainguard’s SCIM endpoint with a bearer token. Generate it with the following command:
chainctl iam identity-providers scim token generate $IDENTITY_PROVIDERThis command prints the token to standard output and the SCIM endpoint URL and expiry to standard error. Chainguard shows the token exactly once and stores only a digest of it, so paste it into your IdP right away. If you lose it, create a replacement with the regenerate command shown in Manage provisioning.
Tokens expire after one year by default. Set a different lifetime with --expires-in (up to two years), or issue a non-expiring token with --never-expires.
Generating a token does not start provisioning. Enable it with the following command:
chainctl iam identity-providers scim enable $IDENTITY_PROVIDERChainguard now accepts provisioning requests from your IdP. If the command fails with a message about owner-tier identities, your organization has no owner who can sign in and holds the owner role directly; refer to Prerequisites.
Disabling stops Chainguard from accepting provisioning requests. It doesn’t invalidate the token, and already provisioned users are unaffected:
chainctl iam identity-providers scim disable $IDENTITY_PROVIDERRotate the token. Replace the token while your IdP keeps working through the change. The previous token keeps authenticating for the overlap window (one hour by default, up to 24 hours) while you paste the new one into your IdP:
chainctl iam identity-providers scim token regenerate $IDENTITY_PROVIDER --overlap 1hRevoke the token. If you suspect the token is exposed, revoke it. This immediately invalidates the current token and any overlap token:
chainctl iam identity-providers scim token revoke $IDENTITY_PROVIDERProvisioning requests fail until you regenerate a replacement; revoking contains a compromise without turning provisioning off. If you want an immediate replacement instead of a stop, regenerate with --overlap 0.
Delete a user in your IdP. If your IdP sends a SCIM delete (distinct from deactivation), Chainguard removes the provisioning record entirely and deactivates the user’s account.
Token lifecycle and the on/off switch are independent: rotating or revoking a token never disables provisioning, and disabling never invalidates a token.
The correlation rule decides which claim in the login token Chainguard matches against the externalId your IdP provisions: sub_equals_external_id, the default, or oid_equals_external_id for Microsoft Entra ID. With the wrong rule, provisioned users log in but never connect to their provisioning records, so they get none of the roles from pushed groups. For example, a Microsoft Entra ID identity provider created with the default rule has this problem.
Change the rule with the following command:
chainctl iam identity-providers reset-correlation-rule $IDENTITY_PROVIDER --oidc-correlation-rule=oid_equals_external_idThe command shows the identity provider’s current rule and asks you to confirm. The default answer is no; pass --yes to skip the prompt in a script. Changing the rule requires a role that can manage both identity providers and SCIM provisioning, such as owner. The oid_equals_external_id rule also requires profile in the identity provider’s scopes; add it with chainctl iam identity-providers update first if it’s missing.
Changing the rule has these effects:
The command can take several minutes. Interrupting it doesn’t stop the change. If the command fails or is interrupted, the change might still have been applied. To check, run chainctl iam identity-providers describe $IDENTITY_PROVIDER -o json. If the output has no correlation_rule, the rule is sub_equals_external_id. It’s safe to run the command again.
The command reports how many users it disconnected and how many role bindings it removed. If it reports that it couldn’t disconnect every user, run the same command again to finish. Running it with the rule the identity provider already has changes nothing else.
You can’t change the correlation rule in the Chainguard Console.
429 with a Retry-After header; IdPs retry on their own schedule.Last updated: 2026-10-15 00:00