-
Notifications
You must be signed in to change notification settings - Fork 0
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
RFC018: Issuing credentials using OIDC4VCI #257
Closed
Closed
Changes from 3 commits
Commits
Show all changes
10 commits
Select commit
Hold shift + click to select a range
13fd9f3
RFC018: Initial version
reinkrul e52becd
introduction
reinkrul 5980e2b
Added credential issuer trust
reinkrul 7b55ebc
feedback
reinkrul bea0800
abstract
reinkrul 963f8a8
added list of things that don't need to be supported
reinkrul 44e9cb6
feedback
reinkrul a6d0f31
feedback
reinkrul ad829ce
feedback
reinkrul 92a321e
conflicts
reinkrul File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
# RFC018 Verifiable Credential Issuance using OpenID | ||
|
||
| | | | ||
|:--------------------------|:----------| | ||
| Nuts foundation | R.G. Krul | | ||
| Request for Comments: 018 | Nedap | | ||
|
||
## Verifiable Credential Issuance using OpenID | ||
|
||
### Abstract | ||
|
||
### Status of document | ||
|
||
This document describes a Nuts standards protocol. | ||
|
||
### Copyright Notice | ||
|
||
![](../.gitbook/assets/license.png) | ||
|
||
This document is released under the [Attribution-ShareAlike 4.0 International \(CC BY-SA 4.0\) license](https://creativecommons.org/licenses/by-sa/4.0/). | ||
|
||
## 1. Introduction | ||
|
||
This specification describes how to apply OpenID for Verifiable Credential Issuance (OIDC4VCI) to issue Verifiable Credentials (VCs) | ||
reinkrul marked this conversation as resolved.
Show resolved
Hide resolved
|
||
to resolvable DIDs in server-to-server flows, without user (human) interaction from the holder. | ||
|
||
## 2. Terminology | ||
|
||
This specification uses the terms "DID", "DID document" and "Service" as defined by the [DID Core Data Model](https://www.w3.org/TR/did-core/), | ||
"Verifiable Credential", "Credential Subject" and "Issuer" as defined by the [Verifiable Credential Data Model](https://www.w3.org/TR/vc-data-model/), and | ||
"Wallet", "Client Metadata" and "Credential Offer" as defined by [OpenID 4 Verifiable Credential Issuance](https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html). | ||
|
||
## 3. Overview | ||
|
||
While OIDC4VCI is typically designed to be used to issue credentials through a browser or to a mobile wallet app, | ||
reinkrul marked this conversation as resolved.
Show resolved
Hide resolved
|
||
this specification describes how to use OIDC4VCI to issue credentials server-to-server, without user interaction from the holder. | ||
|
||
## 3.1 Supported Flows | ||
|
||
Issuers MUST support the pre-authorized code flow to issue credentials. | ||
While OIDC4VCI specifies a PIN to mitigate credential stealing, | ||
implementations MUST NOT require a PIN in server-to-server flows (see Appendix A.1). | ||
|
||
## 4. Client Metadata Discovery using DID documents | ||
|
||
To offer a credential the issuer needs to discover the wallet's credential offer endpoint, which is registered in the client metadata. | ||
|
||
When the wallet is represented by a resolvable DID the client should register a `oidc4vci-wallet-metadata` service on the DID document, | ||
which contains a URL pointing to the client metadata. This indicates the wallet supports receiving credentials according to the OIDC4VCI specification. | ||
|
||
The issuer can resolve this URL and retrieve the client metadata to find the credential offer endpoint. | ||
reinkrul marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
## 5. Credential Issuer Trust | ||
|
||
In server-to-server issuance of credentials, there's no user approving the credential offer before requesting it and loading it into the holder's wallet. | ||
Therefore, the holder must make a decision whether to trust credential issuer. | ||
reinkrul marked this conversation as resolved.
Show resolved
Hide resolved
|
||
Trust SHOULD be derived from the TLS trust anchors referred to by Appendix B.1. | ||
|
||
## Appendix A: Design decisions | ||
|
||
### A.1 No PIN requirement | ||
|
||
OIDC4VCI specifies a PIN to mitigate credential stealing, | ||
e.g. someone looking over the shoulder of the intended holder standing at a terminal, | ||
quickly scanning the QR code and stealing the resulting credential. | ||
Since this specification describes server-to-server flows, there is no user involved from who the QR code can be stolen | ||
or coerced into giving the QR code. | ||
To prevent eavesdropping, HTTPS MUST be used to protect communication (see Appendix B.1). | ||
reinkrul marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
### A.2 Trust issuer based on TLS certificates | ||
|
||
Since the TLS trust anchors are curated, trusting credential issuers can be derived from trust TLS server certificates: | ||
Credential issuer identifiers are URLs and thus link to a trusted TLS certificate. | ||
|
||
Future, more involved trust models could involve the issuer presenting a credential from which trust is derived. | ||
For instance, proving that the issuer is a registered legal entity, which can be held accountable. | ||
|
||
## Appendix B: Security Considerations | ||
|
||
### B.1 Use HTTPS for all exchanges | ||
|
||
To prevent against eavesdropping and man-in-the-middle attacks, all exchanges must be done over HTTPS. | ||
Clients should refuse to connect to plain HTTP endpoints. | ||
Refer to [RFC008 Certificate Structure](rfc008-certificate-structure.md) for requirements regarding these certificates and which Certificate Authorities should be accepted. |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
status is draft
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
not sure