openid / openid/OpenID4VP

Add client_id_scheme based on .well-known

Open
#82 10 comments 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

non-breaking
Dominant language
Shell
Stars
112
Forks
38
Avg merge
12d 19h
Merged PRs (30d)
4

Description

It would be beneficial to introduce a client_id_scheme that

  • enables the client to sign Request Objects using a key indirectly trusted via TLS/browser PKI.
  • allows the client to provide its metadata via a .well-known endpoint rather than in the request itself without prior registration or federation.

Currently, the only method for implementing request signing leveraging browser PKI is by using client_id_scheme=x509_san_dns, which can be quite cumbersome to implement. Clients would need to acquire another certificate from a browser CA for request signing. Additionally, on some platforms, accessing the list of trusted browser CAs outside of a user agent might involve more friction. Acquiring an extra certificate would also takes extra monetary and operational costs. Furthermore, certificates acquired from existing browser CAs typically include X509 extensions optimized for TLS, not for request signing.

Compared to client_id_scheme=redirect_uri, a new scheme based on well-known would allow the signing of requests which redirect_uri does not allow.

A new client ID scheme based on .well-known that includes the jwks/jwks_uri client metadata offers a more straightforward option for implementing the verification of the Request Object's signature.

Proposal:

  • Introduce a new Client ID scheme value: well-known, e.g., client_id_scheme=well-known.
  • Define it as follows:
    • client_id MUST be an HTTPS URI controlled by the client.
    • The wallet MUST fetch the client metadata from <client_id>/.well-known/client-metadata.
    • Client metadata from the client_metadata parameter take precedence over metadata found at the .well-known location except for the signing keys of the request objects.
    • Authorization requests can be signed or unsigned. If signed, then the verification keys MUST be provided in the .well-known client metadata.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

No repository files or tests are identified in the issue. Start by reviewing the existing client_id_scheme behavior and the proposal's well-known metadata rules; done means the new scheme, HTTPS client_id requirements, metadata precedence, and request-signing key requirements are defined and covered by the project's relevant validation or protocol tests.

Written by the indexing model from the issue text.

Assessment

Domain
authentication, security
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.