Skip to content

add option to have signed Credential Issuer metadata, remove signed_metadata from Credential Issuer metadata #520

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

paulbastian
Copy link
Contributor

Closes #202

  • discuss whether to use JWS instead of JWT for multiple trust frameworks

@paulbastian paulbastian requested a review from Sakurann May 27, 2025 15:59
@c2bo
Copy link
Member

c2bo commented May 27, 2025

  • discuss whether to use JWS instead of JWT for multiple trust frameworks

To give a bit more context on this: Paul and I had a bit of a discussion if we need to support multiple signatures similar to what was introduced in OpenID4VP. We came to the conclusion that starting with a JWT seems to be the more pragmatic choice and if we realise we need to support that feature, we could probably introduce it rather simple with a new media type (jose+json based).

Using JWT and different Issuer deployments for different trust ecosystems seems reasonable to me.

To fetch the Credential Issuer Metadata, the requester MUST send an HTTP request using the GET method and the path formed following the steps above. The Credential Issuer MUST return a JSON document compliant with this specification using the `application/json` media type and the HTTP Status Code 200.
To fetch the Credential Issuer Metadata, the Wallet MUST send an HTTP request using the GET method and the path formed following the steps above. The Wallet is RECOMMENDED to send an `Accept-Content` Header in the HTTP GET request to indicate whether it supports signed metadata.

The Credential Issuer MUST respond with HTTP Status Code 200 and return the Credential Issuer Metadata containing the [parameters defined in this specification](#credential-issuer-parameters) as either:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For interoperability, what are we normatively implying implementations must support, it would appear we are imply that all credential issuer implementations MUST support signed metadata or are we saying that only plain JSON MUST be supported and the client/wallet gets to decide what it wants to support?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The either to me implies that the issuer can choose. In the next section, it says the issuer may ignite the accept header and send whatever he likes, so to me it seems signed metadata is optional. That means wallets must support both.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Im not sure I support making signed metadata required for wallet/client implementations I'd prefer we only require them to support unsigned which is consistent with the equivalent feature in OAuth and OpenID connect.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wg discussion.

  • no normative requirement for the wallet to support this.
  • HAIP can mandate it.

Copy link
Contributor

@sloops77 sloops77 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using the Accept header allows the wallet to indicate support for multiple content types as well. These changes clarify how that should be handled and shows a preference for signed metadata

@@ -1395,7 +1395,14 @@ Credential Issuers publishing metadata MUST make a JSON document available at th

Communication with the Credential Issuer Metadata Endpoint MUST utilize TLS.

To fetch the Credential Issuer Metadata, the requester MUST send an HTTP request using the GET method and the path formed following the steps above. The Credential Issuer MUST return a JSON document compliant with this specification using the `application/json` media type and the HTTP Status Code 200.
To fetch the Credential Issuer Metadata, the Wallet MUST send an HTTP request using the GET method and the path formed following the steps above. The Wallet is RECOMMENDED to send an `Accept` Header in the HTTP GET request to indicate whether it supports signed metadata.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
To fetch the Credential Issuer Metadata, the Wallet MUST send an HTTP request using the GET method and the path formed following the steps above. The Wallet is RECOMMENDED to send an `Accept` Header in the HTTP GET request to indicate whether it supports signed metadata.
To fetch the Credential Issuer Metadata, the Wallet MUST send an HTTP request using the GET method and the path formed following the steps above. The Wallet is RECOMMENDED to send an `Accept` Header in the HTTP GET request to indicate the Content Type(s) it supports.

Copy link

@lj-raidiam lj-raidiam Jun 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
To fetch the Credential Issuer Metadata, the Wallet MUST send an HTTP request using the GET method and the path formed following the steps above. The Wallet is RECOMMENDED to send an `Accept` Header in the HTTP GET request to indicate whether it supports signed metadata.
To fetch the Credential Issuer Metadata, the Wallet MUST send an HTTP request using the GET method and the path formed following the steps above. The Wallet is RECOMMENDED to send an `Accept` Header in the HTTP GET request to indicate the Content Type(s) it supports, and by doing so, signal whether it supports signed metadata.

@sloops77 I let myself improve it further. Saying straight that the mime type is used only determine wallet support for metadata is not ideal, but there's a value in keeping it explicit too.

* an unsigned JSON document using the media type `application/json`
* a signed JSON Web Token (JWT) containing the Credential Issuer Metadata in its payload using the media type `application/jwt`

The Credential Issuer MAY ignore the `Accept` Header. It MUST indicate the type of the returned Credential Issuer Metadata using the HTTP `Content-Type`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The Credential Issuer MAY ignore the `Accept` Header. It MUST indicate the type of the returned Credential Issuer Metadata using the HTTP `Content-Type`.
The Credential Issuer MAY ignore the `Accept` Header. If the Credential Issuer receives a request with an `Accept` header set to both media types then it SHOULD respond with a signed metadata format if possible (ie. `applicaiton/jwt`). It MUST indicate the type of the returned Credential Issuer Metadata using the HTTP `Content-Type`.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

redesign signed Issuer Metadata
6 participants