| < draft-hardt-gnap-jose-00.txt | draft-hardt-gnap-jose-01.txt > | |||
|---|---|---|---|---|
| Network Working Group D. Hardt, Ed. | Network Working Group D. Hardt, Ed. | |||
| Internet-Draft SignIn.Org | Internet-Draft SignIn.Org | |||
| Intended status: Standards Track 7 June 2020 | Intended status: Standards Track 4 July 2020 | |||
| Expires: 9 December 2020 | Expires: 5 January 2021 | |||
| JOSE Authentication | JOSE Authentication | |||
| draft-hardt-gnap-jose-00 | draft-hardt-gnap-jose-01 | |||
| Abstract | Abstract | |||
| TBD | TBD | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on 9 December 2020. | This Internet-Draft will expire on 5 January 2021. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
| license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
| Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
| skipping to change at page 2, line 22 ¶ | skipping to change at page 2, line 22 ¶ | |||
| 2.2.4. Public Key Resolution . . . . . . . . . . . . . . . . 9 | 2.2.4. Public Key Resolution . . . . . . . . . . . . . . . . 9 | |||
| 2.3. Request Encryption . . . . . . . . . . . . . . . . . . . 9 | 2.3. Request Encryption . . . . . . . . . . . . . . . . . . . 9 | |||
| 2.4. Response Signing . . . . . . . . . . . . . . . . . . . . 9 | 2.4. Response Signing . . . . . . . . . . . . . . . . . . . . 9 | |||
| 2.5. Response Encryption . . . . . . . . . . . . . . . . . . . 10 | 2.5. Response Encryption . . . . . . . . . . . . . . . . . . . 10 | |||
| 3. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 10 | 3. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | |||
| 6. Normative References . . . . . . . . . . . . . . . . . . . . 10 | 6. Normative References . . . . . . . . . . . . . . . . . . . . 10 | |||
| Appendix A. Document History . . . . . . . . . . . . . . . . . . 11 | Appendix A. Document History . . . . . . . . . . . . . . . . . . 11 | |||
| A.1. draft-hardt-gnap-jose-00 . . . . . . . . . . . . . . . . 11 | A.1. draft-hardt-gnap-jose-00 . . . . . . . . . . . . . . . . 11 | |||
| A.2. draft-hardt-gnap-jose-01 . . . . . . . . . . . . . . . . 11 | ||||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 11 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 1. Introduction | 1. Introduction | |||
| TBD | TBD | |||
| *Terminology* | *Terminology* | |||
| This document uses the following terms defined in [GNAP]: | This document uses the following terms defined in [GNAP]: | |||
| skipping to change at page 4, line 9 ¶ | skipping to change at page 4, line 9 ¶ | |||
| The token may be included in an HTTP header, or as the HTTP message | The token may be included in an HTTP header, or as the HTTP message | |||
| body. | body. | |||
| The following sections specify how the Client uses JOSE to | The following sections specify how the Client uses JOSE to | |||
| authenticate to the GS and RS. | authenticate to the GS and RS. | |||
| 2.1. Grant Server Access | 2.1. Grant Server Access | |||
| The Client authenticates to the GS by passing either a signed header | The Client authenticates to the GS by passing either a signed header | |||
| parameter, or a signed message body. The following table shows the | parameter, or a signed message body. The following table shows the | |||
| verb, uri and token location for each Client request to the GS: | method, uri and token location for each Client request to the GS: | |||
| +---------------+-----------+-----------+----------+ | +===============+=============+===========+==========+ | |||
| | request | http verb | uri | token in | | | request | http method | uri | token in | | |||
| +===============+===========+===========+==========+ | +===============+=============+===========+==========+ | |||
| | Create Grant | POST | GS URI | body | | | Create Grant | POST | GS URI | body | | |||
| +---------------+-----------+-----------+----------+ | +---------------+-------------+-----------+----------+ | |||
| | Verify Grant | PATCH | Grant URI | body | | | Verify Grant | PATCH | Grant URI | body | | |||
| +---------------+-----------+-----------+----------+ | +---------------+-------------+-----------+----------+ | |||
| | Read Grant | GET | Grant URI | header | | | Read Grant | GET | Grant URI | header | | |||
| +---------------+-----------+-----------+----------+ | +---------------+-------------+-----------+----------+ | |||
| | Update Grant | PUT | Grant URI | body | | | Update Grant | PUT | Grant URI | body | | |||
| +---------------+-----------+-----------+----------+ | +---------------+-------------+-----------+----------+ | |||
| | Delete Grant | DELETE | Grant URI | header | | | Delete Grant | DELETE | Grant URI | header | | |||
| +---------------+-----------+-----------+----------+ | +---------------+-------------+-----------+----------+ | |||
| | Read AuthZ | GET | AZ URI | header | | | Read AuthZ | GET | AZ URI | header | | |||
| +---------------+-----------+-----------+----------+ | +---------------+-------------+-----------+----------+ | |||
| | Update AuthZ | PUT | AZ URI | body | | | Update AuthZ | PUT | AZ URI | body | | |||
| +---------------+-----------+-----------+----------+ | +---------------+-------------+-----------+----------+ | |||
| | Delete AuthZ | DELETE | AZ URI | header | | | Delete AuthZ | DELETE | AZ URI | header | | |||
| +---------------+-----------+-----------+----------+ | +---------------+-------------+-----------+----------+ | |||
| | GS Options | OPTIONS | GS URI | header | | | GS Options | OPTIONS | GS URI | header | | |||
| +---------------+-----------+-----------+----------+ | +---------------+-------------+-----------+----------+ | |||
| | Grant Options | OPTIONS | Grant URI | header | | | Grant Options | OPTIONS | Grant URI | header | | |||
| +---------------+-----------+-----------+----------+ | +---------------+-------------+-----------+----------+ | |||
| | AuthZ Options | OPTIONS | AZ URI | header | | | AuthZ Options | OPTIONS | AZ URI | header | | |||
| +---------------+-----------+-----------+----------+ | +---------------+-------------+-----------+----------+ | |||
| Table 1 | Table 1 | |||
| 2.1.1. Authorization Header | 2.1.1. Authorization Header | |||
| For requests with the token in the header, the JWS payload MUST | For requests with the token in the header, the JWS payload MUST | |||
| contain the following attributes: | contain the following attributes: | |||
| *iat* - the time the token was created as a NumericDate. | *iat* - the time the token was created as a NumericDate. | |||
| *jti* - a unique identifier for the token per [RFC7519] section | *jti* - a unique identifier for the token per [RFC7519] section | |||
| 4.1.7. | 4.1.7. | |||
| *uri* - the value of the URI being called (GS URI, Grant URI, or AZ | *uri* - the value of the URI being called (GS URI, Grant URI, or AZ | |||
| URI). | URI). | |||
| *verb* - the HTTP verb being used in the call ("GET", "DELETE", | *method* - the HTTP method being used in the call ("GET", "DELETE", | |||
| "OPTIONS") | "OPTIONS") | |||
| The HTTP authorization header is set to the "jose" parameter followed | The HTTP authorization header is set to the "jose" parameter followed | |||
| by one or more white space characters, followed by the resulting | by one or more white space characters, followed by the resulting | |||
| token. | token. | |||
| A non-normative example of a JWS payload and the HTTP request | A non-normative example of a JWS payload and the HTTP request | |||
| follows: | follows: | |||
| { | { | |||
| "iat" : 15790460234, | "iat" : 15790460234, | |||
| "jti" : "f6d72254-4f23-417f-b55e-14ad323b1dc1", | "jti" : "f6d72254-4f23-417f-b55e-14ad323b1dc1", | |||
| "uri" : "https://as.example/endpoint/grant/example6", | "uri" : "https://as.example/endpoint/grant/example6", | |||
| "verb" : "GET" | "method" : "GET" | |||
| } | } | |||
| GET /endpoint/example.grant HTTP/2 | GET /endpoint/example.grant HTTP/2 | |||
| Host: as.example | Host: as.example | |||
| Authorization: jose eyJhbGciOiJIUzI1NiIsIn ... | Authorization: jose eyJhbGciOiJIUzI1NiIsIn ... | |||
| [Editor: make a real example token] | [Editor: make a real example token] | |||
| *GS Verification* | *GS Verification* | |||
| skipping to change at page 7, line 10 ¶ | skipping to change at page 7, line 10 ¶ | |||
| "x" : "Kgl5DJSgLyV-G32osmLhFKxJ97FoMW0dZVEqDG-Cwo4", | "x" : "Kgl5DJSgLyV-G32osmLhFKxJ97FoMW0dZVEqDG-Cwo4", | |||
| "y" : "GsL4mOM4x2e6iON8BHvRDQ6AgXAPnw0m0SfdlREV7i4" | "y" : "GsL4mOM4x2e6iON8BHvRDQ6AgXAPnw0m0SfdlREV7i4" | |||
| } | } | |||
| } | } | |||
| 2.2. Resource Server Access | 2.2. Resource Server Access | |||
| In the "jose" mechanism Section 2.2.2, all Client requests to the RS | In the "jose" mechanism Section 2.2.2, all Client requests to the RS | |||
| include a proof-of-possession token in the HTTP authorization header. | include a proof-of-possession token in the HTTP authorization header. | |||
| In the "jose+body" mechanism Section 2.2.3, the Client signs the JSON | In the "jose+body" mechanism Section 2.2.3, the Client signs the JSON | |||
| document in the request if the POST or PUT verbs are used, otherwise | document in the request if the POST or PUT methods are used, | |||
| it is the same as the "jose" mechanism. | otherwise it is the same as the "jose" mechanism. | |||
| 2.2.1. JOSE header | 2.2.1. JOSE header | |||
| The GS provides the Client one or more JWS header parameters and | The GS provides the Client one or more JWS header parameters and | |||
| values for a a certificate, or a reference to a certificate or | values for a a certificate, or a reference to a certificate or | |||
| certificate chain, that the RS can use to resolve the public key | certificate chain, that the RS can use to resolve the public key | |||
| matching the private key being used by the Client. | matching the private key being used by the Client. | |||
| A non-normative examples JOSE header: | A non-normative examples JOSE header: | |||
| skipping to change at page 7, line 42 ¶ | skipping to change at page 7, line 42 ¶ | |||
| The JWS payload MUST contain the following attributes: | The JWS payload MUST contain the following attributes: | |||
| *iat* - the time the token was created as a NumericDate. | *iat* - the time the token was created as a NumericDate. | |||
| *jti* - a unique identifier for the token per [RFC7519] section | *jti* - a unique identifier for the token per [RFC7519] section | |||
| 4.1.7. | 4.1.7. | |||
| *uri* - the value of the RS URI being called. | *uri* - the value of the RS URI being called. | |||
| *verb* - the HTTP verb being used in the call | *method* - the HTTP method being used in the call | |||
| *token* - the access token provided by the GS to the Client | *token* - the access token provided by the GS to the Client | |||
| The HTTP authorization header is set to the "jose" parameter followed | The HTTP authorization header is set to the "jose" parameter followed | |||
| by one or more white space characters, followed by the resulting | by one or more white space characters, followed by the resulting | |||
| token. | token. | |||
| A non-normative example of a JWS payload and the HTTP request | A non-normative example of a JWS payload and the HTTP request | |||
| follows: | follows: | |||
| { | { | |||
| "iat" : 15790460234, | "iat" : 15790460234, | |||
| "jti" : "f6d72254-4f23-417f-b55e-14ad323b1dc1", | "jti" : "f6d72254-4f23-417f-b55e-14ad323b1dc1", | |||
| "uri" : "https://calendar.example/calendar", | "uri" : "https://calendar.example/calendar", | |||
| "verb" : "GET", | "method" : "GET", | |||
| "token" : "eyJJ2D6.example.access.token.mZf9pTSpA" | "token" : "eyJJ2D6.example.access.token.mZf9pTSpA" | |||
| } | } | |||
| GET /calendar HTTP/2 | GET /calendar HTTP/2 | |||
| Host: calendar.example | Host: calendar.example | |||
| Authorization: jose eyJhbG.example.jose.token.adks | Authorization: jose eyJhbG.example.jose.token.adks | |||
| [Editor: make a real example token] | [Editor: make a real example token] | |||
| *RS Verification* | *RS Verification* | |||
| skipping to change at page 8, line 45 ¶ | skipping to change at page 8, line 45 ¶ | |||
| Requests sending a message body MUST have the following JWS payload: | Requests sending a message body MUST have the following JWS payload: | |||
| *iat* - the time the token was created as a NumericDate. | *iat* - the time the token was created as a NumericDate. | |||
| *jti* - a unique identifier for the token per [RFC7519] section | *jti* - a unique identifier for the token per [RFC7519] section | |||
| 4.1.7. | 4.1.7. | |||
| *uri* - the value of the RS URI being called. | *uri* - the value of the RS URI being called. | |||
| *verb* - the HTTP verb being used in the call | *method* - the HTTP method being used in the call | |||
| *token* - the access token provided by the GS to the Client | *token* - the access token provided by the GS to the Client | |||
| *body* - the message body being sent to the RS | *body* - the message body being sent to the RS | |||
| A non-normative example of a JWS payload and the HTTP request | A non-normative example of a JWS payload and the HTTP request | |||
| follows: | follows: | |||
| { | { | |||
| "iat" : 15790460234, | "iat" : 15790460234, | |||
| "jti" : "f6d72254-4f23-417f-b55e-14ad323b1dc1", | "jti" : "f6d72254-4f23-417f-b55e-14ad323b1dc1", | |||
| "uri" : "https://calendar.example/calendar", | "uri" : "https://calendar.example/calendar", | |||
| "verb" : "POST", | "method": "POST", | |||
| "token" : "eyJJ2D6.example.access.token.mZf9pTSpA", | "token" : "eyJJ2D6.example.access.token.mZf9pTSpA", | |||
| "payload" : { | "payload" : { | |||
| "event" : { | "event" : { | |||
| "title" : "meeting with joe", | "title" : "meeting with joe", | |||
| "start_date_utc" : "2020-02-21 11:00:00", | "start_date_utc" : "2020-02-21 11:00:00", | |||
| "end_date_utc" : "2020-02-21 11:00:00" | "end_date_utc" : "2020-02-21 11:00:00" | |||
| } | } | |||
| } | } | |||
| } | } | |||
| skipping to change at page 11, line 32 ¶ | skipping to change at page 11, line 32 ¶ | |||
| [GNAP] Hardt, D., "The Grant Negotiation and Authorization | [GNAP] Hardt, D., "The Grant Negotiation and Authorization | |||
| Protocol", June 2020, | Protocol", June 2020, | |||
| <https://tools.ietf.org/html/draft-hardt-xauth-protocol>. | <https://tools.ietf.org/html/draft-hardt-xauth-protocol>. | |||
| Appendix A. Document History | Appendix A. Document History | |||
| A.1. draft-hardt-gnap-jose-00 | A.1. draft-hardt-gnap-jose-00 | |||
| * Initial version | * Initial version | |||
| A.2. draft-hardt-gnap-jose-01 | ||||
| * renamed HTTP verb to method | ||||
| Author's Address | Author's Address | |||
| Dick Hardt (editor) | Dick Hardt (editor) | |||
| SignIn.Org | SignIn.Org | |||
| United States | United States | |||
| Email: dick.hardt@gmail.com | Email: dick.hardt@gmail.com | |||
| End of changes. 14 change blocks. | ||||
| 45 lines changed or deleted | 50 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||