Disclosure with OpenID4VP
Generic disclosure
This diagram shows how OpenID4VP is implemented within the NL Wallet Solution.
OpenID for Verifiable Presentations - draft 20 is used as basis for the implementation.
Client authentication is done using the x509_san_dns Client Identifier Scheme. Other Client Identifier Schemes are currently not supported.
The reponse mode is direct_post.jwt. Other response modes are currently not supported.
In more detail, the protocol works as follows:
sequenceDiagram
autonumber
actor User
participant RP as Verifier
participant WalletServer as Verifier Endpoint ('OV')
participant Wallet
User->>RP: Start action to disclose attributes
RP->>WalletServer: initiate transaction
WalletServer ->>RP: return session_token
RP ->>+ Wallet: authorization request (request_uri) (open wallet through universal link or scan QR on another device)
Wallet ->> WalletServer: request Request Object (using request_uri)
note over WalletServer: Request Object (signed) also contains 'client_metadata',<Br/> including jwks with an ephemeral key for encrypting the authorization response
WalletServer ->> Wallet: response with (signed) Request Object
Wallet ->>+ User: request user consent for disclosure
User ->> Wallet: provide consent for disclosure of attributes (using PIN)
Wallet->> WalletServer: authorization response (VP Token) (JWE using ephemeral key)
WalletServer ->>WalletServer: Validate VP Token
WalletServer ->> Wallet: authorization response (redirect_uri with session_token)
Wallet ->> RP: redirect to the redirect URI (session_token)
RP ->> WalletServer: fetch response data (session_token)
WalletServer ->> RP: response data (verified attributes)
From Verifier’s website or app, user decides to start an action that requires disclosed attributes
A request goes from Verifier App to OV to start a disclosure session
OV returns
session_tokencreated for this sessionThe OpenID4VP Authorization Request
request_uriparameter is put in a UL or QR code, which is either opened or scanned by the Wallet.Wallet requests the request object from the given
request_uri. The request object contains theresponse_uriVerifier returns request object (signed)
The requested attributes and the identity of the verifier are presented to the user for consent
User provides consent (using PIN)
Response is posted back to Verifier Endpoint (‘OV’) (endpoint address is supplied in
response_uriwithin the Request Object)‘OV’ verifies the received VP Token
Verifier endpoint returns a
redirect_uriback into the verfier’s website or appRedirect to verifier using
redirect_uri.Verifier’s website or app requests session results from ‘OV’ using
session_token‘OV’ returns session results