Skip to content

Commit de64a7b

Browse files
committed
add verification and processing rules
1 parent 0fc916f commit de64a7b

File tree

1 file changed

+32
-6
lines changed

1 file changed

+32
-6
lines changed

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

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@ normative:
5353
org: "IANA"
5454
title: "OAuth Authorization Server Metadata"
5555
target: "https://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml#authorization-server-metadata"
56+
IANA.JOSE.ALGS:
57+
author:
58+
org: "IANA"
59+
title: "JSON Web Signature and Encryption Algorithms"
60+
target: "https://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms"
61+
5662
informative:
5763
RFC6749: RFC6749
5864
RFC9334: RFC9334
@@ -253,7 +259,7 @@ The following example is the decoded header and payload of a JWT meeting the pro
253259
}
254260
~~~
255261

256-
# Client Attestation using a Header based syntax
262+
# Client Attestation using a Header based syntax {#header-based}
257263

258264
The following section defines how a Client Attestation can be provided in an HTTP request using HTTP headers.
259265

@@ -310,8 +316,8 @@ It is RECOMMENDED that the authorization server validate the Client Attestation
310316

311317
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:
312318

313-
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).
314-
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).
319+
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).
320+
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).
315321
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.
316322

317323
## Client Attestation at the Token Endpoint {#token-endpoint}
@@ -420,8 +426,8 @@ SSWB7UhHfvLOVU_ZvAJfOWfO0MXyeunwzM3jGLB_TUkQ
420426

421427
To validate a client attestation using the concatenated serialization form, the receiving server MUST ensure the following:
422428

423-
1. Before the '~' character, there exists precisely a single well-formed JWT conforming to the syntax outlined in [](client-attestation-jwt).
424-
2. After the '~' character, there exists precisely a single well-formed JWT conforming to the syntax outlined in [](client-attestation-pop-jwt).
429+
1. Before the '~' character, there exists precisely a single well-formed JWT conforming to the syntax outlined in [](#client-attestation-jwt).
430+
2. After the '~' character, there exists precisely a single well-formed JWT conforming to the syntax outlined in [](#client-attestation-pop-jwt).
425431
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.
426432

427433
# Nonce Retrieval {#nonce-retrieval}
@@ -432,7 +438,7 @@ An Authorization Server compliant with this specification SHOULD signal via the
432438

433439
A Request to an endpoint supporting the server-provided nonce MUST include the `attestation-nonce-request` field name with the value `true` and use the HTTP method of type OPTIONS (without payload) to actively request a nonce. The server answers with an HTTP Response with status code 200 without body, but sets the header field `attestation-nonce` to the nonce.
434440

435-
The client MUST use this nonce in the OAuth-Attestation-PoP as defined in (#client-attestation-pop-jwt).
441+
The client MUST use this nonce in the OAuth-Attestation-PoP as defined in [](#client-attestation-pop-jwt).
436442

437443
The following is a non-normative example of a request:
438444

@@ -450,6 +456,25 @@ Host: as.example.com
450456
attestation-nonce: AYjcyMzY3ZDhiNmJkNTZ
451457
~~~
452458

459+
# Verification and Processing
460+
461+
Upon receiving a Client Attestation, the receiving server MUST ensure the following:
462+
463+
1. If the Client Attestation was received via Header based Syntax (as described in [](#header-based)):
464+
465+
* The HTTP request contains exactly one field `OAuth-Client-Attestation` and one field `OAuth-Client-Attestation-PoP`.
466+
* Both fields contain exactly one well-formed JWT.
467+
468+
2. The Client Attestation JWT contains all claims and header parameters as per [](#client-attestation-jwt).
469+
3. The Client Attestation PoP JWT contains all claims and header parameters as per [](#client-attestation-pop-jwt).
470+
4. The alg JOSE Header Parameter for both JWTs indicates a registered asymmetric digital signature algorithm {{IANA.JOSE.ALGS}}, is not none, is not MAC based, is supported by the application, and is acceptable per local policy.
471+
5. The signature of the Client Attestation JWT verifies with the public key of a known and trusted Attester.
472+
6. The key contained in the `cnf` claim of the Client Attestation JWT is not a private key.
473+
7. The signature of the Client Attestation PoP JWT verifies with the public key contained in the `cnf` claim of the Client Attestation JWT.
474+
8. If the server provided a challenge value to the client, the `challenge` claim is present in the Client Attestation PoP JWT and matches the server-provided challenge value.
475+
9. The creation time of the Client Attestation PoP JWT as determined by either the `iat` claim or a server managed timestamp via the challenge claim, is within an acceptable window.
476+
10. The audience claim in the Client Attestation PoP JWT is the issuer identifier URL of the authorization server as described in {{RFC8414}} .
477+
453478
# Implementation Considerations
454479

455480
## Reuse of a Client Attestation JWT
@@ -542,6 +567,7 @@ This section requests registration of the following scheme in the "Hypertext Tra
542567
* improve introduction
543568
* rename client backend to client attester
544569
* fix missing typ header in examples
570+
* add verification and processing rules
545571

546572
-04
547573

0 commit comments

Comments
 (0)