Jump to conversation
Unresolved conversations (5)
@paulbastian paulbastian Oct 26, 2023
When is format actually relevant? In Authorization Code Flow we already made a choice in the Auth Request. In Credential Offer we got all the options with `c_instance_identifier` in the Token Response and we can pick one here with `c_instance_identifier`. What am I missing?
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann
Kristina
@paulbastian paulbastian Oct 26, 2023
Should c_instance_identifiers only be used when there are multiple credentials offered?
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann
Kristina
@paulbastian paulbastian Oct 26, 2023
```suggestion "c_nonce_expires_in": 86400, "authorization_details": [ { "c_instance_identifiers": [ "CivilEngineeringDegree-2023", "ElectricalEngineeringDegree-2023" ] } ] ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann paulbastian
Kristina and Paul Bastian
@danielfett danielfett Oct 25, 2023
Can `format` be used if the condition does not apply? Please add a "MUST NOT be used otherwise" or "MAY be used otherwise" somewhere.
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@danielfett danielfett Sep 18, 2023
The whole `identifiers` thing is not communicated well right now. What does an identifier identify? What is it used for? Why are there two types of identifiers (for creds requested with scopes and authorization details)? Are they conflict-free? Why do identifiers show up in the credential response? I can guess answers to all of these questions, but these things must be explicit in the text. I suppose this should be integrated into an explanation of the various ways of communicating credential contents (offered or requested). (I.e., explaining the mental model behind the credential offer, the metadata, the authorization request, the token response, the credential request and credential response in a very explicit way.) Some of this is done in (#credential-authz-request), but it dives into details really fast and lacks the high-level explanation.
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann danielfett
Kristina and Daniel Fett
Resolved conversations (47)
@jogu jogu Oct 27, 2023
I think I'm slightly confused by this part: > `credential_identifier` parameter replaces `format` and any other Credential format specific parameters Doesn't that mean the wallet doesn't know which credential_identifier is associated with what format?
...d-4-verifiable-credential-issuance-1_0.md
@paulbastian paulbastian Oct 26, 2023
```suggestion { "type": "openid_credential", "credentials_supported_identifier": "UniversityDegreeCredential", "c_instance_identifiers": [ "CivilEngineeringDegree-2023", "ElectricalEngineeringDegree-2023" ] ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
paulbastian
Paul Bastian
@Sakurann Sakurann Oct 26, 2023
```suggestion * `c_instance_identifier`: REQUIRED when `c_instance_identifier` was returned from the Token Response. MUST NOT be used otherwise. JSON string that identifies a Credential that is being requested to be issued. When this parameter is used, the `format` parameter and any other Credential format specific set of parameters such as those defined in (#format_profiles) MUST NOT be present. ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@Sakurann Sakurann Oct 26, 2023
```suggestion * `authorization_details`: REQUIRED when `authorization_details` parameter is used to request issuance of a certain Credential type as defined in (#authorization-details). MUST NOT be used otherwise. A JSON array of objects as defined in Section 7 of [@!RFC9396]. This specification defines the following parameter to be used with authorization details type `openid_credential` in the Token Response: ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@danielfett danielfett Oct 25, 2023
```suggestion * `deferred_credential_endpoint`: OPTIONAL. URL of the Credential Issuer's Deferred Credential Endpoint. This URL MUST use the `https` scheme and MAY contain port, path, and query parameter components. If omitted, the Credential Issuer does not support the Deferred Credential Endpoint. * `credential_response_encryption_alg_values_supported`: OPTIONAL. Array containing a list of the JWE [@!RFC7516] encryption algorithms (`alg` values) [@!RFC7518] supported by the Credential and/or Batch Credential Endpoint to encode the Credential or Batch Credential Response in a JWT [@!RFC7519]. * `credential_response_encryption_enc_values_supported`: OPTIONAL. Array containing a list of the JWE [@!RFC7516] encryption algorithms (`enc` values) [@!RFC7518] supported by the Credential and/or Batch Credential Endpoint to encode the Credential or Batch Credential Response in a JWT [@!RFC7519]. ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@danielfett danielfett Oct 25, 2023
```suggestion * `credential_encryption_jwk`: OPTIONAL. An object containing a single public key as a JWK used for encrypting the Credential Response. ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@danielfett danielfett Oct 25, 2023
```suggestion * `c_instance_identifier`: REQUIRED when `c_instance_identifier` was returned from the Token Response. String that identifies a Credential that is being requested to be issued. When this parameter is used, the `format` parameter and any other Credential format specific set of parameters such as those defined in (#format_profiles) MUST NOT be present. ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
danielfett
Daniel Fett
@danielfett danielfett Oct 25, 2023
```suggestion * `proof_type`: REQUIRED. String denoting the key proof type. The value of this claim determines other claims in the key proof object and its respective processing rules. Key proof types defined in this specification can be found in (#proof_types). ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@danielfett danielfett Oct 25, 2023
```suggestion * `proof`: OPTIONAL. Object containing the proof of possession of the cryptographic key material the issued Credential would be bound to. The `proof` object MUST contain a following claim: ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@danielfett danielfett Oct 25, 2023
Data type is missing. ```suggestion * `format`: REQUIRED when the `c_instance_identifier` was not returned from the Token Response. String that determines the format of the Credential to be issued, which may determine the type and any other information related to the Credential to be issued. Credential Format Profiles consisting of the Credential format specific set of parameters are defined in (#format_profiles). When this parameter is used, `c_instance_identifier` parameter MUST NOT be present. ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann
Kristina
@danielfett danielfett Oct 25, 2023
```suggestion * `authorization_details`: REQUIRED when `authorization_details` parameter is used to request issuance of a certain Credential type as defined in (#authorization-details). An array of objects as defined in Section 7 of [@!RFC9396]. This specification defines the following parameter to be used with authorization details type `openid_credential` in the Token Response: * `c_instance_identifiers`: OPTIONAL. Array of strings that each uniquely identify a Credential instance that can be issued using Access Token returned in this response. Each Credential instance is a unique Credential described using the same entry in the `credentials_supported` Credential Issuer metadata, but can contain different claim values or different subset of claims within the claimset identified by the Credential type. This parameter can also be used to simplify the Credential Request, since as defined in (#credential_request) `c_instance_identifier` parameter replaces `format` and any other Credential format specific parameters in the Credential Request. When received, the Wallet MUST use these values together with an Access Token in the subsequent Credential Request(s). ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann danielfett
Kristina and Daniel Fett
@danielfett danielfett Oct 25, 2023
```suggestion * `c_nonce`: OPTIONAL. String containing a nonce to be used when creating a proof of possession of the key proof (see (#credential_request)). When received, the Wallet MUST use this nonce value for its subsequent requests until the Credential Issuer provides a fresh nonce. ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@danielfett danielfett Oct 25, 2023
```suggestion * `format`: REQUIRED. String representing the format in which the Credential is requested to be issued. This Credential format identifier determines further claims in the authorization details object specifically used to identify the Credential type to be issued. This specification defines Credential Format Profiles in (#format_profiles). ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@danielfett danielfett Oct 25, 2023
```suggestion * `type` REQUIRED. String that determines the authorization details type. MUST be set to `openid_credential` for the purpose of this specification. ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann danielfett
Kristina and Daniel Fett
@danielfett danielfett Oct 25, 2023
Maybe it would be good to find a different word instead of "credential type" to describe an entry in the `credentials_supported` Credential Issuer metadata. The terms feels too overloaded. How about "credential description" or "credential definition"?
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann
Kristina
@peppelinux peppelinux Oct 21, 2023
```suggestion Below is a non-normative example of an Authorization Request provided by the Wallet to the Authorization Server using the scope `university-degree-jwt` and in response to an HTTP 302 redirect. The line wraps within the values are intended for display purposes only: ```
...d-4-verifiable-credential-issuance-1_0.md
Sakurann
Kristina
@pmhsfelix pmhsfelix Oct 19, 2023
Detail: I'm not 100% comfortable with the `instance_identifier` naming, namely because: - The credential was not yet created (that will only happen after a credential request), so there isn't yet an instance, right? - Also, this identifier may be confused with the `callback_id` from https://github.com/openid/OpenID4VCI/pull/70/files, which is described as `A JSON string identifying an issued Credential`. Would `credential_request_identifier`(or an abbreviation of it) be a better name , since it provides an identifier to request a specific thing on the credential request.
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann
Kristina
@pmhsfelix pmhsfelix Oct 19, 2023
Detail: since `c_instance_identifiers` is already inside an `authorization_details` item with type=`openid_credential`, perhaps we can drop the `c_` prefix. The same for the credential request parameter. The `c_` prefix was important if the parameter was a top-level one in the token response.
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann
Kristina
@danielfett danielfett Oct 18, 2023
I missed the discussion on this last week and I have a hard time following this description. Can you please attempt to introduce the concept or mental model behind "instances" of credentials before diving into the definition of the parameter?
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann
Kristina
@peppelinux peppelinux Oct 16, 2023
```suggestion * `proof`: OPTIONAL. JSON object containing proof of possession of the cryptographic key material the issued Credential SHALL be bound to. The `proof` object MUST contain a following claim: ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann
Kristina
@peppelinux peppelinux Oct 4, 2023
```suggestion The following is a non-normative example of an object comprising `credentials_supported` parameter for a Credential in JWT VC format (JSON encoding). ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@peppelinux peppelinux Oct 4, 2023
```suggestion * `credential_response_encryption_alg`: OPTIONAL. JWE [@!RFC7516] `alg` algorithm [@!RFC7518] REQUIRED for encrypting Credential and/or Batch Credential Responses. If omitted, no encryption is intended to be performed. When the `credential_response_encryption_alg` is present, the `credential_encryption_jwk` MUST be present. ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@peppelinux peppelinux Oct 4, 2023
```suggestion * `c_identifier`: REQUIRED if `c_identifier` was returned from the Token Response. JSON string that identifies a Credential that is being requested to be issued. It MUST be present if the Credential Issuer returned `c_identifiers` parameter in the Token Response. When this parameter is used, the `format` parameter and any other Credential format specific set of parameters such as those defined in (#format_profiles) MUST NOT be present. ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@peppelinux peppelinux Oct 4, 2023
```suggestion * `proof_type`: REQUIRED. JSON string identifying the cryptographic key proof type. The value of this claim determines other claims in the cryptographic key proof object and its respective processing rules. Cryptographic key proof types defined in this specification can be found in (#proof_types). ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann
Kristina
@peppelinux peppelinux Oct 4, 2023
```suggestion * `proof`: OPTIONAL. JSON object containing proof of possession of the cryptographic key material the issued Credential shall be bound to. The `proof` object MUST contain a following claim: ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@peppelinux peppelinux Oct 4, 2023
```suggestion * `format`: REQUIRED when the `c_identifier` was not returned from the Token Response. This parameter determines the format of the Credential to be issued, which may determine the type and any other information related to the Credential to be issued. Credential Format Profiles consisting of the Credential format specific set of parameters are defined in (#format_profiles). When this parameter is used, `c_identifier` parameter MUST NOT be present. ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann
Kristina
@peppelinux peppelinux Oct 4, 2023
```suggestion Below is a non-normative example of a Token Response when the `scope` parameter was used to request the issuance of a certain Credential type: ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@peppelinux peppelinux Oct 4, 2023
```suggestion * `c_identifiers`: OPTIONAL. JSON array of JSON strings that each identify a Credential that can be issued using Access Token returned in this response. This parameter is used to uniquely identify a Credential beyond the combination of Credential format and type. For example, when Credential Issuer is issuing Credentials of the same type, but with different subset of claims. This parameter MUST be used when `authorization_details` parameter is used in the Authorization Request to request Credential type of a Credential that is being uniquely identified. When received, the Wallet MUST use these values together with an Access Token in the subsequent Credential Request(s). ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@peppelinux peppelinux Oct 4, 2023
```suggestion * `c_identifiers`: OPTIONAL. JSON array of JSON strings that each identify a Credential that can be issued using Access Token returned in this response. This parameter is used to uniquely identify a Credential beyond the combination of Credential format and type. For example, when the Credential Issuer is issuing Credentials of the same type, but with different subset of claims. This parameter MUST be used when the `scope` parameter is used in the Authorization Request to request the type of a Credential that is being uniquely identified. When received, the Wallet MUST use these values together with an Access Token in the subsequent Credential Request(s). ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@peppelinux peppelinux Oct 4, 2023
```suggestion * `authorization_details`: REQUIRED when `authorization_details` parameter is used for requesting the issuance of a certain Credential type, as defined in (#authorization-details). A JSON array of objects as defined in Section 7 of [@!RFC9396]. In addition to the parameters received from the Wallet, the AS MAY return the following parameter: ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann
Kristina
@peppelinux peppelinux Oct 4, 2023
```suggestion * `c_identifiers`: OPTIONAL. JSON array of JSON strings that each identify a Credential that can be issued using Access Token returned in this response. This parameter is used to uniquely identify a Credential beyond the combination of Credential format and type. For example, when the Credential Issuer issues Credentials of the same type but with different subset of claims. This parameter MUST be used when `scope` parameter is used in the Authorization Request to request Credential type of a Credential that is being uniquely identified. When received, the Wallet MUST use these values together with an Access Token in the subsequent Credential Request(s). ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@peppelinux peppelinux Oct 4, 2023
```suggestion * `c_nonce_expires_in`: OPTIONAL. JSON integer corresponding to the number of seconds beyond which the `c_nonce` MUST be intended as expired, and then not valid anymore, after the time of its issuance. ```
...d-4-verifiable-credential-issuance-1_0.md
peppelinux Sakurann
Giuseppe De Marco and Kristina
@peppelinux peppelinux Oct 4, 2023
```suggestion * `c_nonce`: OPTIONAL. JSON string containing a nonce to be used to create a proof of possession of the cryptographic key material used when requesting a Credential (see (#credential_request)). When received, the Wallet MUST use this nonce value for its subsequent Credential Requests until the Credential Issuer provides a fresh nonce. ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann
Kristina
@peppelinux peppelinux Oct 4, 2023
```suggestion Below is a non-normative example of an Authorization Request provided by the Wallet to the Authorization Server using the scope `UniversityDegree_JWT` and in response to an HTTP 302 redirect. The line wraps within the values are intended for display purposes only: ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
peppelinux Sakurann
Giuseppe De Marco and Kristina
@peppelinux peppelinux Oct 4, 2023
```suggestion If the Credential Issuer metadata contains an `authorization_server` property, it is RECOMMENDED to use a `resource` parameter [@!RFC8707] whose value is the Credential Issuer's identifier value; this allows the AS to differentiate Credential Issuers. ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann
Kristina
@peppelinux peppelinux Oct 4, 2023
```suggestion * Any further parameters characterizing the type of the Credential to be issued are intended as RECOMMENDED. These parameters are specific to the credential format profile, some of which are defined in (#format_profiles). ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann peppelinux
Kristina and Giuseppe De Marco
@Sakurann Sakurann Sep 29, 2023
```suggestion * `format`: REQUIRED if `identifier` was not returned from the Token Response. Format of the Credential to be issued. This Credential format identifier determines further parameters required to determine the type and (optionally) the content of the credential to be issued. Credential Format Profiles consisting of the Credential format specific set of parameters are defined in (#format_profiles). When this parameter is used, `identifier` parameter MUST NOT be present. ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@Sakurann Sakurann Sep 27, 2023
```suggestion * `authorization_details`: REQUIRED when `authorization_details` parameter was used to request issuance of a certain Credential type as defined in (#authorization-details). A JSON array of objects as defined in Section 7 of [@!RFC9396]. In addition to the parameters received from the Wallet, the AS MAY return the following parameter: ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@pmhsfelix pmhsfelix Sep 20, 2023
I wonder if an identifier should also be allowed in the offer credentials object, as a way to precisely specify the credential to issue. Use case: - Training company has a web site where users can see the completed training courses. - For each course (e.g. `AERO-123-FluidMechanics-II-2023`), user can require a credential, which requires some sort of payment. - After payment transaction is completed, web site presents an offer as a QR code. This offer exactly identifies the credentials that the user can request (e.g. `AERO-123-FluidMechanics-II-2023`). - User scans QR code with wallet, authenticates, consents on a screen that only shows `AERO-123-FluidMechanics-II-2023` credential information (no need for the user to select anything), and finally gets an issued credential. The use of an identifier would allow an offer to be much more precise in the credential that is being offered. The identifier could be carried in the authorization request's `authorization_details` object.
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann tlodderstedt
Kristina and Torsten Lodderstedt
@pmhsfelix pmhsfelix Sep 20, 2023
Detail: `identifiers` seems a too broad term to be used as a token response top-level parameter. Perhaps use `c_identifiers` instead, similarly to what we do with nonces (parameter is named `c_nonce`). In contrast, using `identifier` inside an `authorization_details` is fine because its meaning is scoped to `"type": "openid_credential"`.
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann pmhsfelix
Kristina and Pedro Felix
@pmhsfelix pmhsfelix Sep 20, 2023
If I'm understanding this correctly, the second case above means: - Fetching the issuer metadata. - Locating a `credentials_supported` entry in that metadata that _matches_ the offer's `credentials` entry. If so, this requires defining the concept of matching between an offer `credentials` entry and a metadata `credentials_supported` entry. Is this matching a strict non-shallow comparison of JSON objects, excluding the `scope` property? Somehow related, an issuer may want to offer credentials that don't appear in the metadata, namely because they are very context specific. Example: an university offers hundreds of courses and is able to issue individual credentials for each completed course. Instead of having all these different credentials in its metadata, it can generate user specific offer objects (e.g. on a portal page), with only the credentials for the courses completed by the user. Given the above, wouldn't it be simpler to also include an optional `scope` in the offer's `credentials` entry object?
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann
Kristina
@danielfett danielfett Sep 18, 2023
`scope` is not a credential issuer metadata parameter. ```suggestion When the Wallet does not know which scope value to use to request issuance of a certain credential, it can discover the available `scope` values in the `credentials_supported` Credential Issuer metadata parameter defined in (#credential-metadata-object). When the flow starts with a Credential Offer, the Wallet can use the information in it as following: ```
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@danielfett danielfett Sep 18, 2023
The current definition does not include the `display` and other properties defined in (#credential-metadata-object) — is that intentional?
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann pmhsfelix
Kristina and Pedro Felix
@danielfett danielfett Sep 18, 2023
```suggestion * `credentials`: REQUIRED. A JSON array, where every entry is a JSON string or a JSON object describing a credential the Wallet may request. If the entry is a string, the string value MUST be one of the `scope` values included in a `credentials_supported` Credential Issuer metadata parameter as defined in (#credential-metadata-object). When processing, the Wallet MUST resolve this string value to the respective object. If the entry is an object, the object contains the data related to a certain credential type. Each object contains the following parameters: ``` This `may` is not normative.
Outdated
...d-4-verifiable-credential-issuance-1_0.md
@jogu jogu Sep 14, 2023
I think we only have this one example using scopes now - it would be great to have examples for the other options too (so 3 in total I think? one with scope, one with authorization_details, one with identifiers)
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann
Kristina
@tlodderstedt tlodderstedt Sep 14, 2023
Not sure this parameter should be mutual exclusive with all additional parameters used to determine the type of credentials as this data was already passed in the authorization request.
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann pmhsfelix
tlodderstedt
Kristina, Pedro Felix, and Torsten Lodderstedt
@tlodderstedt tlodderstedt Sep 14, 2023
A wallet could use `scope` and `authorization_details` in the same request. So the language should be along the lines of "this array contains the credentials that can be requested based on the scope values passed to the authorization request". This means `identifiers` and `authorization_details/identifiers` can turn up in the same token response.
Outdated
...d-4-verifiable-credential-issuance-1_0.md
Sakurann
Kristina