Skip to content

Commit 4a1dd6c

Browse files
authored
add option to have signed Credential Issuer metadata, remove signed_metadata from Credential Issuer metadata (#520)
Merged as per agreement on today's WG call.
1 parent 10ad12a commit 4a1dd6c

File tree

1 file changed

+49
-3
lines changed

1 file changed

+49
-3
lines changed

openid-4-verifiable-credential-issuance-1_0.md

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1257,9 +1257,16 @@ For example, the metadata for the Credential Issuer Identifier `https://issuer.e
12571257

12581258
Communication with the Credential Issuer Metadata Endpoint MUST utilize TLS.
12591259

1260-
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.
1260+
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, signaling whether it supports signed metadata.
12611261

1262-
The Wallet is RECOMMENDED to send an `Accept-Language` Header in the HTTP GET request to indicate the language(s) preferred for display. It is up to the Credential Issuer whether to:
1262+
The Credential Issuer MUST respond with HTTP Status Code 200 and return the Credential Issuer Metadata containing the parameters defined in (#credential-issuer-parameters) as either
1263+
1264+
* an unsigned JSON document using the media type `application/json`, or
1265+
* a signed JSON Web Token (JWT) containing the Credential Issuer Metadata in its payload using the media type `application/jwt`.
1266+
1267+
The Credential Issuer MUST support returning metadata in an unsigned form 'application/json' and MAY support returning it in a signed form 'application/jwt'. In all cases the Credential Issuer MUST indicate the media type of the returned Metadata using the HTTP `Content-Type` header. It is RECOMMENDED for Credential Issuers to respond with a `Content-Type` matching to the Wallet's requested `Accept` header when the requested content type is supported.
1268+
1269+
The Wallet is RECOMMENDED to send an `Accept-Language` header in the HTTP GET request to indicate the language(s) preferred for display. It is up to the Credential Issuer whether to:
12631270

12641271
* send a subset the metadata containing internationalized display data for one or all of the requested languages and indicate returned languages using the HTTP `Content-Language` Header, or
12651272
* ignore the `Accept-Language` Header and send all supported languages or any chosen subset.
@@ -1274,6 +1281,22 @@ Host: server.example.com
12741281
Accept-Language: fr-ch, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5
12751282
```
12761283

1284+
### Signed Metadata {#credential-issuer-signed-metadata}
1285+
1286+
The signed metadata MUST be secured using a JSON Web Signature (JWS) [@!RFC7515] and contain the following elements:
1287+
1288+
* in the JOSE header,
1289+
* `alg`: REQUIRED. A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry [@IANA.JOSE]. It MUST NOT be `none` or an identifier for a symmetric algorithm (MAC).
1290+
* `typ`: REQUIRED. MUST be `openidvci-issuer-metadata+jwt`, which explicitly types the key proof JWT as recommended in Section 3.11 of [@!RFC8725].
1291+
1292+
* in the JWT body,
1293+
* `iss`: OPTIONAL. String denoting the party attesting to the claims in the signed metadata
1294+
* `sub`: REQUIRED. String matching the Credential Issuer Identifier
1295+
* `iat`: REQUIRED. Integer for the time at which the Credential Issuer Metadata was issued using the syntax defined in [@!RFC7519].
1296+
* `exp`: OPTIONAL. Integer for the time at which the Credential Issuer Metadata is expiring, using the syntax defined in [@!RFC7519].
1297+
1298+
When requesting signed metadata, the Wallet MUST establish trust in the signer of the metadata. Otherwise, the Wallet MUST reject the signed metadata. When validating the signature, the Wallet obtains the keys to validate the signature before processing the metadata, e.g. using JOSE header parameters like `x5c`, `kid` or `trust_chain` to convey the public key. The concrete mechanisms how to do that are out of scope of this specification.
1299+
12771300
### Credential Issuer Metadata Parameters {#credential-issuer-parameters}
12781301

12791302
This specification defines the following Credential Issuer Metadata parameters:
@@ -1296,7 +1319,6 @@ This specification defines the following Credential Issuer Metadata parameters:
12961319
* `encryption_required`: REQUIRED. Boolean value specifying whether the Credential Issuer requires the additional encryption on top of TLS for the Credential Response. If the value is `true`, the Credential Issuer requires encryption for every Credential Response and therefore the Wallet MUST provide encryption keys in the Credential Request. If the value is `false`, the Wallet MAY choose whether it provides encryption keys or not.
12971320
* `batch_credential_issuance`: OPTIONAL. Object containing information about the Credential Issuer's support for issuance of multiple Credentials in a batch in the Credential Endpoint. The presence of this parameter means that the issuer supports more than one key proof in the `proofs` parameter in the Credential Request so can issue more than one Verifiable Credential for the same Credential Dataset in a single request/response.
12981321
* `batch_size`: REQUIRED. Integer value specifying the maximum array size for the `proofs` parameter in a Credential Request. It MUST be 2 or greater.
1299-
* `signed_metadata`: OPTIONAL. String that is a signed JWT. This JWT contains Credential Issuer metadata parameters as claims. The signed metadata MUST be secured using JSON Web Signature (JWS) [@!RFC7515] and MUST contain an `iat` (Issued At) claim, an `iss` (Issuer) claim denoting the party attesting to the claims in the signed metadata, and `sub` (Subject) claim matching the Credential Issuer identifier. If the Wallet supports signed metadata, metadata values conveyed in the signed JWT MUST take precedence over the corresponding values conveyed using plain JSON elements. If the Credential Issuer wants to enforce use of signed metadata, it omits the respective metadata parameters from the unsigned part of the Credential Issuer metadata. A `signed_metadata` metadata value MUST NOT appear as a claim in the JWT. The Wallet MUST establish trust in the signer of the metadata, and obtain the keys to validate the signature before processing the metadata. The concrete mechanism how to do that is out of scope of this specification and MAY be defined in the profiles of this specification.
13001322
* `display`: OPTIONAL. A non-empty array of objects, where each object contains display properties of a Credential Issuer for a certain language. Below is a non-exhaustive list of valid parameters that MAY be included:
13011323
* `name`: OPTIONAL. String value of a display name for the Credential Issuer.
13021324
* `locale`: OPTIONAL. String value that identifies the language of this object represented as a language tag taken from values defined in BCP47 [@!RFC5646]. There MUST be only one object for each language identifier.
@@ -2781,6 +2803,28 @@ in the manner described in [@RFC6838].
27812803
* Change controller: OpenID Foundation Digital Credentials Protocols Working Group - [email protected]
27822804
* Provisional registration? No
27832805

2806+
### application/openidvci-issuer-metadata+jwt
2807+
2808+
* Type name: `application`
2809+
* Subtype name: `openidvci-issuer-metadata+jwt`
2810+
* Required parameters: n/a
2811+
* Optional parameters: n/a
2812+
* Encoding considerations: Uses JWS Compact Serialization, as specified in [@!RFC7515].
2813+
* Security considerations: See the Security Considerations in [@!RFC7519].
2814+
* Interoperability considerations: n/a
2815+
* Published specification: (#credential-issuer-signed-metadata) of this specification
2816+
* Applications that use this media type: Applications that use signed metadata format defined in this specification
2817+
* Additional information:
2818+
- Magic number(s): n/a
2819+
- File extension(s): n/a
2820+
- Macintosh file type code(s): n/a
2821+
* Person & email address to contact for further information: Torsten Lodderstedt, [email protected]
2822+
* Intended usage: COMMON
2823+
* Restrictions on usage: none
2824+
* Author: Torsten Lodderstedt, [email protected]
2825+
* Change controller: OpenID Foundation Digital Credentials Protocols Working Group - [email protected]
2826+
* Provisional registration? No
2827+
27842828
## Uniform Resource Identifier (URI) Schemes Registry
27852829

27862830
This specification registers the following URI scheme
@@ -2849,6 +2893,8 @@ The technology described in this specification was made available from contribut
28492893

28502894
-16
28512895

2896+
* Add option to have signed Credential Issuer metadata
2897+
* Remove `signed_metadata` from Credential Issuer metadata
28522898
* move proof type section to the Annex for readability, add some introduction and fix text in Section 8.1
28532899
* move `claims` and `display` into `credential_metadata` and allow for credential-format specific mechanisms to override it
28542900
* Remove the option to use `format` from `authorization_details` in the Authorization Request

0 commit comments

Comments
 (0)