-
Notifications
You must be signed in to change notification settings - Fork 6
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
Client Key Attestation JWT Example #13
Comments
re 1: the wallet instance is an instance of the software published by the wallet provider. Setting the sub to the issuer value is a plausible option as the wallet provider issued an attestation to one of its instances. It most notably prevents tracking of wallet instances (aka super cookies). |
regarding the value of the sub claim in the WAI: since the wallet instance attestation is binded to a public key, we are not forced to use a unique and immutable subject identifier but instead a unique identifier with the same lifetime of the related key. That's why I suggest to place the jwk thumbprint value as sub or any other collision resistant value anyway I think that's an implementation choice if not of interest in this specs, I'd ask to remove any constraint to have iss equal to sub, since doesn't make any sense following the awareness that the wallet provider and the wallet instance are distinct entities, even if part of the same wallet solution, then they should not use the same entity identifier |
I don't see any constraints in the spec regarding the |
I had a check, now I can confirm. |
Following the generalisation proposed in #32 if merged then we will need to constrain the sub value to being the client_id to ensure client identification and authentication can take place. Multiple client instances sharing a single client_id is not a new pattern and is common place for public clients. |
As of now, I think there is consensus to have |
I agreed that |
@peppelinux apologies we are struggling to understand what you mean here, can you possibly clarify? |
Ciao @tplooker
We have found a good compromise with @paulbastian to not force in the specs a specific value, in a way to not force that |
Thanks @peppelinux, if you dont mind, could you copy in an example of your client attestation JWT just so we can be 100% aligned, what I'm trying to understand is whether the sub value you are using is unique per user? Because our proposal above is simply for the sub value to be the client ID which for public clients would mean the same sub value across multiple instances of the same client. |
@tplooker To be exact, the Italian technical document, "Wallet Instance Attestation", defines the
As an implementer of an authorization server that plans to support the "OAuth 2.0 Attestation-Based Client Authentication" specification, I'm looking for a way to support both the cases at the same time where (1) |
Thanks @TakahikoKawasaki can you elaborate on the usecase/rationale for why the client attestation needs to include a client instance (or user unique) identifier in the attestation? For example the reason the attestation must include a client_id somewhere is because the authorisation server needs to know which client is making the request, but generally as is the case with public clients, the authorisation server doesn't care which specific instance is making the request. |
Related to #57 |
@tplooker If the specification says "the General-purpose authorization server implementations want to accept both requests at runtime, or at least want to be (statically) configurable to accept either of the two patterns. A simple resolution would be to define the value of the
|
I understand the AS can use the PoP to identify who the client is, but without a client_id in the client attestation its not really a client attestation instead its just a key attestation. Perhaps @peppelinux can you elaborate on why the sub value needs to be a JWK thumbprint in your implementation what does this enable? |
The The value of the I agree with Taka and at the same time I foudn a compromise with @paulbastian and at the end if |
Thanks for the explanation @peppelinux.
I think perhaps here is where there is a disconnect. At present in the specification, the attestation is called a "client attestation" not "user attestation" which is because the issuer of the attestation is a client and the subject is an instance that particular client. If we make the change proposed in #32 then the issuer of the client attestation is no longer necessarily the client (or client backend) instead it could be any party that the authorization server trusts to make attestations about clients. However in that model the subject of the attestation is still always a client instance not a user. So with the adoption of #32 the iss will no longer be the client ID meaning instead the client_id must feature somewhere else in the client attestation, otherwise the authorization server has no way to validate for which client an attestation it is presented has been produced for. The most practical change I see here would be for us to require the In short with the change proposed above the iss value could be any string but the sub would then still have to be the client_id, would that work for your implementation? For a concrete example see here #32 (comment) as proposed by @TakahikoKawasaki |
The following table summarizes the current spec, the Italian ecosystem, and possible compromises.
|
Thanks @TakahikoKawasaki for your write up. @peppelinux if the main intent of your use-case is to support identifying the client instance, then I believe as you highlight above that can be accomplished via the |
I didn't mention any user, a subject could be any kind of entity, like a robot, a machine, a client, etc.
In my deployment the Thanks to @TakahikoKawasaki for his memorable contributions. |
In the example in section 3.1.1. the issuer and the sub parameters should not be the same since the Wallet provider and the wallet instance are distinct entities. The private key in sole control of the wallet instance is referenced in the attestation while the subject refers to the Wallet Provider.
Moreover, is the given example meant to be normative? I'm asking since in the example we find the JWS header parameter kid without any explanatory text about the key resolution mechanism allowed in the specs. (x5c, trust_chain, jwk)
The text was updated successfully, but these errors were encountered: