Repository navigation
[OID4VCI] Clarification of issuance use-cases #45626
Replies: 6 comments 15 replies
|
About "CredentialOffer comes from DataHolder" ... The image suggests that there is an entity external to Keycloak that somehow fabricates a credential offer json document. The issuer would not know anything about such an offer (i.e. it has no offer state). If this document is meant to transport some credential metadata to the wallet, which then allows the wallet to get a verifiable credential (by scope or credential_configuration_id) it would perhaps be better to name it as such (i.e. not credential offer) to avoid confusion with an actual credential offer, which is always created by the Issuer. Alternatively, if it is indeed meant to be a credential offer as outlined by the spec, that external entity would want to make a call to Keycloak to the credential offer created on its behalf. The first arrow would go the other way, from the University Portal to the Issuer. The credential offer then existed in Keycloak and could be shown, transported, and acted upon. 8000 Also worth noting, that the issuer would likely want to have a chance to apply credential offer policies, which might deny credential offer creation for one reason or another. |
|
@Captain-P-Goldfish Thanks for the extensive list of use-cases! I have more things, but wanted to check about the "Security considerations" in the flow "User initiates Issuance from Keycloak Portal" .
If I understand correctly, this is about the fact, that some credential types can be initiated by user himself (user self-issuance flows) without a need for the administrator to create credential-offer for the user. However for some others, it is strictly required that administrator creates credential offer for the user. Is it correct? Considering this, it seems to me there is some inconsistency in current Keycloak as:
I wonder if we need some configuration option on OID4VCI client scope like WDYT? |
Is that so? I thought the /credential-offer-uri is the only place where |
|
@Captain-P-Goldfish Few more comments to your use-cases:
|
By fabricating a credential offer (instead of obtaining it from the Issuer), the Data Holder bypasses credential offer policies that the Issuer may have put in place in order to restrict what is getting offered (i.e. credential_identifier), who the offer is valid for (i.e. allowed target users), when it will expire and perhaps other details that the credential offer state holds. Is there really a benefit of not asking the Issuer? Something must create that pseudo offer and possibly generate the QR code for it, why not make a simple http call to have Keycloak do the same? In the latter case, we could then reason about a "credential offer" and would not need to distinguish between externally fabricated ones and those generated by Keycloak. |
|
Here is another issuance use-case to consider similar to the above but with another layer added. My perspective is a large scale government deployment (not EU). I am posting in this thread based on the discussion title. I apologize in advance if this should be considered a new discussion topic and will update as appropriate. Layers and definitions as follows:
Observation: The digital credential vendors and open source developers are building AS functionality into their technical stack with all the security risks that entails. Traditional IAM vendors were building credential issuance into their stacks (MS, OKTA etc..) but appear to have backed away from that to focus on verification which is a much larger opportunity - small number of issuers of foundational credentials, large number of verifiers. There is an opportunity here. Reasons for doing this This configuration allows for more flexibility and customization in large scale deployments (i.e. government) with a clear separation of responsibilities.
Testing to Date I have built a pre-authorized code flow proof of concept demo that uses an external issuance service. Here are some findings:
What is required for this use case
|
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
In this discussion, I want to focus on real-world scenarios that we are likely to face in the future when working with Keycloak and wallets.
To that end, I have defined a set of use cases (certainly not an exhaustive list) and introduced an additional role in
the OID4VCI protocol that is not explicitly defined in the current specification.
this discussion is related to some technical discussions I had with @tdiesler.
I would kindly like to invite the following developers for review if you are interested:
@mposolda @IngridPuppet @Awambeng @thomasdarimont @francis-pouatcha @forkimenjeckayang
Summary: Separation of Credential Issuer and DataHolder
OID4VCI defines a protocol-level model in which the Credential Issuer is implicitly
assumed to be both:
As a result, OID4VCI does not distinguish between protocol responsibilities and
business data ownership.
Our Use Case and Extension
In our use case, these responsibilities are intentionally separated:
Credential Issuer (OID4VCI role)
A technical component (e.g. Keycloak) that:
DataHolder (out-of-spec role)
A business authority (e.g. a university) that:
Note
Please note that DataHolder may not be the correct term here, as there are use cases in which the data is not held by the DataHolder but by Keycloak.
The first four examples below illustrate this issue, as the credential data is stored at the Credential Issuer (Keycloak) rather than at the DataHolder.
The DataHolder is not an OID4VCI concept; it is introduced deliberately to model
real-world delegated issuance scenarios.
Definition of User Interaction
The following concept defines user interaction as any explicit user action that
actively triggers or advances the issuance workflow, such as scanning a QR code,
clicking a deep link, entering a
tx_codeetc.DataHolder initiated Flows
CredentialOffer comes from DataHolder
DataHolder initiates AuthorizationRequest
User Self-Issuance Flows
User initiates Issuance from Keycloak Portal
User initiates Issuance directly from Wallet
Data is retrieved from external provider
Data is retrieved from external Identity Provider
Data is pushed by DataHolder
This use case should be probably setup with a custom-extension instead of being supported natively by Keycloak.
But the diagram shows that we need mechanisms that allow us to add short-living user instances. This can probably be done with appropriate additional endpoints and
AuthenticationExecutionsUsing Pushed Authorization Request for receiving Credential Data?
this use case is just an idea that we could use to get the CredentialData with a PushedAuthorizationRequest of the DataHolder
All reactions