# OpenID for Verifiable Credentials Issuance
## Authorization Code Flow with eSTS
```plantuml
actor User as U
box Wallet
participant "Wallet" as W
end box
participant "Issuer\nWeb App" as Iss
box AAD
participant "Authorization Endpoint" as AE
participant "Token Endpoint" as TE
participant "Microsoft Graph" as MG
end box
box Entra Verified ID
participant "Credential Issuer" as CI
end box
hide footbox
Iss -> Iss: 1. generate QR code.
W -> Iss: 2. scan QR code.
W -> CI: 3. obtains Credential Issuer's metadata
W-> AE: 4. obtains Authorization Server's metadata
group obtaining Access Token\nvalid for the Issuance of a specific Credential
W -> AE: 5. Authorization Request\nw/ scope indicating a credential-requested-be-issued
note over AE: 6. User logs in using eSTS log in credentials
return 7. code
W -> TE: 8. Token Request
return 9. Access Token valid for the issuance of a certain credential
end
group Credential Issuance
W -> CI: 10. Credential Request w/Access Token and a proof\nthat the user controls the key material that the issued Credential will be bound to.
CI -> MG: 11. Access Token (OBO flow)
return 12. data about the user
CI -> W: 13. Issues Verifiable Credential, bound to a key material presented in step 10
end
```
## Pre-Authorized Code Flow with eSTS
```plantuml
actor User as U
box Wallet
participant "Wallet" as W
end box
participant "Issuer\nWeb App" as Iss
box AAD
participant "Token Endpoint" as TE
end box
box Entra Verified ID
participant "Credential Issuer" as CI
end box
hide footbox
U -> Iss: 1. uploads data (selfie, etc.)
Iss -> CI: 2. uploads the data
return 3. pre-authorized code
Iss -> Iss: 4. generate QR code\nwith pre-authorized code.
W -> Iss: 5. scan QR code.
W -> CI: 6. obtains Credential Issuer's metadata
W-> TE: 7. obtains Authorization Server's metadata
group obtaining Access Token\nvalid for the Issuance of a specific Credential
W -> TE: 8. Token Request with pre-authorized code
return 9. Access Token valid for the issuance of a certain credential
end
group Credential Issuance (same steps as authorization code flow)
W -> CI: 10. Credential Request w/Access Token and a proof\nthat the user controls the key material that the issued Credential will be bound to.
CI -> W: 11. Issues Verifiable Credential, bound to a key material presented in step 10
end
```
## Rationale:
MSFT had a plan to use eSTS for Authorization code flow and a new AS for pre-authorized code flow, which meant different AS for the same RS/Credential endpoint.
This set up complicates the spec. We are exploring a way to use the same AS for both flows.
## Discussion items
- scope of an access token
- Client authentication