OpenID Connect (OIDC) is an authentication protocol built as a thin layer on top of OAuth 2.0, published by the OpenID Foundation in 2014. Where OAuth 2.0 defines how to delegate authorisation (granting access to resources), OIDC adds the missing authentication semantics: a standard ID token that proves who the user is, a UserInfo endpoint that returns standardised identity claims, and a discovery document that allows clients to configure themselves automatically from a single well-known URL. The separation is precise: OAuth 2.0 access tokens prove that a client is authorised to call an API; OIDC ID tokens prove that a specific user authenticated with a specific identity provider at a specific time. OIDC is the protocol behind virtually every “Sign in with Google / GitHub / Microsoft” flow, every SAML-to-modern-stack migration, and every Kubernetes service account token issued today — making it the dominant authentication federation standard in cloud-native infrastructure.
The OIDC flow follows the OAuth 2.0 Authorization Code + PKCE pattern, with one critical addition: the openid scope. When a client includes openid in its authorisation request, the authorisation server returns both an access token and an ID token from the token endpoint. The ID token is a JWT with a mandatory set of claims: iss (issuer — the identity provider’s URL), sub (subject — a stable, unique identifier for the user within this issuer), aud (audience — the client ID), exp and iat (expiry and issued-at), and nonce (a client-generated random value included in the authorisation request and echoed in the ID token, binding the token to the specific session and preventing replay). Optional but standard claims include name, email, email_verified, phone_number, preferred_username, picture, and locale; extended claims are returned from the UserInfo endpoint (GET /userinfo with the access token as a Bearer credential). The discovery document at <issuer>/.well-known/openid-configuration is a JSON document that publishes the provider’s token endpoint, authorisation endpoint, JWKS URI (where the provider’s signing keys are published for token verification), supported scopes, supported response types, and claims supported — enabling clients to configure themselves without hardcoded endpoint URLs. A client verifies an ID token by: fetching the JWKS from the JWKS URI, finding the key matching the token’s kid header claim, verifying the JWT signature, checking iss matches the expected provider, checking aud contains the client’s ID, checking exp is in the future, and checking the nonce matches what was sent — this is the complete verification sequence; omitting any step is a security vulnerability.
OIDC’s most significant infrastructure use case beyond user-facing SSO is workload identity federation: using OIDC-issued tokens as credentials for machine-to-machine access without static secrets. Kubernetes issues service account tokens (since Kubernetes 1.21, projected service account tokens are OIDC JWTs signed by the cluster’s OIDC provider, discoverable at the cluster’s /.well-known/openid-configuration) that pods can present to external services. AWS STS’s AssumeRoleWithWebIdentity API accepts a Kubernetes service account JWT and, if the cluster’s OIDC issuer is registered as a trusted identity provider in the AWS account, returns temporary IAM credentials — no AWS_ACCESS_KEY_ID stored anywhere, the pod’s identity is its Kubernetes service account. GCP Workload Identity Federation and Azure AD federated credentials work identically. SPIFFE/SPIRE’s OIDC federation endpoint issues JWT-SVIDs as OIDC tokens, allowing SPIRE-identified workloads to access cloud APIs through the same mechanism. On the Kubernetes control plane, the API server itself acts as an OIDC relying party: --oidc-issuer-url, --oidc-client-id, and --oidc-username-claim configure it to accept OIDC JWTs from an external identity provider (Dex, Keycloak, Okta, GitHub) as kubectl authentication tokens, enabling SSO for cluster access without distributing static kubeconfig credentials. cert-manager uses OIDC tokens for ACME DNS-01 and HTTP-01 challenge solvers when authenticating to cloud DNS providers, and Vault’s JWT/OIDC auth method accepts OIDC tokens as Vault login credentials — mapping OIDC claims to Vault policies. The PQC implication for OIDC is the same as for any JWT-based system: the ID token and service account token signatures are ECDSA or RSA today; migrating the identity provider’s signing key to ML-DSA propagates quantum-safe signatures into every federated authentication decision downstream.
