OpenID Connect
OpenID Connect (OIDC)
Section titled “OpenID Connect (OIDC)”Standards
Section titled “Standards”- OpenID Connect Core 1.0
- OpenID Connect Discovery 1.0
Available Flows
Section titled “Available Flows”| Flow ID | Name | Description |
|---|---|---|
oidc_authorization_code |
Authorization Code | OIDC authentication with ID token |
oidc_hybrid |
Hybrid Flow | Combined code + token response (Section 3.3) |
oidc_implicit |
Implicit (Legacy) | Browser-based OIDC flow |
oidc_userinfo |
UserInfo | Claims retrieval from the UserInfo endpoint |
oidc_discovery |
Discovery | OpenID Provider metadata and JWKS resolution |
interaction-code |
Interaction Code | Interactive authorization with PKCE |
Demo Scenarios
Section titled “Demo Scenarios”- Login with OpenID Connect – Full OIDC authentication flow
- ID Token Deep Dive – Token decoding and claims inspection
- Discovery Document Exploration – Provider metadata resolution
Endpoints
Section titled “Endpoints”| Path | Methods | Purpose |
|---|---|---|
/.well-known/openid-configuration |
GET | Discovery document at the issuer root (canonical path a Relying Party derives from the issuer, OIDC Discovery 1.0 Section 4) |
/oidc/.well-known/openid-configuration |
GET | Discovery document (prefixed alias, same content) |
/oidc/.well-known/jwks.json |
GET | JSON Web Key Set |
/oidc/jwks |
GET | JWKS alias |
/oidc/authorize |
GET, POST | Authorization endpoint |
/oidc/token |
POST | Token endpoint (returns ID token) |
/oidc/userinfo |
GET, POST | UserInfo endpoint |
What To Validate
Section titled “What To Validate”- ID token claims:
iss,sub,aud,exp,iat,auth_time,nonce,at_hash,c_hash,acr,amr - Discovery fields:
issuer,authorization_endpoint,token_endpoint,jwks_uri - JWKS: key type, algorithm, key ID alignment with token header
- UserInfo: scope-dependent claims, subject consistency with ID token
- Hybrid: multiple response types in a single authorization request
Request Handling Notes
Section titled “Request Handling Notes”- Authorization errors after
client_idandredirect_uriare validated are returned to the client by redirect (query for the code flow, fragment for implicit and hybrid), echoingstate(RFC 6749 Section 4.1.2.1). Invalidclient_idorredirect_uriis shown to the user agent and never redirected. prompt=nonereturnslogin_requiredwhen no end-user session is present;prompt=loginand an exceededmax_ageforce re-authentication and setauth_time.- Public clients must use PKCE: an authorization code request without a
code_challengeis rejected (RFC 7636 Section 4.4.1). - Authorization codes are bound to the client they were issued to; a different
client redeeming a code is rejected with
invalid_grant. - Authorization codes are single-use. Replaying a code is rejected with
invalid_grantand additionally revokes the access (and refresh) tokens that code already issued; the revoked access token is then rejected at UserInfo with401 invalid_token(RFC 6749 Section 4.1.2, RFC 6750 Section 3.1). - A token-endpoint client-authentication failure made over HTTP Basic returns
401with aWWW-Authenticate: Basicchallenge, and token-endpoint errors do not carry a Bearer challenge (RFC 6749 Section 5.2). - The authorization endpoint accepts requests by both
GETandPOST(OIDC Core 1.0 Section 3.1.2.1). APOSTcarrying authorization parameters is handled identically toGET; the interactive login form posts to the same path and is distinguished internally. - When the flow issues an access token (the code flow always does, as do the
id_token tokenand hybrid flows), the scope-requested claims (profile,email, …) are served from the UserInfo endpoint and are not duplicated in the ID token. They appear in the ID token only for theresponse_type=id_tokencase, where no access token is issued (OIDC Core 1.0 Section 5.4). - The UserInfo endpoint accepts the access token in the
Authorization: Bearerheader or, for a form-encodedPOST, in anaccess_tokenbody parameter (RFC 6750 Section 2). Presenting both in one request is aninvalid_request. - The
requestandrequest_uriparameters are not supported. A request carryingrequestis rejected withrequest_not_supportedand one carryingrequest_uriwithrequest_uri_not_supportedrather than being ignored (OIDC Core 1.0 Section 6.2.1, 6.3.1). Discovery advertisesrequest_parameter_supportedandrequest_uri_parameter_supportedasfalse. Because that rejection is an authorization error response, it is delivered to the validated redirect URI using the requestedresponse_modeand echoesstate(RFC 6749 Section 4.1.2.1). When a by-value request object carriesresponse_modeandstateinside the JWT, the OP reads only those two delivery values from the object (without verifying it or using any other claim) so the error reaches the client in the correct channel, for example as aform_postPOST. - The authorization response is delivered in the requested
response_mode:query,fragment, orform_post, all advertised inresponse_modes_supported.queryis rejected for response types that return tokens in the front channel. Forform_postthe OP returns a self-submitting HTML form thatPOSTs the response parameters (success or error) to the redirect URI, so nothing is placed in a URL (OAuth 2.0 Form Post Response Mode). This enables the Form Post OP profiles. - The
claimsrequest parameter is supported (OIDC Core 1.0 Section 5.5), and discovery advertisesclaims_parameter_supportedastrue. Claims requested under theuserinfomember are returned from the UserInfo endpoint; claims requested under theid_tokenmember are returned in the ID token. Every returned value is real data from the user record, and a value the user does not have is omitted rather than erroring (Section 5.5.1). Aclaimsvalue that is not a valid JSON object is rejected withinvalid_request. - The
profilescope returns the full profile standard-claim set from UserInfo (name,given_name,family_name,middle_name,nickname,preferred_username,profile,picture,website,gender,birthdate,zoneinfo,locale,updated_at). Every value is real data held on the demo user record, not synthesised per request (OIDC Core 1.0 Section 5.4). - The
addressandphonescopes are also supported and advertised inscopes_supported. Theaddressscope returns the structuredaddressclaim (OIDC Core 1.0 Section 5.1.1) as a JSON object with the populated members (formatted,street_address,locality,region,postal_code,country); blank members are omitted. Thephonescope returnsphone_numberandphone_number_verified(Section 5.1). All values are real data held on the demo user record. - ID tokens carry
acrandamrdescribing the authentication that actually happened: single-factor password, reported asacrurn:protocolsoup:ac:passwordandamr["pwd"](OIDC Core 1.0 Section 2, RFC 8176). That value is advertised inacr_values_supported. The OP reports the context it genuinely performed and never echoes a higher assurance level (1,2, …) requested viaacr_valuesthat it did not satisfy. - ID tokens are signed with RS256 only; the discovery metadata advertises only what the OP delivers.