Any OpenID Connect provider#
The oidc-generic driver works with any provider that publishes a discovery
document. Okta, Auth0, Authentik, Zitadel, Keycloak, ORCID, your organization's
own server.
Note
The Plone side of this recipe was verified against the demo stack on 2026-09-05. The provider side depends on which provider you use.
1. Check the provider is usable#
Fetch its discovery document before configuring anything:
curl -s https://id.example.com/.well-known/openid-configuration | jq
You need four things in the response:
Field |
Why |
|---|---|
|
must equal the URL you will configure, exactly |
|
where the browser is sent |
|
where this site exchanges the code |
|
where the signing keys come from |
If that URL 404s, the provider is not an OpenID Connect provider and this driver
will not work with it. If it returns something and issuer differs from the URL
you fetched, configure the value of issuer, not the URL you typed.
2. Register this site with the provider#
In the provider's own console, create an application or client with:
Redirect URI |
|
Grant type |
authorization code |
Response type |
code |
Note the client ID and client secret it gives you.
3. Add the provider#
Open the Identity providers control panel.
Add a provider and choose OpenID Connect (
oidc-generic).On the Settings tab:
Field
Value
Title
what the button should say
Issuer
the
issuervalue from step 1Client ID
from step 2
Client secret
from step 2
Scope
leave empty for the default
openid email profileSave, then use Test connection.
4. Set the trust switches#
On the Accounts tab. This driver ships with everything off, because a generic provider is one whose sign-up rules this package cannot know.
Field |
Guidance |
|---|---|
Trust this provider's email verification |
On only if you know it refuses to call an address verified until the account has answered mail at it |
Attach to an existing account with the same verified email |
Needs the switch above |
Let this provider create accounts |
Off if membership is decided here |
This provider sends verification flags as text |
Only if step 5 says so |
Warning
A provider that marks addresses verified according to weaker rules than yours is an account takeover waiting to happen: somebody registers there with an address belonging to one of your users, and this site hands them the account. See About email verification.
5. Check how it sends email_verified#
Some providers send the string "true" rather than the boolean true.
If linking by email never fires even though both switches are on, this is almost certainly why. Turn on This provider sends verification flags as text.
The symptom is that nothing visibly goes wrong: sign-in works, every address arrives unverified, and no error says so.
6. Groups, if the provider sends them#
On the Groups tab, set Groups arrive in the claim to the claim your
provider uses. groups is the default. Use a dotted path for a provider that
nests them, such as realm_access.roles.
Then map the ones that mean something here—see How to map provider groups.
Verify#
Open
/login. The button is there.Sign in. You are sent to the provider and returned signed in.
/identitieslists the identity.The audit log has an
authenticatedentry.
If any step fails, How to troubleshoot sign-in is organized by exactly these symptoms.