You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
title: "The European Digital Identity Wallet Architecture and Reference Framework"
@@ -120,6 +121,56 @@ Client Instance:
120
121
Client Instance Key:
121
122
: A cryptographic asymmetric key pair that is generated by the Client Instance where the public key of the key pair is provided to the client backend. This public key is then encapsulated within the Client Attestation JWT and is utilized to sign the Client Attestation Proof of Possession.
122
123
124
+
# Relation to RATS
125
+
126
+
The Remote Attestation Procedures (RATS) architecture defined by {{RFC9334}} has some commonalities to this document. The flow specified in this specification relates to the "Passport Model" in RATS. However, while the RATS ecosystem gives explicit methods and values how the RATS Attester proves itself to the Verifier, this is deliberately out of scope for Attestation-Based Client Authentication. Additionally, the terminology between RATS and OAuth is different:
127
+
128
+
- a RATS "Attester" relates to an OAuth "Client"
129
+
- a RATS "Relying Party" relates to an OAuth "Authorization Server or Resource Server"
130
+
- a RATS "Verifier" relates to the "Client Backend" defined in this specification
131
+
- a RATS "Attestion Result" relates to the "Client Attestation JWT" defined by this specification
132
+
- a RATS "Endorser", "Reference Value Provider", "Endorsement", "Evidence" and "Policies and Reference Values" are out of scope for this specification
133
+
134
+
# Client Attestation
135
+
136
+
This draft introduces the concept of client attestations to the OAuth 2 protocol, using two JWTs: a Client Attestation and a Client Attestation Proof of Possession (PoP). These JWTs are transmitted via HTTP headers in an HTTP request from a Client Instance to an Authorization Server or Resource Server. The primary purpose of these headers is to authenticate the Client Instance.
137
+
138
+
## Client Attestation HTTP Headers {#headers}
139
+
140
+
A Client Attestation JWT and Client Attestation PoP JWT is included in an HTTP request using the following request header fields.
141
+
142
+
OAuth-Client-Attestation:
143
+
: A JWT that conforms to the structure and syntax as defined in [](#client-attestation-jwt)
144
+
145
+
OAuth-Client-Attestation-PoP:
146
+
: A JWT that adheres to the structure and syntax as defined in [](#client-attestation-pop-jwt)
147
+
148
+
The following is an example of the OAuth-Client-Attestation header.
Note that per {{RFC9110}} header field names are case-insensitive; so OAUTH-CLIENT-ATTESTATION, oauth-client-attestation, etc., are all valid and equivalent
172
+
header field names. Case is significant in the header field value, however.
173
+
123
174
# Client Attestation Format
124
175
125
176
This draft introduces the concept of client attestations to the OAuth 2 protocol, using two JWTs: a Client Attestation and a Client Attestation Proof of Possession (PoP). The primary purpose of these JWTs is to authenticate the Client Instance. These JWTs can be transmitted via HTTP headers in an HTTP request (as described in [](#headers)) from a Client Instance to an Authorization Server or Resource Server, or via a concatenated serialization (as described in [](#alternative-representation)) to enable usage outside of the traditional OAuth2 ecosystem .
@@ -223,7 +274,7 @@ The following example is the decoded header and payload of a JWT meeting the pro
223
274
224
275
# Client Attestation using a Header based syntax
225
276
226
-
The default way to present a Client Attestation is by using the header-based syntax that can be used at different endpoints.
277
+
The following section defines how a Client Attestation can be provided in an HTTP request using HTTP headers.
To validate an HTTP request which contains the client attestation headers, the receiving server MUST ensure the following with regard to a received HTTP request:
278
329
279
330
1. There is precisely one OAuth-Client-Attestation HTTP request header field, where its value is a single well-formed JWT conforming to the syntax outlined in []{client-attestation-jwt}.
280
-
2. There is precisely one OAuth-Client-Attestation-PoP HTTP request header field, where its value is a single well-formed JWT conforming to the syntax outlined in []{client-attestation-pop-jwt}.
331
+
2. There is precisely one OAuth-Client-Attestation-PoP HTTP request header field, where its value is a single well-formed JWT conforming to the syntax outlined in [](client-attestation-pop-jwt).
281
332
3. The signature of the Client Attestation PoP JWT obtained from the OAuth-Client-Attestation-PoP HTTP header verifies with the Client Instance Key contained in the `cnf` claim of the Client Attestation JWT obtained from the OAuth-Client-Attestation HTTP header.
282
333
283
334
## Client Attestation at the Token Endpoint {#token-endpoint}
# Concatenated Serialization for Client Attestations {#alternative-representation}
346
397
347
-
A Client Attestation according to this specification MAY be presented using an alternative representation for cases where the header-based mechanism (as introduced in introduced in []{#headers}) does not fit the underlying protocols, e.g., for direct calls to Browser APIs.
398
+
A Client Attestation according to this specification MAY be presented using an alternative representation for cases where the header-based mechanism (as introduced in introduced in [](#headers) does not fit the underlying protocols, e.g., for direct calls to Browser APIs.
348
399
In those cases, a concatenated serialization of the Client Attestation and Client Attestation PoP can can be used.
349
400
350
401
## Concatenated Serialization Format {#format-alternative}
To validate a client attestation using the concatenated serialization form, the receiving server MUST ensure the following:
382
433
383
-
1. Before the '~' character, there exists precisely a single well-formed JWT conforming to the syntax outlined in []{client-attestation-jwt}.
384
-
2. After the '~' character, there exists precisely a single well-formed JWT conforming to the syntax outlined in []{client-attestation-pop-jwt}.
434
+
1. Before the '~' character, there exists precisely a single well-formed JWT conforming to the syntax outlined in [](client-attestation-jwt).
435
+
2. After the '~' character, there exists precisely a single well-formed JWT conforming to the syntax outlined in [](client-attestation-pop-jwt).
385
436
3. The signature of the Client Attestation PoP JWT obtained after the '~' character verifies with the Client Instance Key contained in the `cnf` claim of the Client Attestation JWT obtained before the '~' character.
386
437
387
438
# Implementation Considerations
@@ -485,6 +536,7 @@ This non-normative example shows a client attestations used as an wallet instanc
485
536
486
537
* restructured JWT Claims for better readability
487
538
* added JOSE typ values for Client Attestation and Client Attestation PoP
0 commit comments