OpenID Connect (OIDC)
What it is
OpenID Connect (OIDC) is a thin identity layer built on top of OAuth 2.0. Where OAuth gives an app delegated access, OIDC adds standardized authentication: it tells the app that a user logged in, when, how, and who they are. The core artifact is the ID token, a signed JWT the app validates locally. OIDC is the default protocol for modern single sign-on across consumer apps, mobile, SaaS, and workforce identity providers.
The normative text is OpenID Connect Core 1.0 incorporating errata set 2, dated 15 December 2023, by Nat Sakimura, John Bradley, Mike Jones, Breno de Medeiros and Chuck Mortimore.
Status (November 2026)
| Item | Status |
|---|---|
| OpenID Connect Core 1.0 | Final, incorporating errata set 2 (15 December 2023) |
| ISO/IEC 26131:2024 | Core published as an ISO/IEC International Standard, October 2024 (OpenID Foundation) |
| ITU-T X.1285 | "OpenID Connect Core 1.0 - Errata Set 2", approved 29 May 2025, in force (ITU) |
| Companion specs | Discovery, Dynamic Client Registration and the logout specs are separate OpenID Foundation documents, several also published as ISO/IEC standards |
The ISO and ITU publications do not change the protocol. They matter for procurement and regulation in jurisdictions that require specifications from treaty-recognized standards bodies, which is the reason the OpenID Foundation gave for pursuing them. The OpenID Foundation's specifications page is the place to check which companion specs have ISO numbers.
How it works: the Authorization Code Flow
OIDC Core defines three flows. The Authorization Code Flow (response_type=code) is the one to use. Section 3.1 of the spec, in practice:
- Discovery. The client (the "relying party") fetches the provider's metadata from
/.well-known/openid-configurationto learn the authorization endpoint, token endpoint, userinfo endpoint, supported algorithms and the JWKS URI. - Authentication request. The client redirects the browser to the authorization endpoint with
response_type=code,scopecontainingopenid,client_id, an exactly registeredredirect_uri, astatevalue, anonce, and a PKCEcode_challenge. - User authentication. The OpenID Provider authenticates the user (password, passkey, federation, whatever its policy demands) and obtains consent if needed.
- Callback. The provider redirects back with a short-lived authorization code and the
state. - Token request. The client sends the code and the PKCE
code_verifierto the token endpoint over TLS, authenticating itself if it is a confidential client. - Tokens returned. The response carries an ID token, an access token, and optionally a refresh token.
- Validation. The client validates the ID token (next section) and establishes its own session.
- Userinfo (optional). The client calls the userinfo endpoint with the access token for additional profile claims.
The Implicit Flow (id_token or id_token token) returns tokens directly from the authorization endpoint, and the Hybrid Flow (code id_token, code token, code id_token token) returns some tokens there and some from the token endpoint. Both predate PKCE. The OAuth 2.0 Security BCP (RFC 9700) says clients should not use response types that issue access tokens in the authorization response, and OAuth 2.1 removes the implicit grant.
The ID token, and how to validate it
Required claims are iss, sub, aud, exp and iat. auth_time is required when max_age was requested, nonce is required when the request contained one, and acr, amr and azp are optional. The identity key is the pair iss plus sub, never email, which can change or be reassigned.
Section 3.1.3.7 lists the validation steps. The ones that matter most:
issmust exactly match the issuer identifier from discovery.audmust contain yourclient_id; reject tokens listing audiences you do not trust.- Verify the signature with the issuer's keys. The default
algis RS256 unless you registered another. A token received directly from the token endpoint over TLS may rely on TLS for issuer authentication, but most libraries verify the signature anyway, and you should too. expmust be in the future, andiatwithin your acceptable window.- If you sent a
nonce, the claim must be present and match. - Check
acrandauth_timewhen you asked for a level of assurance or a maximum age.
Common implementation mistakes and attacks
| Mistake | What goes wrong | Example in our catalog |
|---|---|---|
Not verifying the signature, or accepting alg: none |
Anyone can forge an ID token and log in as anyone | CVE-2026-48558: SimpleHelp accepted unsigned OIDC tokens, skipping MFA; exploited, see the incident |
| Accepting algorithms you did not configure | Key confusion lets an attacker sign with a key you never meant to trust | CVE-2026-5430 (WSO2 API Manager), CVE-2023-29357 (SharePoint) |
| Loose audience on client assertions | A private_key_jwt assertion meant for one server is replayed at another |
CVE-2025-27370, technique token replay at an unbound endpoint |
| Trusting tokens across tenants of a multi-tenant IdP | Any tenant's user is accepted | cross-tenant token confusion |
Keying accounts on email instead of iss + sub |
Account takeover when a provider lets users set an unverified email | Pattern, not a single CVE |
Skipping state, nonce or PKCE |
Login CSRF and authorization code injection | RFC 9700 sections 4.5 and 4.7 |
| Using the ID token to call APIs | APIs accept a token whose audience is the client, not the API | Use the access token |
OIDC does not protect a user who completes a real login on a proxy: adversary-in-the-middle phishing captures the resulting session cookie regardless of protocol. That is an authenticator problem, solved by phishing-resistant MFA at the provider.
When to use it
Any time you need to log a user in. Reach for OIDC over raw OAuth for authentication, and over SAML when building modern web, mobile, or API-centric apps. SAML still wins where an enterprise customer's IdP only speaks SAML, which is why B2B products often support both.
Related standards
- OAuth 2.0 and OAuth 2.1: the authorization layer OIDC sits on.
- FAPI 2.0: a security profile of OAuth and OIDC for open banking and other high-value APIs.
- Shared Signals Framework: pushes session-revoked and account-disabled events between providers and apps after login.
- OpenID for Verifiable Credentials: issuance and presentation of credentials built on the same family.
- CIBA: decoupled authentication, where the user approves on another device.
- ID-JAG and Cross App Access: exchanges an OIDC ID token for access to another app's API.
Who implements it
Almost every identity provider and CIAM platform ships an OIDC provider. The OpenID Foundation runs a certification program; certified OpenID Provider entries we saw on 5 November 2026 include Auth0, ForgeRock, Keycloak, Curity, Gluu, authentik and Akamai Identity Cloud. Certification is per product version, so check the list for the release you run. For choosing a provider, see the CIAM buyer guide and the IAM buyer guide.
How to check an implementation
- Decode a real ID token with the JWT decoder and confirm
iss,aud,expandnonceare what you expect. - Change one byte of the signature and replay it. Your app must reject it.
- Re-sign the header as
"alg": "none"with an empty signature. Rejected. - Send a token issued for another client ID. Rejected on
aud. - Omit
noncefrom a callback where you sent one. Rejected.
How it works, message by message
The OIDC message-flow walkthrough shows each HTTP exchange of the authorization code flow with annotated values: discovery, the authentication request, the callback, the token request with PKCE, the token response and a decoded ID token, with every parameter tied to its OIDC Core or RFC section. Check a provider's metadata with the OIDC discovery checker.
Related
Guides: OAuth vs OIDC, SAML vs OIDC, implementing OAuth 2.0 and OpenID Connect, implementing SSO. Glossary: OIDC, ID token, claims, identity provider, relying party.
Who wrote it
OpenID Connect was authored by a group including Nat Sakimura, Mike Jones, and John Bradley. Vittorio Bertocci did much of the work of explaining it to developers, and Filip Skokan and Roland Hedberg maintain certified implementations. More in the experts directory.
OpenID Connect (OIDC): frequently asked questions
- What is OpenID Connect (OIDC)?
- OpenID Connect is a thin identity layer built on top of OAuth 2.0. Where OAuth grants an app delegated access to resources, OIDC adds standardized authentication: it proves that a user logged in and returns who they are through a signed ID token. It is the modern foundation for single sign-on across web, mobile, and API-centric apps.
- What is the difference between OpenID Connect and OAuth 2.0?
- OAuth 2.0 is an authorization framework: it lets an app act on a user's behalf without handling their password. OpenID Connect adds authentication on top, telling the app who the user is via an ID token. Use OAuth for delegated access to APIs, and OIDC when you need to log a user in.
- What is the difference between an ID token and an access token?
- An ID token is proof of authentication, a signed JWT with claims about the user (subject, name, email, authentication time) that the app validates and reads. An access token is an OAuth credential used to call APIs. Do not use an ID token to call APIs, and do not treat an access token as proof of who the user is.
- Is OpenID Connect the same as SAML?
- No. Both enable single sign-on, but OIDC is a modern JSON and JWT-based protocol suited to web, mobile, and APIs, while SAML 2.0 is an older XML-based standard still common in enterprise federation. New applications generally choose OIDC; SAML persists where enterprise identity providers and legacy integrations require it.
- Is OpenID Connect an ISO standard?
- Yes. OpenID Connect Core 1.0 incorporating errata set 2 was published as ISO/IEC 26131:2024 in October 2024, and the ITU-T approved the same text as Recommendation X.1285 on 29 May 2025. The OpenID Foundation version at openid.net remains the reference most implementers read, and the three texts are technically aligned.
- Which OpenID Connect flow should a new application use?
- The Authorization Code Flow (response_type=code) with PKCE, for web, mobile, and single-page apps alike. OIDC Core also defines the Implicit and Hybrid flows, but the OAuth 2.0 Security Best Current Practice (RFC 9700) says clients should not use response types that return access tokens in the authorization response, and OAuth 2.1 removes the implicit grant.
- Which ID token claims must a client validate?
- At minimum: the signature against the issuer's published keys, iss matching the expected issuer exactly, aud containing your client_id, exp in the future, and nonce matching the value you sent if you sent one. Check azp when present, auth_time when you requested max_age, and acr when you requested a specific authentication level.
Related on Start with Identity
- RecipeAdd login to a Next.js app with OIDC
A complete, copy-paste OpenID Connect login for the Next.js App Router using authorization code flow with PKCE, server-side token exchange, and httpOnly cookies
- BlogCISA adds the last two Ivanti Connect Secure chain flaws to KEV after Ivanti's October 29 patch
CISA added Ivanti Connect Secure CVE-2026-111357 and CVE-2026-118527 to its exploited list on October 30, a day after Ivanti patched the root escalation UTA0576
- ExpertCo-chair, OpenID Shared Signals working group
Annabelle Backman is a principal security engineer on AWS Identity and co-chairs the OpenID Shared Signals and Events working group. She edited RFC 8935 and RFC
- CVEDrupal Simple OAuth/OIDC auth bypass via an alternate path
Drupal Simple OAuth / OIDC 6.0.0 through 6.0.6 allowed authentication to be skipped on an alternate path. Patched in 6.0.7.
- ExpertEditor, OpenID for Verifiable Credentials
Kristina Yasuda edits OpenID for Verifiable Presentations and OpenID for Verifiable Credential Issuance, the two protocols that move credentials between issuers
- ExpertExecutive Director, OpenID Foundation
Gail Hodges has been executive director of the OpenID Foundation since May 2021. She founded the Future Identity Council and previously led identity and payment