Skip to content

Commit 0bc7bce

Browse files
authored
Merge pull request #91 from oauth-wg/pb/rats
add RATS relation
2 parents 05670e6 + 764d006 commit 0bc7bce

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

draft-ietf-oauth-attestation-based-client-auth.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ normative:
4141
target: "https://www.iana.org/assignments/http-fields/http-fields.xhtml"
4242
informative:
4343
RFC6749: RFC6749
44+
RFC9334: RFC9334
4445
RFC7523: RFC7523
4546
ARF:
4647
title: "The European Digital Identity Wallet Architecture and Reference Framework"
@@ -120,6 +121,56 @@ Client Instance:
120121
Client Instance Key:
121122
: 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.
122123

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.
149+
150+
~~~
151+
OAuth-Client-Attestation: eyJhbGciOiAiRVMyNTYiLCJraWQiOiAiMTEifQ.eyJ\
152+
pc3MiOiJodHRwczovL2NsaWVudC5leGFtcGxlLmNvbSIsInN1YiI6Imh0dHBzOi8vY2x\
153+
pZW50LmV4YW1wbGUuY29tIiwibmJmIjoxMzAwODE1NzgwLCJleHAiOjEzMDA4MTkzODA\
154+
sImNuZiI6eyJqd2siOnsia3R5IjoiRUMiLCJ1c2UiOiJzaWciLCJjcnYiOiJQLTI1NiI\
155+
sIngiOiIxOHdITGVJZ1c5d1ZONlZEMVR4Z3BxeTJMc3pZa01mNko4bmpWQWlidmhNIiw\
156+
ieSI6Ii1WNGRTNFVhTE1nUF80Zlk0ajhpcjdjbDFUWGxGZEFnY3g1NW83VGtjU0EifX1\
157+
9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
158+
~~~
159+
160+
The following is an example of the OAuth-Client-Attestation-PoP header.
161+
162+
~~~
163+
OAuth-Client-Attestation-PoP: eyJhbGciOiJFUzI1NiJ9.ewogICJpc3MiOiAia\
164+
HR0cHM6Ly9jbGllbnQuZXhhbXBsZS5jb20iLAogICJhdWQiOiAi\aHR0cHM6Ly9hcy5l\
165+
eGFtcGxlLmNvbSIsCiAgIm5iZiI6MTMwMDgxNTc4MCwKICAiZXhwIjoxMzAwODE5Mzgw\
166+
LAogICJqdGkiOiAiZDI1ZDAwYWItNTUyYi00NmZjLWFlMTktOThmNDQwZjI1MDY0IiwK\
167+
ICAibm9uY2UiIDogIjVjMWE5ZTEwLTI5ZmYtNGMyYi1hZTczLTU3YzA5NTdjMDljNCIK\
168+
fQ.coB_mtdXwvi9RxSMzbIey8GVVQLv9qQrBUqmc1qj9Bs
169+
~~~
170+
171+
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+
123174
# Client Attestation Format
124175

125176
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 .
@@ -476,6 +527,7 @@ This non-normative example shows a client attestations used as an wallet instanc
476527

477528
-04
478529

530+
* add RATS relation
479531
* add concatenated representation without headers
480532
* add PAR endpoint example
481533
* fix PoP examples to include jti and nonce

0 commit comments

Comments
 (0)