database growth • Client expiry creates a dead end • No correlation between instances of client software • Public DCR endpoint requires protections like rate limiting
credentials in addition to access token/refresh token • No way to verify if a client ID is still valid • Unclear lifecycle - No guidance on when to re-register • Clients risk sending the user to a dead end, or register a new client on each login
"Example Client", "client_uri": "https://example.com", "logo_uri": "https://example.com/logo.png", "redirect_uris": [ "https://example.com/redirect" ] } The URL is used in an Authorization request /authorize?client_id=https://example.com/client.json&...
"Example Client", "client_uri": "https://example.com", "logo_uri": "https://example.com/logo.png", "redirect_uris": [ "https://example.com/redirect" ], "jwks_uri": "https://example.com/keys.json" } The URL is used in an Authorization request /authorize?client_id=https://example.com/client.json&...
can publish public keys to the jwks_uri can then use the private key as RFC7523 Client Authentication (Section 2.2 of RFC7523) • A client that doesn’t/can’t authenticate to an AS would not include a jwks_uri • But every client will still include its client_id URL • An AS that cares about policies on client identity can leverage the domain name
can optionally require that Client ID Metadata Document URLs are pre- registered • This enables enterprise use, enabling the enterprise IdP to allow/disallow certain client_id URLs and/or domains, without the client doing anything special
app can’t host a document at a public URL • iOS and Android provide platform attestation services, which can be leveraged by “Attestation-Based Client Authentication” • The “Client Attester Backend” can hold the private keys published at the jwks_uri • The app developer can publish the Client ID Metadata Document on the app’s website, linking to the Client Attester Backend’s jwks_uri This makes client impersonation of native apps unreasonably expensive