Beta

Create a tenant

A new tenant starts with its own users, OAuth settings, audit history and logs. You are its first Tenant Admin.

BTL Admin

Reading provider metadata

The printer's developer now has the photo service's configuration document open in full. Some of it repeats what the photo service already publishes for OAuth clients. The rest exists because the photo service is also an OpenID Provider, and those are the entries a relying party reads most closely.

All domains, identifiers, and keys in these examples are fictional. A few entries are left out, including the grant types and the endpoints for pushed requests and revocation that the photo service's OAuth metadata also lists:

{
  "issuer": "https://auth.photos.example",
  "authorization_endpoint": "https://auth.photos.example/authorize",
  "token_endpoint": "https://auth.photos.example/token",
  "userinfo_endpoint": "https://auth.photos.example/userinfo",
  "jwks_uri": "https://auth.photos.example/jwks",
  "end_session_endpoint": "https://auth.photos.example/logout",
  "scopes_supported": ["openid", "profile", "email", "offline_access",
                       "photos.read", "albums.create", "photos.delete"],
  "response_types_supported": ["code"],
  "subject_types_supported": ["public", "pairwise"],
  "id_token_signing_alg_values_supported": ["RS256", "ES256"],
  "claims_supported": ["sub", "name", "given_name", "family_name", "email",
                       "email_verified", "picture", "locale", "updated_at"],
  "claims_parameter_supported": true,
  "code_challenge_methods_supported": ["S256"],
  "authorization_response_iss_parameter_supported": true
}

Endpoints and keys

Six entries are URLs. OpenID Connect Discovery requires some of them and leaves others to the provider:

EntryStatusWhat the printer uses it for
issuerRequiredThe exact name compared in this document and in every ID token.
authorization_endpointRequiredWhere your browser goes with the authentication request.
token_endpointRequired, except at a provider that offers only the implicit flowWhere the printer exchanges the code for an ID token.
jwks_uriRequiredThe key set used to check ID token signatures.
userinfo_endpointRecommendedWhere the printer asks for profile claims, as The UserInfo endpoint will show.
end_session_endpointDefined by RP-Initiated Logout, for providers that support itWhere the printer can send your browser to end your session at the photo service, as RP-initiated logout will show.

The required list is longer than for OAuth authorization server metadata, where only the issuer and the response types are always required. Any relying party may need to check an ID token's signature, so OpenID Connect requires jwks_uri, and it adds two required capability lists of its own, for subject types and ID token signing algorithms.

Every address must use HTTPS, and the printer uses each one exactly as written. Nothing requires the endpoints to share the issuer's host, and some providers serve their key set or token endpoint from a different one, so the printer takes every address from the document rather than assembling it from the issuer.

The key set at jwks_uri holds more than the printer needs. It contains the RSA key photos-rs-2026-09, which signs ID tokens with RS256, and the EC key photos-2026-09, which signs the photo service's JWT access tokens with ES256. The printer picks the key named by an ID token's kid and uses it only with the algorithm it accepts for ID tokens, as Signing keys and rotation explained. The set contains public keys only. Discovery forbids private and symmetric keys in it.

Advertised capabilities

The entries ending in _supported describe what the provider can do. Read with sign-in in mind, they say:

  • scopes_supported names openid, which every OpenID Provider must support. Here it also lists profile and email, which ask for groups of claims, and offline_access, which asks for a refresh token. A provider may leave some scopes out of the list, so a missing scope is a question for its documentation rather than proof that the scope does not exist.
  • response_types_supported is required, and the photo service lists only code. Its ID tokens always come from the token endpoint. Values such as id_token or code id_token would mean ID tokens delivered through the browser, which belong to the older integrations described in Understanding implicit and hybrid integrations.
  • subject_types_supported is required. The photo service can give a client the same sub it gives every other client, or a different one for each. Public and pairwise subject identifiers compares the two.
  • id_token_signing_alg_values_supported is required and must include RS256, the default every relying party can count on. The photo service can also sign ID tokens with ES256 for clients that ask for it.
  • claims_supported lists claims the provider may be able to supply. It is not a promise to release any of them to a particular client, and it may not be complete.
  • claims_parameter_supported says the provider accepts the claims request parameter, which Scopes and the claims parameter introduces.

The last two entries come from OAuth specifications that OpenID Providers use as well. code_challenge_methods_supported tells the printer that PKCE with S256 works here. authorization_response_iss_parameter_supported promises that every authorization response, including a sign-in callback, carries iss.

Missing entries have meanings of their own. A list with no values is left out rather than sent empty, a missing true-or-false entry such as claims_parameter_supported means false, and a few lists have defaults of their own. Missing grant types, for example, default to the authorization code and implicit grants, which is one reason the photo service's full document lists its grants rather than leaving them out.

None of these lists describe the printer. They describe what the photo service can do for clients that ask. ES256 appears among the ID token algorithms, but the printer's registration uses RS256, so an ID token for photo-printer signed with ES256 is rejected even though the provider supports it. Pairwise subjects appear too, but the printer's registration asks for public ones, so its sub for you is user-2048. The registration, not the metadata, decides which of the provider's options apply to a client, and Registering a relying party looks at those choices.

Using metadata safely

Metadata makes the printer's configuration shorter. It should not make the printer's rules weaker, and three habits keep it that way.

First, the document never widens what the printer accepts. Suppose a refreshed copy listed none or HS256 among the ID token algorithms. Nothing would change for the printer, whose allowlist comes from its registration. A library that chose the algorithm by reading the provider's list, or accepted anything on it, would let one line in a document undo a check from Validation and trust.

Second, a missing entry does not switch off a protection the printer relies on. If the photo service's document stopped listing code_challenge_methods_supported, the OAuth metadata rules would read that as no PKCE support. A relying party that responded by quietly dropping PKCE would sign people in with less protection from that moment on, because of one missing line. The printer keeps its own expectations instead. It goes on sending PKCE, as it would go on requiring iss if that promise vanished too, and it raises the change with its operators. Validating metadata and issuer identity, in Advanced OAuth, describes the same rule for OAuth clients.

Third, a refreshed copy is compared with the last one, not simply absorbed. Most refreshes change nothing. The photo service's key rotations happen inside the key set, at the same jwks_uri, rather than in this document. A copy that names a different issuer is not a change at all: it fails the checks in Provider discovery and is discarded. A few changes deserve a person's attention even when the document passes, such as a different jwks_uri or token endpoint, especially on a new host, or a security feature that disappears. Changes that make the printer stricter, such as a provider beginning to promise iss, are safe to adopt. Changes that would make it looser wait for someone to decide.

Try it in the Lab

PUT IT INTO PRACTICE

Check your understanding

Try these questions before moving on. If an answer isn't right, use the feedback and try again.

0 of 2 answered correctly

Enable JavaScript to answer these questions and save progress in this browser.

QUESTION 1 OF 2The photo service lists RS256 and ES256 in id_token_signing_alg_values_supported, and the printer's registration uses RS256. An ID token for photo-printer arrives signed with ES256 by a key in the photo service's key set. What should happen?

QUESTION 2 OF 2After a scheduled refresh, the photo service's document no longer lists code_challenge_methods_supported or authorization_response_iss_parameter_supported. What should the printer do?

We value your privacy

We use cookies and similar technologies to enhance your browsing experience, and analytics to understand our traffic. By clicking "Allow All", you consent to optional analytics. Cookie Policy

Learn identity