| < draft-ietf-oauth-v2-1-00.txt | draft-ietf-oauth-v2-1-01.txt > | |||
|---|---|---|---|---|
| OAuth Working Group D. Hardt | OAuth Working Group D. Hardt | |||
| Internet-Draft SignIn.Org | Internet-Draft SignIn.Org | |||
| Intended status: Standards Track A. Parecki | Intended status: Standards Track A. Parecki | |||
| Expires: 31 January 2021 Okta | Expires: 5 August 2021 Okta | |||
| T. Lodderstedt | T. Lodderstedt | |||
| yes.com | yes.com | |||
| 30 July 2020 | 1 February 2021 | |||
| The OAuth 2.1 Authorization Framework | The OAuth 2.1 Authorization Framework | |||
| draft-ietf-oauth-v2-1-00 | draft-ietf-oauth-v2-1-01 | |||
| Abstract | Abstract | |||
| The OAuth 2.1 authorization framework enables a third-party | The OAuth 2.1 authorization framework enables a third-party | |||
| application to obtain limited access to an HTTP service, either on | application to obtain limited access to an HTTP service, either on | |||
| behalf of a resource owner by orchestrating an approval interaction | behalf of a resource owner by orchestrating an approval interaction | |||
| between the resource owner and the HTTP service, or by allowing the | between the resource owner and an authorization service, or by | |||
| third-party application to obtain access on its own behalf. This | allowing the third-party application to obtain access on its own | |||
| specification replaces and obsoletes the OAuth 2.0 Authorization | behalf. This specification replaces and obsoletes the OAuth 2.0 | |||
| Framework described in RFC 6749. | Authorization Framework described in RFC 6749. | |||
| 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 31 January 2021. | This Internet-Draft will expire on 5 August 2021. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2021 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 | |||
| and restrictions with respect to this document. Code Components | and restrictions with respect to this document. Code Components | |||
| extracted from this document must include Simplified BSD License text | extracted from this document must include Simplified BSD License text | |||
| as described in Section 4.e of the Trust Legal Provisions and are | as described in Section 4.e of the Trust Legal Provisions and are | |||
| provided without warranty as described in the Simplified BSD License. | provided without warranty as described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 5 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 1.1. Roles . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 1.1. Roles . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 1.2. Protocol Flow . . . . . . . . . . . . . . . . . . . . . . 7 | 1.2. Protocol Flow . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 1.3. Authorization Grant . . . . . . . . . . . . . . . . . . . 8 | 1.3. Authorization Grant . . . . . . . . . . . . . . . . . . . 8 | |||
| 1.3.1. Authorization Code . . . . . . . . . . . . . . . . . 8 | 1.3.1. Authorization Code . . . . . . . . . . . . . . . . . 8 | |||
| 1.3.2. Client Credentials . . . . . . . . . . . . . . . . . 8 | 1.3.2. Client Credentials . . . . . . . . . . . . . . . . . 9 | |||
| 1.4. Access Token . . . . . . . . . . . . . . . . . . . . . . 9 | 1.4. Access Token . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 1.5. Refresh Token . . . . . . . . . . . . . . . . . . . . . . 9 | 1.5. Refresh Token . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 1.6. TLS Version . . . . . . . . . . . . . . . . . . . . . . . 11 | 1.6. TLS Version . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 1.7. HTTP Redirections . . . . . . . . . . . . . . . . . . . . 11 | 1.7. HTTP Redirections . . . . . . . . . . . . . . . . . . . . 12 | |||
| 1.8. Interoperability . . . . . . . . . . . . . . . . . . . . 11 | 1.8. Interoperability . . . . . . . . . . . . . . . . . . . . 12 | |||
| 1.9. Notational Conventions . . . . . . . . . . . . . . . . . 12 | 1.9. Compatibility with OAuth 2.0 . . . . . . . . . . . . . . 13 | |||
| 2. Client Registration . . . . . . . . . . . . . . . . . . . . . 12 | 1.10. Notational Conventions . . . . . . . . . . . . . . . . . 13 | |||
| 2.1. Client Types . . . . . . . . . . . . . . . . . . . . . . 13 | 2. Client Registration . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 2.2. Client Identifier . . . . . . . . . . . . . . . . . . . . 14 | 2.1. Client Types . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 2.3. Client Authentication . . . . . . . . . . . . . . . . . . 15 | 2.2. Client Identifier . . . . . . . . . . . . . . . . . . . . 16 | |||
| 2.3.1. Client Password . . . . . . . . . . . . . . . . . . . 15 | 2.3. Client Authentication . . . . . . . . . . . . . . . . . . 16 | |||
| 2.3.2. Other Authentication Methods . . . . . . . . . . . . 16 | 2.3.1. Client Password . . . . . . . . . . . . . . . . . . . 17 | |||
| 2.4. Unregistered Clients . . . . . . . . . . . . . . . . . . 17 | 2.3.2. Other Authentication Methods . . . . . . . . . . . . 18 | |||
| 3. Protocol Endpoints . . . . . . . . . . . . . . . . . . . . . 17 | 2.4. Unregistered Clients . . . . . . . . . . . . . . . . . . 18 | |||
| 3.1. Authorization Endpoint . . . . . . . . . . . . . . . . . 17 | 3. Protocol Endpoints . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 3.1.1. Response Type . . . . . . . . . . . . . . . . . . . . 18 | 3.1. Authorization Endpoint . . . . . . . . . . . . . . . . . 19 | |||
| 3.1.2. Redirection Endpoint . . . . . . . . . . . . . . . . 18 | 3.1.1. Response Type . . . . . . . . . . . . . . . . . . . . 19 | |||
| 3.2. Token Endpoint . . . . . . . . . . . . . . . . . . . . . 20 | 3.1.2. Redirection Endpoint . . . . . . . . . . . . . . . . 20 | |||
| 3.2.1. Client Authentication . . . . . . . . . . . . . . . . 21 | 3.2. Token Endpoint . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 3.3. Access Token Scope . . . . . . . . . . . . . . . . . . . 21 | 3.2.1. Client Authentication . . . . . . . . . . . . . . . . 22 | |||
| 4. Obtaining Authorization . . . . . . . . . . . . . . . . . . . 22 | 3.3. Access Token Scope . . . . . . . . . . . . . . . . . . . 23 | |||
| 4.1. Authorization Code Grant . . . . . . . . . . . . . . . . 22 | 4. Obtaining Authorization . . . . . . . . . . . . . . . . . . . 23 | |||
| 4.1.1. Authorization Request . . . . . . . . . . . . . . . . 24 | 4.1. Authorization Code Grant . . . . . . . . . . . . . . . . 23 | |||
| 4.1.2. Authorization Response . . . . . . . . . . . . . . . 27 | 4.1.1. Authorization Request . . . . . . . . . . . . . . . . 25 | |||
| 4.1.3. Access Token Request . . . . . . . . . . . . . . . . 30 | 4.1.2. Authorization Response . . . . . . . . . . . . . . . 28 | |||
| 4.1.4. Access Token Response . . . . . . . . . . . . . . . . 31 | 4.1.3. Access Token Request . . . . . . . . . . . . . . . . 31 | |||
| 4.2. Client Credentials Grant . . . . . . . . . . . . . . . . 31 | 4.1.4. Access Token Response . . . . . . . . . . . . . . . . 32 | |||
| 4.2.1. Authorization Request and Response . . . . . . . . . 32 | 4.2. Client Credentials Grant . . . . . . . . . . . . . . . . 33 | |||
| 4.2.2. Access Token Request . . . . . . . . . . . . . . . . 32 | 4.2.1. Authorization Request and Response . . . . . . . . . 33 | |||
| 4.2.3. Access Token Response . . . . . . . . . . . . . . . . 33 | 4.2.2. Access Token Request . . . . . . . . . . . . . . . . 33 | |||
| 4.3. Extension Grants . . . . . . . . . . . . . . . . . . . . 33 | 4.2.3. Access Token Response . . . . . . . . . . . . . . . . 34 | |||
| 5. Issuing an Access Token . . . . . . . . . . . . . . . . . . . 34 | 4.3. Extension Grants . . . . . . . . . . . . . . . . . . . . 34 | |||
| 5.1. Successful Response . . . . . . . . . . . . . . . . . . . 34 | 5. Issuing an Access Token . . . . . . . . . . . . . . . . . . . 35 | |||
| 5.2. Error Response . . . . . . . . . . . . . . . . . . . . . 35 | 5.1. Successful Response . . . . . . . . . . . . . . . . . . . 35 | |||
| 6. Refreshing an Access Token . . . . . . . . . . . . . . . . . 37 | 5.2. Error Response . . . . . . . . . . . . . . . . . . . . . 36 | |||
| 6.1. Refresh Token Protection . . . . . . . . . . . . . . . . 38 | ||||
| 7. Accessing Protected Resources . . . . . . . . . . . . . . . . 40 | ||||
| 7.1. Access Token Types . . . . . . . . . . . . . . . . . . . 40 | ||||
| 7.2. Bearer Tokens . . . . . . . . . . . . . . . . . . . . . . 41 | ||||
| 7.2.1. Authenticated Requests . . . . . . . . . . . . . . . 41 | ||||
| 7.2.2. The WWW-Authenticate Response Header Field . . . . . 43 | ||||
| 7.2.3. Error Codes . . . . . . . . . . . . . . . . . . . . . 44 | ||||
| 7.3. Error Response . . . . . . . . . . . . . . . . . . . . . 45 | ||||
| 7.3.1. Extension Token Types . . . . . . . . . . . . . . . . 45 | ||||
| 7.4. Access Token Security Considerations . . . . . . . . . . 45 | ||||
| 7.4.1. Security Threats . . . . . . . . . . . . . . . . . . 46 | ||||
| 7.4.2. Threat Mitigation . . . . . . . . . . . . . . . . . . 46 | ||||
| 7.4.3. Summary of Recommendations . . . . . . . . . . . . . 48 | ||||
| 7.4.4. Token Replay Prevention . . . . . . . . . . . . . . . 49 | ||||
| 7.4.5. Access Token Privilege Restriction . . . . . . . . . 50 | ||||
| 8. Extensibility . . . . . . . . . . . . . . . . . . . . . . . . 50 | ||||
| 8.1. Defining Access Token Types . . . . . . . . . . . . . . . 50 | ||||
| 8.2. Defining New Endpoint Parameters . . . . . . . . . . . . 51 | ||||
| 8.3. Defining New Authorization Grant Types . . . . . . . . . 51 | ||||
| 8.4. Defining New Authorization Endpoint Response Types . . . 51 | ||||
| 8.5. Defining Additional Error Codes . . . . . . . . . . . . . 52 | ||||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 52 | ||||
| 9.1. Client Authentication . . . . . . . . . . . . . . . . . . 53 | ||||
| 9.1.1. Client Authentication of Native Apps . . . . . . . . 53 | ||||
| 9.2. Registration of Native App Clients . . . . . . . . . . . 54 | ||||
| 9.3. Client Impersonation . . . . . . . . . . . . . . . . . . 54 | ||||
| 9.3.1. Impersonation of Native Apps . . . . . . . . . . . . 55 | ||||
| 9.4. Access Tokens . . . . . . . . . . . . . . . . . . . . . . 55 | ||||
| 9.4.1. Access Token Privilege Restriction . . . . . . . . . 56 | ||||
| 9.4.2. Access Token Replay Prevention . . . . . . . . . . . 56 | ||||
| 9.5. Refresh Tokens . . . . . . . . . . . . . . . . . . . . . 57 | ||||
| 9.6. Client Impersonating Resource Owner . . . . . . . . . . . 57 | ||||
| 9.7. Protecting Redirect-Based Flows . . . . . . . . . . . . . 58 | ||||
| 9.7.1. Loopback Redirect Considerations in Native Apps . . . 58 | ||||
| 9.7.2. HTTP 307 Redirect . . . . . . . . . . . . . . . . . . 59 | ||||
| 9.8. Authorization Codes . . . . . . . . . . . . . . . . . . . 60 | ||||
| 9.9. Request Confidentiality . . . . . . . . . . . . . . . . . 61 | ||||
| 9.10. Ensuring Endpoint Authenticity . . . . . . . . . . . . . 61 | ||||
| 9.11. Credentials-Guessing Attacks . . . . . . . . . . . . . . 62 | ||||
| 9.12. Phishing Attacks . . . . . . . . . . . . . . . . . . . . 62 | ||||
| 9.13. Fake External User-Agents in Native Apps . . . . . . . . 62 | ||||
| 9.14. Malicious External User-Agents in Native Apps . . . . . . 63 | ||||
| 9.15. Cross-Site Request Forgery . . . . . . . . . . . . . . . 63 | ||||
| 9.16. Clickjacking . . . . . . . . . . . . . . . . . . . . . . 64 | ||||
| 9.17. Code Injection and Input Validation . . . . . . . . . . . 65 | ||||
| 9.18. Open Redirectors . . . . . . . . . . . . . . . . . . . . 65 | ||||
| 9.18.1. Client as Open Redirector . . . . . . . . . . . . . 65 | ||||
| 9.18.2. Authorization Server as Open Redirector . . . . . . 65 | ||||
| 9.19. Authorization Server Mix-Up Mitigation in Native Apps . . 66 | 6. Refreshing an Access Token . . . . . . . . . . . . . . . . . 38 | |||
| 9.20. Embedded User Agents in Native Apps . . . . . . . . . . . 66 | 6.1. Refresh Token Protection . . . . . . . . . . . . . . . . 39 | |||
| 9.21. Other Recommendations . . . . . . . . . . . . . . . . . . 67 | 7. Accessing Protected Resources . . . . . . . . . . . . . . . . 41 | |||
| 10. Native Applications . . . . . . . . . . . . . . . . . . . . . 67 | 7.1. Access Token Types . . . . . . . . . . . . . . . . . . . 41 | |||
| 7.2. Bearer Tokens . . . . . . . . . . . . . . . . . . . . . . 42 | ||||
| 7.2.1. Authenticated Requests . . . . . . . . . . . . . . . 42 | ||||
| 7.2.2. The WWW-Authenticate Response Header Field . . . . . 44 | ||||
| 7.2.3. Error Codes . . . . . . . . . . . . . . . . . . . . . 45 | ||||
| 7.3. Error Response . . . . . . . . . . . . . . . . . . . . . 46 | ||||
| 7.3.1. Extension Token Types . . . . . . . . . . . . . . . . 46 | ||||
| 7.4. Access Token Security Considerations . . . . . . . . . . 46 | ||||
| 7.4.1. Security Threats . . . . . . . . . . . . . . . . . . 47 | ||||
| 7.4.2. Threat Mitigation . . . . . . . . . . . . . . . . . . 47 | ||||
| 7.4.3. Summary of Recommendations . . . . . . . . . . . . . 49 | ||||
| 7.4.4. Token Replay Prevention . . . . . . . . . . . . . . . 50 | ||||
| 7.4.5. Access Token Privilege Restriction . . . . . . . . . 51 | ||||
| 8. Extensibility . . . . . . . . . . . . . . . . . . . . . . . . 51 | ||||
| 8.1. Defining Access Token Types . . . . . . . . . . . . . . . 51 | ||||
| 8.2. Defining New Endpoint Parameters . . . . . . . . . . . . 52 | ||||
| 8.3. Defining New Authorization Grant Types . . . . . . . . . 52 | ||||
| 8.4. Defining New Authorization Endpoint Response Types . . . 52 | ||||
| 8.5. Defining Additional Error Codes . . . . . . . . . . . . . 53 | ||||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 53 | ||||
| 9.1. Client Authentication . . . . . . . . . . . . . . . . . . 54 | ||||
| 9.1.1. Client Authentication of Native Apps . . . . . . . . 54 | ||||
| 9.2. Registration of Native App Clients . . . . . . . . . . . 55 | ||||
| 9.3. Client Impersonation . . . . . . . . . . . . . . . . . . 55 | ||||
| 9.3.1. Impersonation of Native Apps . . . . . . . . . . . . 56 | ||||
| 9.4. Access Tokens . . . . . . . . . . . . . . . . . . . . . . 56 | ||||
| 9.4.1. Access Token Privilege Restriction . . . . . . . . . 57 | ||||
| 9.4.2. Access Token Replay Prevention . . . . . . . . . . . 57 | ||||
| 9.5. Refresh Tokens . . . . . . . . . . . . . . . . . . . . . 58 | ||||
| 9.6. Client Impersonating Resource Owner . . . . . . . . . . . 58 | ||||
| 9.7. Protecting Redirect-Based Flows . . . . . . . . . . . . . 59 | ||||
| 9.7.1. Loopback Redirect Considerations in Native Apps . . . 59 | ||||
| 9.7.2. HTTP 307 Redirect . . . . . . . . . . . . . . . . . . 60 | ||||
| 9.8. Authorization Codes . . . . . . . . . . . . . . . . . . . 61 | ||||
| 9.9. Request Confidentiality . . . . . . . . . . . . . . . . . 62 | ||||
| 9.10. Ensuring Endpoint Authenticity . . . . . . . . . . . . . 62 | ||||
| 9.11. Credentials-Guessing Attacks . . . . . . . . . . . . . . 63 | ||||
| 9.12. Phishing Attacks . . . . . . . . . . . . . . . . . . . . 63 | ||||
| 9.13. Fake External User-Agents in Native Apps . . . . . . . . 63 | ||||
| 9.14. Malicious External User-Agents in Native Apps . . . . . . 64 | ||||
| 9.15. Cross-Site Request Forgery . . . . . . . . . . . . . . . 64 | ||||
| 9.16. Clickjacking . . . . . . . . . . . . . . . . . . . . . . 65 | ||||
| 9.17. Code Injection and Input Validation . . . . . . . . . . . 66 | ||||
| 9.18. Open Redirectors . . . . . . . . . . . . . . . . . . . . 66 | ||||
| 9.18.1. Client as Open Redirector . . . . . . . . . . . . . 66 | ||||
| 9.18.2. Authorization Server as Open Redirector . . . . . . 66 | ||||
| 9.19. Authorization Server Mix-Up Mitigation in Native Apps . . 67 | ||||
| 9.20. Embedded User Agents in Native Apps . . . . . . . . . . . 67 | ||||
| 9.21. Other Recommendations . . . . . . . . . . . . . . . . . . 68 | ||||
| 10. Native Applications . . . . . . . . . . . . . . . . . . . . . 68 | ||||
| 10.1. Using Inter-App URI Communication for OAuth in Native | 10.1. Using Inter-App URI Communication for OAuth in Native | |||
| Apps . . . . . . . . . . . . . . . . . . . . . . . . . . 68 | Apps . . . . . . . . . . . . . . . . . . . . . . . . . . 69 | |||
| 10.2. Initiating the Authorization Request from a Native | 10.2. Initiating the Authorization Request from a Native | |||
| App . . . . . . . . . . . . . . . . . . . . . . . . . . 69 | App . . . . . . . . . . . . . . . . . . . . . . . . . . 70 | |||
| 10.3. Receiving the Authorization Response in a Native App . . 70 | 10.3. Receiving the Authorization Response in a Native App . . 71 | |||
| 10.3.1. Private-Use URI Scheme Redirection . . . . . . . . . 70 | 10.3.1. Private-Use URI Scheme Redirection . . . . . . . . . 71 | |||
| 10.3.2. Claimed "https" Scheme URI Redirection . . . . . . . 71 | 10.3.2. Claimed "https" Scheme URI Redirection . . . . . . . 72 | |||
| 10.3.3. Loopback Interface Redirection . . . . . . . . . . . 71 | 10.3.3. Loopback Interface Redirection . . . . . . . . . . . 72 | |||
| 11. Browser-Based Apps . . . . . . . . . . . . . . . . . . . . . 72 | 11. Browser-Based Apps . . . . . . . . . . . . . . . . . . . . . 73 | |||
| 12. Differences from OAuth 2.0 . . . . . . . . . . . . . . . . . 72 | 12. Differences from OAuth 2.0 . . . . . . . . . . . . . . . . . 73 | |||
| 13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 73 | 13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 74 | |||
| 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 73 | 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 74 | |||
| 14.1. Normative References . . . . . . . . . . . . . . . . . . 73 | 14.1. Normative References . . . . . . . . . . . . . . . . . . 74 | |||
| 14.2. Informative References . . . . . . . . . . . . . . . . . 76 | 14.2. Informative References . . . . . . . . . . . . . . . . . 77 | |||
| Appendix A. Augmented Backus-Naur Form (ABNF) Syntax . . . . . . 79 | Appendix A. Augmented Backus-Naur Form (ABNF) Syntax . . . . . . 80 | |||
| A.1. "client_id" Syntax . . . . . . . . . . . . . . . . . . . 79 | A.1. "client_id" Syntax . . . . . . . . . . . . . . . . . . . 81 | |||
| A.2. "client_secret" Syntax . . . . . . . . . . . . . . . . . 79 | A.2. "client_secret" Syntax . . . . . . . . . . . . . . . . . 81 | |||
| A.3. "response_type" Syntax . . . . . . . . . . . . . . . . . 80 | A.3. "response_type" Syntax . . . . . . . . . . . . . . . . . 81 | |||
| A.4. "scope" Syntax . . . . . . . . . . . . . . . . . . . . . 80 | A.4. "scope" Syntax . . . . . . . . . . . . . . . . . . . . . 81 | |||
| A.5. "state" Syntax . . . . . . . . . . . . . . . . . . . . . 80 | A.5. "state" Syntax . . . . . . . . . . . . . . . . . . . . . 81 | |||
| A.6. "redirect_uri" Syntax . . . . . . . . . . . . . . . . . . 80 | A.6. "redirect_uri" Syntax . . . . . . . . . . . . . . . . . . 81 | |||
| A.7. "error" Syntax . . . . . . . . . . . . . . . . . . . . . 80 | A.7. "error" Syntax . . . . . . . . . . . . . . . . . . . . . 81 | |||
| A.8. "error_description" Syntax . . . . . . . . . . . . . . . 80 | A.8. "error_description" Syntax . . . . . . . . . . . . . . . 82 | |||
| A.9. "error_uri" Syntax . . . . . . . . . . . . . . . . . . . 81 | A.9. "error_uri" Syntax . . . . . . . . . . . . . . . . . . . 82 | |||
| A.10. "grant_type" Syntax . . . . . . . . . . . . . . . . . . . 81 | A.10. "grant_type" Syntax . . . . . . . . . . . . . . . . . . . 82 | |||
| A.11. "code" Syntax . . . . . . . . . . . . . . . . . . . . . . 81 | A.11. "code" Syntax . . . . . . . . . . . . . . . . . . . . . . 82 | |||
| A.12. "access_token" Syntax . . . . . . . . . . . . . . . . . . 81 | A.12. "access_token" Syntax . . . . . . . . . . . . . . . . . . 82 | |||
| A.13. "token_type" Syntax . . . . . . . . . . . . . . . . . . . 81 | A.13. "token_type" Syntax . . . . . . . . . . . . . . . . . . . 82 | |||
| A.14. "expires_in" Syntax . . . . . . . . . . . . . . . . . . . 81 | A.14. "expires_in" Syntax . . . . . . . . . . . . . . . . . . . 82 | |||
| A.15. "refresh_token" Syntax . . . . . . . . . . . . . . . . . 81 | A.15. "refresh_token" Syntax . . . . . . . . . . . . . . . . . 83 | |||
| A.16. Endpoint Parameter Syntax . . . . . . . . . . . . . . . . 82 | A.16. Endpoint Parameter Syntax . . . . . . . . . . . . . . . . 83 | |||
| A.17. "code_verifier" Syntax . . . . . . . . . . . . . . . . . 82 | A.17. "code_verifier" Syntax . . . . . . . . . . . . . . . . . 83 | |||
| A.18. "code_challenge" Syntax . . . . . . . . . . . . . . . . . 82 | A.18. "code_challenge" Syntax . . . . . . . . . . . . . . . . . 83 | |||
| Appendix B. Use of application/x-www-form-urlencoded Media | Appendix B. Use of application/x-www-form-urlencoded Media | |||
| Type . . . . . . . . . . . . . . . . . . . . . . . . . . 82 | Type . . . . . . . . . . . . . . . . . . . . . . . . . . 83 | |||
| Appendix C. Extensions . . . . . . . . . . . . . . . . . . . . . 83 | Appendix C. Extensions . . . . . . . . . . . . . . . . . . . . . 84 | |||
| Appendix D. Acknowledgements . . . . . . . . . . . . . . . . . . 84 | Appendix D. Acknowledgements . . . . . . . . . . . . . . . . . . 86 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 84 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 86 | |||
| 1. Introduction | 1. Introduction | |||
| In the traditional client-server authentication model, the client | In the traditional client-server authentication model, the client | |||
| requests an access-restricted resource (protected resource) on the | requests an access-restricted resource (protected resource) on the | |||
| server by authenticating with the server using the resource owner's | server by authenticating with the server using the resource owner's | |||
| credentials. In order to provide third-party applications access to | credentials. In order to provide third-party applications access to | |||
| restricted resources, the resource owner shares its credentials with | restricted resources, the resource owner shares its credentials with | |||
| the third party. This creates several problems and limitations: | the third party. This creates several problems and limitations: | |||
| skipping to change at page 5, line 26 ¶ | skipping to change at page 5, line 26 ¶ | |||
| text. | text. | |||
| * Servers are required to support password authentication, despite | * Servers are required to support password authentication, despite | |||
| the security weaknesses inherent in passwords. | the security weaknesses inherent in passwords. | |||
| * Third-party applications gain overly broad access to the resource | * Third-party applications gain overly broad access to the resource | |||
| owner's protected resources, leaving resource owners without any | owner's protected resources, leaving resource owners without any | |||
| ability to restrict duration or access to a limited subset of | ability to restrict duration or access to a limited subset of | |||
| resources. | resources. | |||
| * Resource owners often reuse passwords with other unrelated | ||||
| services, despite best security practices. This password reuse | ||||
| means a vulnerability or exposure in one service may have security | ||||
| implications in completely unrelated services. | ||||
| * Resource owners cannot revoke access to an individual third party | * Resource owners cannot revoke access to an individual third party | |||
| without revoking access to all third parties, and must do so by | without revoking access to all third parties, and must do so by | |||
| changing the third party's password. | changing the third party's password. | |||
| * Compromise of any third-party application results in compromise of | * Compromise of any third-party application results in compromise of | |||
| the end-user's password and all of the data protected by that | the end-user's password and all of the data protected by that | |||
| password. | password. | |||
| OAuth addresses these issues by introducing an authorization layer | OAuth addresses these issues by introducing an authorization layer | |||
| and separating the role of the client from that of the resource | and separating the role of the client from that of the resource | |||
| owner. In OAuth, the client requests access to resources controlled | owner. In OAuth, the client requests access to resources controlled | |||
| by the resource owner and hosted by the resource server, and is | by the resource owner and hosted by the resource server. Instead of | |||
| issued a different set of credentials than those of the resource | using the resource owner's credentials to access protected resources, | |||
| owner. | the client obtains an access token - a credential representing a | |||
| specific set of access attributes such as scope and lifetime. Access | ||||
| Instead of using the resource owner's credentials to access protected | tokens are issued to clients by an authorization server with the | |||
| resources, the client obtains an access token - a string denoting a | ||||
| specific scope, lifetime, and other access attributes. Access tokens | ||||
| are issued to third-party clients by an authorization server with the | ||||
| approval of the resource owner. The client uses the access token to | approval of the resource owner. The client uses the access token to | |||
| access the protected resources hosted by the resource server. | access the protected resources hosted by the resource server. | |||
| For example, an end-user (resource owner) can grant a printing | For example, an end-user (resource owner) can grant a printing | |||
| service (client) access to her protected photos stored at a photo- | service (client) access to their protected photos stored at a photo- | |||
| sharing service (resource server), without sharing her username and | sharing service (resource server), without sharing their username and | |||
| password with the printing service. Instead, she authenticates | password with the printing service. Instead, they authenticates | |||
| directly with a server trusted by the photo-sharing service | directly with a server trusted by the photo-sharing service | |||
| (authorization server), which issues the printing service delegation- | (authorization server), which issues the printing service delegation- | |||
| specific credentials (access token). | specific credentials (access token). | |||
| This specification is designed for use with HTTP ([RFC7230]). The | This specification is designed for use with HTTP ([RFC7230]). The | |||
| use of OAuth over any protocol other than HTTP is out of scope. | use of OAuth over any protocol other than HTTP is out of scope. | |||
| Since the publication of the OAuth 2.0 Authorization Framework | Since the publication of the OAuth 2.0 Authorization Framework | |||
| ([RFC6749]) in October 2012, it has been updated by OAuth 2.0 for | ([RFC6749]) in October 2012, it has been updated by OAuth 2.0 for | |||
| Native Apps ([RFC8252]), OAuth Security Best Current Practice | Native Apps ([RFC8252]), OAuth Security Best Current Practice | |||
| skipping to change at page 6, line 38 ¶ | skipping to change at page 6, line 34 ¶ | |||
| OAuth defines four roles: | OAuth defines four roles: | |||
| "resource owner": An entity capable of granting access to a | "resource owner": An entity capable of granting access to a | |||
| protected resource. When the resource owner is a person, it is | protected resource. When the resource owner is a person, it is | |||
| referred to as an end-user. This is sometimes abbreviated as | referred to as an end-user. This is sometimes abbreviated as | |||
| "RO". | "RO". | |||
| "resource server": The server hosting the protected resources, | "resource server": The server hosting the protected resources, | |||
| capable of accepting and responding to protected resource requests | capable of accepting and responding to protected resource requests | |||
| using access tokens. This is sometimes abbreviated as "RS". | using access tokens. The resource server is often accessible via | |||
| an API. This is sometimes abbreviated as "RS". | ||||
| "client": An application making protected resource requests on | "client": An application making protected resource requests on | |||
| behalf of the resource owner and with its authorization. The term | behalf of the resource owner and with its authorization. The term | |||
| "client" does not imply any particular implementation | "client" does not imply any particular implementation | |||
| characteristics (e.g., whether the application executes on a | characteristics (e.g., whether the application executes on a | |||
| server, a desktop, or other devices). | server, a desktop, or other devices). | |||
| "authorization server": The server issuing access tokens to the | "authorization server": The server issuing access tokens to the | |||
| client after successfully authenticating the resource owner and | client after successfully authenticating the resource owner and | |||
| obtaining authorization. This is sometimes abbreviated as "AS". | obtaining authorization. This is sometimes abbreviated as "AS". | |||
| skipping to change at page 7, line 41 ¶ | skipping to change at page 7, line 45 ¶ | |||
| The abstract OAuth 2.1 flow illustrated in Figure 1 describes the | The abstract OAuth 2.1 flow illustrated in Figure 1 describes the | |||
| interaction between the four roles and includes the following steps: | interaction between the four roles and includes the following steps: | |||
| 1. The client requests authorization from the resource owner. The | 1. The client requests authorization from the resource owner. The | |||
| authorization request can be made directly to the resource owner | authorization request can be made directly to the resource owner | |||
| (as shown), or preferably indirectly via the authorization server | (as shown), or preferably indirectly via the authorization server | |||
| as an intermediary. | as an intermediary. | |||
| 2. The client receives an authorization grant, which is a credential | 2. The client receives an authorization grant, which is a credential | |||
| representing the resource owner's authorization, expressed using | representing the resource owner's authorization, expressed using | |||
| one of two grant types defined in this specification or using an | one of two authorization grant types defined in this | |||
| extension grant type. The authorization grant type depends on | specification or using an extension grant type. The | |||
| the method used by the client to request authorization and the | authorization grant type depends on the method used by the client | |||
| types supported by the authorization server. | to request authorization and the types supported by the | |||
| authorization server. | ||||
| 3. The client requests an access token by authenticating with the | 3. The client requests an access token by authenticating with the | |||
| authorization server and presenting the authorization grant. | authorization server and presenting the authorization grant. | |||
| 4. The authorization server authenticates the client and validates | 4. The authorization server authenticates the client and validates | |||
| the authorization grant, and if valid, issues an access token. | the authorization grant, and if valid, issues an access token. | |||
| 5. The client requests the protected resource from the resource | 5. The client requests the protected resource from the resource | |||
| server and authenticates by presenting the access token. | server and authenticates by presenting the access token. | |||
| skipping to change at page 8, line 26 ¶ | skipping to change at page 8, line 29 ¶ | |||
| 1.3. Authorization Grant | 1.3. Authorization Grant | |||
| An authorization grant is a credential representing the resource | An authorization grant is a credential representing the resource | |||
| owner's authorization (to access its protected resources) used by the | owner's authorization (to access its protected resources) used by the | |||
| client to obtain an access token. This specification defines two | client to obtain an access token. This specification defines two | |||
| grant types - authorization code and client credentials - as well as | grant types - authorization code and client credentials - as well as | |||
| an extensibility mechanism for defining additional types. | an extensibility mechanism for defining additional types. | |||
| 1.3.1. Authorization Code | 1.3.1. Authorization Code | |||
| The authorization code is obtained by using an authorization server | An authorization code is a temporary credential used to obtain an | |||
| as an intermediary between the client and resource owner. Instead of | access token. Instead of the client requesting authorization | |||
| requesting authorization directly from the resource owner, the client | directly from the resource owner, the client directs the resource | |||
| directs the resource owner to an authorization server (via its user- | owner to an authorization server (via its user-agent as defined in | |||
| agent as defined in [RFC7231]), which in turn directs the resource | [RFC7231]), which in turn directs the resource owner back to the | |||
| owner back to the client with the authorization code. | client with the authorization code. The client can then exchange the | |||
| authorization code for an access token. | ||||
| Before directing the resource owner back to the client with the | Before directing the resource owner back to the client with the | |||
| authorization code, the authorization server authenticates the | authorization code, the authorization server authenticates the | |||
| resource owner and obtains authorization. Because the resource owner | resource owner, and may request the resource owner's consent or | |||
| only authenticates with the authorization server, the resource | otherwise inform them of the client's request. Because the resource | |||
| owner's credentials are never shared with the client. | owner only authenticates with the authorization server, the resource | |||
| owner's credentials are never shared with the client, and the client | ||||
| does not need to have knowledge of any additional authentication | ||||
| steps such as multi-factor authentication or delegated accounts. | ||||
| The authorization code provides a few important security benefits, | The authorization code provides a few important security benefits, | |||
| such as the ability to authenticate the client, as well as the | such as the ability to authenticate the client, as well as the | |||
| transmission of the access token directly to the client without | transmission of the access token directly to the client without | |||
| passing it through the resource owner's user-agent and potentially | passing it through the resource owner's user-agent and potentially | |||
| exposing it to others, including the resource owner. | exposing it to others, including the resource owner. | |||
| 1.3.2. Client Credentials | 1.3.2. Client Credentials | |||
| The client credentials (or other forms of client authentication) can | The client credentials or other forms of client authentication (e.g. | |||
| be used as an authorization grant when the authorization scope is | a "client_secret" or a private key used to sign a JWT) can be used as | |||
| limited to the protected resources under the control of the client, | an authorization grant when the authorization scope is limited to the | |||
| or to protected resources previously arranged with the authorization | protected resources under the control of the client, or to protected | |||
| server. Client credentials are used as an authorization grant | resources previously arranged with the authorization server. Client | |||
| typically when the client is acting on its own behalf (the client is | credentials are used as an authorization grant typically when the | |||
| also the resource owner) or is requesting access to protected | client is acting on its own behalf (the client is also the resource | |||
| resources based on an authorization previously arranged with the | owner) or is requesting access to protected resources based on an | |||
| authorization server. | authorization previously arranged with the authorization server. | |||
| 1.4. Access Token | 1.4. Access Token | |||
| Access tokens are credentials used to access protected resources. An | Access tokens are credentials used to access protected resources. An | |||
| access token is a string representing an authorization issued to the | access token is a string representing an authorization issued to the | |||
| client. The string is opaque to the client, but depending on the | client. The string is considered opaque to the client, even if it | |||
| authorization server, may be parseable by the resource server. | has a structure. Depending on the authorization server, the access | |||
| token string may be parseable by the resource server. | ||||
| Tokens represent specific scopes and durations of access, granted by | Access tokens represent specific scopes and durations of access, | |||
| the resource owner, and enforced by the resource server and | granted by the resource owner, and enforced by the resource server | |||
| authorization server. | and authorization server. | |||
| The token may denote an identifier used to retrieve the authorization | The token may be used by the RS to retrieve the authorization | |||
| information or may self-contain the authorization information in a | information, or the token may self-contain the authorization | |||
| verifiable manner (i.e., a token string consisting of some data and a | information in a verifiable manner (i.e., a token string consisting | |||
| signature). One example of a structured token format is | of a signed data payload). One example of a token retrieval | |||
| mechanism is Token Introspection [RFC7662], in which the RS calls an | ||||
| endpoint on the AS to validate the token presented by the client. | ||||
| One example of a structured token format is | ||||
| [I-D.ietf-oauth-access-token-jwt], a method of encoding access token | [I-D.ietf-oauth-access-token-jwt], a method of encoding access token | |||
| data as a JSON Web Token [RFC7519]. | data as a JSON Web Token [RFC7519]. | |||
| Additional authentication credentials, which are beyond the scope of | Additional authentication credentials, which are beyond the scope of | |||
| this specification, may be required in order for the client to use a | this specification, may be required in order for the client to use an | |||
| token. This is typically referred to as a sender-constrained access | access token. This is typically referred to as a sender-constrained | |||
| token, such as Mutual TLS Access Tokens [RFC8705]. | access token, such as Mutual TLS Access Tokens [RFC8705]. | |||
| The access token provides an abstraction layer, replacing different | The access token provides an abstraction layer, replacing different | |||
| authorization constructs (e.g., username and password) with a single | authorization constructs (e.g., username and password) with a single | |||
| token understood by the resource server. This abstraction enables | token understood by the resource server. This abstraction enables | |||
| issuing access tokens more restrictive than the authorization grant | issuing access tokens more restrictive than the authorization grant | |||
| used to obtain them, as well as removing the resource server's need | used to obtain them, as well as removing the resource server's need | |||
| to understand a wide range of authentication methods. | to understand a wide range of authentication methods. | |||
| Access tokens can have different formats, structures, and methods of | Access tokens can have different formats, structures, and methods of | |||
| utilization (e.g., cryptographic properties) based on the resource | utilization (e.g., cryptographic properties) based on the resource | |||
| skipping to change at page 10, line 5 ¶ | skipping to change at page 10, line 20 ¶ | |||
| 1.5. Refresh Token | 1.5. Refresh Token | |||
| Refresh tokens are credentials used to obtain access tokens. Refresh | Refresh tokens are credentials used to obtain access tokens. Refresh | |||
| tokens are issued to the client by the authorization server and are | tokens are issued to the client by the authorization server and are | |||
| used to obtain a new access token when the current access token | used to obtain a new access token when the current access token | |||
| becomes invalid or expires, or to obtain additional access tokens | becomes invalid or expires, or to obtain additional access tokens | |||
| with identical or narrower scope (access tokens may have a shorter | with identical or narrower scope (access tokens may have a shorter | |||
| lifetime and fewer permissions than authorized by the resource | lifetime and fewer permissions than authorized by the resource | |||
| owner). Issuing a refresh token is optional at the discretion of the | owner). Issuing a refresh token is optional at the discretion of the | |||
| authorization server. If the authorization server issues a refresh | authorization server, and may be issued based on properties of the | |||
| token, it is included when issuing an access token (i.e., step (4) in | client, properties of the request, policies within the authorization | |||
| Figure 2). | server, or any other criteria. If the authorization server issues a | |||
| refresh token, it is included when issuing an access token (i.e., | ||||
| step (2) in Figure 2). | ||||
| A refresh token is a string representing the authorization granted to | A refresh token is a string representing the authorization granted to | |||
| the client by the resource owner. The string is usually opaque to | the client by the resource owner. The string is considered opaque to | |||
| the client. The token denotes an identifier used to retrieve the | the client. The refresh token may be an identifier used to retrieve | |||
| authorization information. Unlike access tokens, refresh tokens are | the authorization information or may encode this information into the | |||
| intended for use only with authorization servers and are never sent | string itself. Unlike access tokens, refresh tokens are intended for | |||
| to resource servers. | use only with authorization servers and are never sent to resource | |||
| servers. | ||||
| +--------+ +---------------+ | +--------+ +---------------+ | |||
| | |--(1)------- Authorization Grant --------->| | | | |--(1)------- Authorization Grant --------->| | | |||
| | | | | | | | | | | |||
| | |<-(2)----------- Access Token -------------| | | | |<-(2)----------- Access Token -------------| | | |||
| | | & Refresh Token | | | | | & Refresh Token | | | |||
| | | | | | | | | | | |||
| | | +----------+ | | | | | +----------+ | | | |||
| | |--(3)---- Access Token ---->| | | | | | |--(3)---- Access Token ---->| | | | | |||
| | | | | | | | | | | | | | | |||
| | |<-(4)- Protected Resource --| Resource | | Authorization | | | |<-(4)- Protected Resource --| Resource | | Authorization | | |||
| | Client | | Server | | Server | | | Client | | Server | | Server | | |||
| | |--(5)---- Access Token ---->| | | | | | |--(5)---- Access Token ---->| | | | | |||
| | | | | | | | | | | | | | | |||
| | |<-(6)- Invalid Token Error -| | | | | | |<-(6)- Invalid Token Error -| | | | | |||
| | | +----------+ | | | | | +----------+ | | | |||
| | | | | | | | | | | |||
| | |--(7)----------- Refresh Token ----------->| | | | |--(7)----------- Refresh Token ----------->| | | |||
| | | | | | | | | | | |||
| | |<-(8)----------- Access Token -------------| | | | |<-(8)----------- Access Token -------------| | | |||
| +--------+ & Optional Refresh Token +---------------+ | +--------+ & Optional Refresh Token +---------------+ | |||
| Figure 2: Refreshing an Expired Access Token | Figure 2: Refreshing an Expired Access Token | |||
| The flow illustrated in Figure 2 includes the following steps: | The flow illustrated in Figure 2 includes the following steps: | |||
| 1. The client requests an access token by authenticating with the | 1. The client requests an access token by authenticating with the | |||
| authorization server and presenting an authorization grant. | authorization server and presenting an authorization grant. | |||
| 2. The authorization server authenticates the client and validates | 2. The authorization server authenticates the client and validates | |||
| the authorization grant, and if valid, issues an access token and | the authorization grant, and if valid, issues an access token and | |||
| optionally a refresh token. | optionally a refresh token. | |||
| skipping to change at page 11, line 29 ¶ | skipping to change at page 12, line 19 ¶ | |||
| 8. The authorization server authenticates the client and validates | 8. The authorization server authenticates the client and validates | |||
| the refresh token, and if valid, issues a new access token (and, | the refresh token, and if valid, issues a new access token (and, | |||
| optionally, a new refresh token). | optionally, a new refresh token). | |||
| 1.6. TLS Version | 1.6. TLS Version | |||
| Whenever Transport Layer Security (TLS) is used by this | Whenever Transport Layer Security (TLS) is used by this | |||
| specification, the appropriate version (or versions) of TLS will vary | specification, the appropriate version (or versions) of TLS will vary | |||
| over time, based on the widespread deployment and known security | over time, based on the widespread deployment and known security | |||
| vulnerabilities. At the time of this writing, TLS version 1.3 | vulnerabilities. Refer to [BCP195] for up to date recommendations on | |||
| [RFC8446] is the most recent version. | transport layer security. | |||
| Implementations MAY also support additional transport-layer security | Implementations MAY also support additional transport-layer security | |||
| mechanisms that meet their security requirements. | mechanisms that meet their security requirements. | |||
| 1.7. HTTP Redirections | 1.7. HTTP Redirections | |||
| This specification makes extensive use of HTTP redirections, in which | This specification makes extensive use of HTTP redirections, in which | |||
| the client or the authorization server directs the resource owner's | the client or the authorization server directs the resource owner's | |||
| user-agent to another destination. While the examples in this | user-agent to another destination. While the examples in this | |||
| specification show the use of the HTTP 302 status code, any other | specification show the use of the HTTP 302 status code, any other | |||
| skipping to change at page 12, line 9 ¶ | skipping to change at page 12, line 44 ¶ | |||
| 1.8. Interoperability | 1.8. Interoperability | |||
| OAuth 2.1 provides a rich authorization framework with well-defined | OAuth 2.1 provides a rich authorization framework with well-defined | |||
| security properties. | security properties. | |||
| This specification leaves a few required components partially or | This specification leaves a few required components partially or | |||
| fully undefined (e.g., client registration, authorization server | fully undefined (e.g., client registration, authorization server | |||
| capabilities, endpoint discovery). Some of these behaviors are | capabilities, endpoint discovery). Some of these behaviors are | |||
| defined in optional extensions which implementations can choose to | defined in optional extensions which implementations can choose to | |||
| use. | use, such as: | |||
| * [RFC8414]: Authorization Server Metadata, defining an endpoint | ||||
| clients can use to look up the information needed to interact with | ||||
| a particular OAuth server | ||||
| * [RFC7591]: Dynamic Client Registration, providing a mechanism for | ||||
| programmatically registering clients with an authorization server | ||||
| * [RFC7592]: Dynamic Client Management, providing a mechanism for | ||||
| updating dynamically registered client information | ||||
| * [RFC7662]: Token Introspection, defining a mechanism for resource | ||||
| servers to obtain information about access tokens | ||||
| Please refer to Appendix C for a list of current known extensions at | Please refer to Appendix C for a list of current known extensions at | |||
| the time of this publication. | the time of this publication. | |||
| 1.9. Notational Conventions | 1.9. Compatibility with OAuth 2.0 | |||
| OAuth 2.1 is compatible with OAuth 2.0 with the extensions and | ||||
| restrictions from known best current practices applied. | ||||
| Specifically, features not specified in OAuth 2.0 core, such as PKCE, | ||||
| are required in OAuth 2.1. Additionally, some features available in | ||||
| OAuth 2.0, such as the Implicit or Resource Owner Credentials grant | ||||
| types, are not specified in OAuth 2.1. Furthermore, some behaviors | ||||
| allowed in OAuth 2.0 are restricted in OAuth 2.1, such as the strict | ||||
| string matching of redirect URIs required by OAuth 2.1. | ||||
| See Section 12 for more details on the differences from OAuth 2.0. | ||||
| 1.10. Notational Conventions | ||||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| This specification uses the Augmented Backus-Naur Form (ABNF) | This specification uses the Augmented Backus-Naur Form (ABNF) | |||
| notation of [RFC5234]. Additionally, the rule URI-reference is | notation of [RFC5234]. Additionally, the rule URI-reference is | |||
| included from "Uniform Resource Identifier (URI): Generic Syntax" | included from "Uniform Resource Identifier (URI): Generic Syntax" | |||
| [RFC3986]. | [RFC3986]. | |||
| Certain security-related terms are to be understood in the sense | Certain security-related terms are to be understood in the sense | |||
| defined in [RFC4949]. These terms include, but are not limited to, | defined in [RFC4949]. These terms include, but are not limited to, | |||
| "attack", "authentication", "authorization", "certificate", | "attack", "authentication", "authorization", "certificate", | |||
| "confidentiality", "credential", "encryption", "identity", "sign", | "confidentiality", "credential", "encryption", "identity", "sign", | |||
| "signature", "trust", "validate", and "verify". | "signature", "trust", "validate", and "verify". | |||
| The term "payload" is to be interpreted as described in Section 3.3 | ||||
| of [RFC7231]. | ||||
| Unless otherwise noted, all the protocol parameter names and values | Unless otherwise noted, all the protocol parameter names and values | |||
| are case sensitive. | are case sensitive. | |||
| 2. Client Registration | 2. Client Registration | |||
| Before initiating the protocol, the client registers with the | Before initiating the protocol, the client must establish its | |||
| authorization server. The means through which the client registers | registration with the authorization server. The means through which | |||
| with the authorization server are beyond the scope of this | the client registers with the authorization server are beyond the | |||
| specification but typically involve end-user interaction with an HTML | scope of this specification but typically involve the client | |||
| registration form, or by using Dynamic Client Registration | developer manually registering the client at the authorization | |||
| server's website after creating an account and agreeing to the | ||||
| service's Terms of Service, or by using Dynamic Client Registration | ||||
| ([RFC7591]). | ([RFC7591]). | |||
| Client registration does not require a direct interaction between the | Client registration does not require a direct interaction between the | |||
| client and the authorization server. When supported by the | client and the authorization server. When supported by the | |||
| authorization server, registration can rely on other means for | authorization server, registration can rely on other means for | |||
| establishing trust and obtaining the required client properties | establishing trust and obtaining the required client properties | |||
| (e.g., redirect URI, client type). For example, registration can be | (e.g., redirect URI, client type). For example, registration can be | |||
| accomplished using a self-issued or third-party-issued assertion, or | accomplished using a self-issued or third-party-issued assertion, or | |||
| by the authorization server performing client discovery using a | by the authorization server performing client discovery using a | |||
| trusted channel. | trusted channel. | |||
| skipping to change at page 15, line 7 ¶ | skipping to change at page 16, line 34 ¶ | |||
| The client identifier string size is left undefined by this | The client identifier string size is left undefined by this | |||
| specification. The client should avoid making assumptions about the | specification. The client should avoid making assumptions about the | |||
| identifier size. The authorization server SHOULD document the size | identifier size. The authorization server SHOULD document the size | |||
| of any identifier it issues. | of any identifier it issues. | |||
| Authorization servers SHOULD NOT allow clients to choose or influence | Authorization servers SHOULD NOT allow clients to choose or influence | |||
| their "client_id" value. See Section 9.6 for details. | their "client_id" value. See Section 9.6 for details. | |||
| 2.3. Client Authentication | 2.3. Client Authentication | |||
| If the client has credentials, (is a confidential or credentialed | If the client type is confidential, the client and authorization | |||
| client), the client and authorization server establish a client | server establish a client authentication method suitable for the | |||
| authentication method suitable for the security requirements of the | security requirements of the authorization server. The authorization | |||
| authorization server. The authorization server MAY accept any form | server MAY accept any form of client authentication meeting its | |||
| of client authentication meeting its security requirements. | security requirements. | |||
| Confidential and credentialed clients are typically issued (or | Confidential clients are typically issued (or establish) a set of | |||
| establish) a set of client credentials used for authenticating with | client credentials used for authenticating with the authorization | |||
| the authorization server (e.g., password, public/private key pair). | server (e.g., password, public/private key pair). | |||
| Authorization servers SHOULD use client authentication if possible. | Authorization servers SHOULD use client authentication if possible. | |||
| It is RECOMMENDED to use asymmetric (public-key based) methods for | It is RECOMMENDED to use asymmetric (public-key based) methods for | |||
| client authentication such as mTLS [RFC8705] or "private_key_jwt" | client authentication such as mTLS [RFC8705] or "private_key_jwt" | |||
| [OpenID]. When asymmetric methods for client authentication are | [OpenID]. When asymmetric methods for client authentication are | |||
| used, authorization servers do not need to store sensitive symmetric | used, authorization servers do not need to store sensitive symmetric | |||
| keys, making these methods more robust against a number of attacks. | keys, making these methods more robust against a number of attacks. | |||
| The authorization server MAY establish a client authentication method | The authorization server MAY establish a client authentication method | |||
| skipping to change at page 21, line 7 ¶ | skipping to change at page 22, line 35 ¶ | |||
| The client MUST use the HTTP "POST" method when making access token | The client MUST use the HTTP "POST" method when making access token | |||
| requests. | requests. | |||
| Parameters sent without a value MUST be treated as if they were | Parameters sent without a value MUST be treated as if they were | |||
| omitted from the request. The authorization server MUST ignore | omitted from the request. The authorization server MUST ignore | |||
| unrecognized request parameters. Request and response parameters | unrecognized request parameters. Request and response parameters | |||
| defined by this specification MUST NOT be included more than once. | defined by this specification MUST NOT be included more than once. | |||
| 3.2.1. Client Authentication | 3.2.1. Client Authentication | |||
| Confidential or credentialed clients client MUST authenticate with | Confidential clients or other clients issued client credentials MUST | |||
| the authorization server as described in Section 2.3 when making | authenticate with the authorization server as described in | |||
| requests to the token endpoint. Client authentication is used for: | Section 2.3 when making requests to the token endpoint. Client | |||
| authentication is used for: | ||||
| * Enforcing the binding of refresh tokens and authorization codes to | * Enforcing the binding of refresh tokens and authorization codes to | |||
| the client they were issued to. Client authentication is critical | the client they were issued to. Client authentication is critical | |||
| when an authorization code is transmitted to the redirection | when an authorization code is transmitted to the redirection | |||
| endpoint over an insecure channel. | endpoint over an insecure channel. | |||
| * Recovering from a compromised client by disabling the client or | * Recovering from a compromised client by disabling the client or | |||
| changing its credentials, thus preventing an attacker from abusing | changing its credentials, thus preventing an attacker from abusing | |||
| stolen refresh tokens. Changing a single set of client | stolen refresh tokens. Changing a single set of client | |||
| credentials is significantly faster than revoking an entire set of | credentials is significantly faster than revoking an entire set of | |||
| skipping to change at page 22, line 16 ¶ | skipping to change at page 23, line 44 ¶ | |||
| authorization, the authorization server MUST either process the | authorization, the authorization server MUST either process the | |||
| request using a pre-defined default value or fail the request | request using a pre-defined default value or fail the request | |||
| indicating an invalid scope. The authorization server SHOULD | indicating an invalid scope. The authorization server SHOULD | |||
| document its scope requirements and default value (if defined). | document its scope requirements and default value (if defined). | |||
| 4. Obtaining Authorization | 4. Obtaining Authorization | |||
| To request an access token, the client obtains authorization from the | To request an access token, the client obtains authorization from the | |||
| resource owner. The authorization is expressed in the form of an | resource owner. The authorization is expressed in the form of an | |||
| authorization grant, which the client uses to request the access | authorization grant, which the client uses to request the access | |||
| token. OAuth defines two grant types: authorization code and client | token. OAuth defines two authorization grant types: authorization | |||
| credentials. It also provides an extension mechanism for defining | code and client credentials. It also provides an extension mechanism | |||
| additional grant types. | for defining additional grant types. | |||
| 4.1. Authorization Code Grant | 4.1. Authorization Code Grant | |||
| The authorization code grant type is used to obtain both access | The authorization code grant type is used to obtain both access | |||
| tokens and refresh tokens. | tokens and refresh tokens. | |||
| Since this is a redirect-based flow, the client must be capable of | Since this is a redirect-based flow, the client must be capable of | |||
| interacting with the resource owner's user-agent (typically a web | interacting with the resource owner's user-agent (typically a web | |||
| browser) and capable of receiving incoming requests (via redirection) | browser) and capable of receiving incoming requests (via redirection) | |||
| from the authorization server. | from the authorization server. | |||
| skipping to change at page 27, line 25 ¶ | skipping to change at page 28, line 25 ¶ | |||
| redirect URI using the "application/x-www-form-urlencoded" format, | redirect URI using the "application/x-www-form-urlencoded" format, | |||
| per Appendix B: | per Appendix B: | |||
| "code": REQUIRED. The authorization code generated by the | "code": REQUIRED. The authorization code generated by the | |||
| authorization server. The authorization code MUST expire shortly | authorization server. The authorization code MUST expire shortly | |||
| after it is issued to mitigate the risk of leaks. A maximum | after it is issued to mitigate the risk of leaks. A maximum | |||
| authorization code lifetime of 10 minutes is RECOMMENDED. The | authorization code lifetime of 10 minutes is RECOMMENDED. The | |||
| client MUST NOT use the authorization code more than once. If an | client MUST NOT use the authorization code more than once. If an | |||
| authorization code is used more than once, the authorization | authorization code is used more than once, the authorization | |||
| server MUST deny the request and SHOULD revoke (when possible) all | server MUST deny the request and SHOULD revoke (when possible) all | |||
| tokens previously issued based on that authorization code. The | access tokens and refresh tokens previously issued based on that | |||
| authorization code is bound to the client identifier and redirect | authorization code. The authorization code is bound to the client | |||
| URI. | identifier and redirect URI. | |||
| "state": REQUIRED if the "state" parameter was present in the client | "state": REQUIRED if the "state" parameter was present in the client | |||
| authorization request. The exact value received from the client. | authorization request. The exact value received from the client. | |||
| For example, the authorization server redirects the user-agent by | For example, the authorization server redirects the user-agent by | |||
| sending the following HTTP response: | sending the following HTTP response: | |||
| HTTP/1.1 302 Found | HTTP/1.1 302 Found | |||
| Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA | Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA | |||
| &state=xyz | &state=xyz | |||
| skipping to change at page 30, line 10 ¶ | skipping to change at page 31, line 10 ¶ | |||
| sending the following HTTP response: | sending the following HTTP response: | |||
| HTTP/1.1 302 Found | HTTP/1.1 302 Found | |||
| Location: https://client.example.com/cb?error=access_denied&state=xyz | Location: https://client.example.com/cb?error=access_denied&state=xyz | |||
| 4.1.3. Access Token Request | 4.1.3. Access Token Request | |||
| The client makes a request to the token endpoint by sending the | The client makes a request to the token endpoint by sending the | |||
| following parameters using the "application/x-www-form-urlencoded" | following parameters using the "application/x-www-form-urlencoded" | |||
| format per Appendix B with a character encoding of UTF-8 in the HTTP | format per Appendix B with a character encoding of UTF-8 in the HTTP | |||
| request entity-body: | request payload: | |||
| "grant_type": REQUIRED. Value MUST be set to "authorization_code". | "grant_type": REQUIRED. Value MUST be set to "authorization_code". | |||
| "code": REQUIRED. The authorization code received from the | "code": REQUIRED. The authorization code received from the | |||
| authorization server. | authorization server. | |||
| "redirect_uri": REQUIRED, if the "redirect_uri" parameter was | "redirect_uri": REQUIRED, if the "redirect_uri" parameter was | |||
| included in the authorization request as described in | included in the authorization request as described in | |||
| Section 4.1.1, and their values MUST be identical. | Section 4.1.1, and their values MUST be identical. | |||
| "client_id": REQUIRED, if the client is not authenticating with the | "client_id": REQUIRED, if the client is not authenticating with the | |||
| authorization server as described in Section 3.2.1. | authorization server as described in Section 3.2.1. | |||
| "code_verifier": REQUIRED, if the "code_challenge" parameter was | "code_verifier": REQUIRED, if the "code_challenge" parameter was | |||
| included in the authorization request. MUST NOT be used | included in the authorization request. MUST NOT be used | |||
| otherwise. The original code verifier string. | otherwise. The original code verifier string. | |||
| Confidential or credentialed clients MUST authenticate with the | If the client type is confidential or the client was issued client | |||
| authorization server as described in Section 3.2.1. | credentials (or assigned other authentication requirements), the | |||
| client MUST authenticate with the authorization server as described | ||||
| in Section 3.2.1. | ||||
| For example, the client makes the following HTTP request using TLS | For example, the client makes the following HTTP request using TLS | |||
| (with extra line breaks for display purposes only): | (with extra line breaks for display purposes only): | |||
| POST /token HTTP/1.1 | POST /token HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW | Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA | grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA | |||
| &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb | &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb | |||
| &code_verifier=3641a2d12d66101249cdf7a79c000c1f8c05d2aafcf14bf146497bed | &code_verifier=3641a2d12d66101249cdf7a79c000c1f8c05d2aafcf14bf146497bed | |||
| The authorization server MUST: | The authorization server MUST: | |||
| * require client authentication for confidential and credentialed | * require client authentication for confidential clients or for any | |||
| clients (or clients with other authentication requirements), | client that was issued client credentials (or with other | |||
| authentication requirements), | ||||
| * authenticate the client if client authentication is included, | * authenticate the client if client authentication is included, | |||
| * ensure that the authorization code was issued to the authenticated | * ensure that the authorization code was issued to the authenticated | |||
| confidential or credentialed client, or if the client is public, | confidential client, or if the client is public, ensure that the | |||
| ensure that the code was issued to "client_id" in the request, | code was issued to "client_id" in the request, | |||
| * verify that the authorization code is valid, | * verify that the authorization code is valid, | |||
| * verify that the "code_verifier" parameter is present if and only | * verify that the "code_verifier" parameter is present if and only | |||
| if a "code_challenge" parameter was present in the authorization | if a "code_challenge" parameter was present in the authorization | |||
| request, | request, | |||
| * if a "code_verifier" is present, verify the "code_verifier" by | * if a "code_verifier" is present, verify the "code_verifier" by | |||
| calculating the code challenge from the received "code_verifier" | calculating the code challenge from the received "code_verifier" | |||
| and comparing it with the previously associated "code_challenge", | and comparing it with the previously associated "code_challenge", | |||
| skipping to change at page 32, line 6 ¶ | skipping to change at page 33, line 15 ¶ | |||
| 4.2. Client Credentials Grant | 4.2. Client Credentials Grant | |||
| The client can request an access token using only its client | The client can request an access token using only its client | |||
| credentials (or other supported means of authentication) when the | credentials (or other supported means of authentication) when the | |||
| client is requesting access to the protected resources under its | client is requesting access to the protected resources under its | |||
| control, or those of another resource owner that have been previously | control, or those of another resource owner that have been previously | |||
| arranged with the authorization server (the method of which is beyond | arranged with the authorization server (the method of which is beyond | |||
| the scope of this specification). | the scope of this specification). | |||
| The client credentials grant type MUST only be used by confidential | The client credentials grant type MUST only be used by confidential | |||
| or credentialed clients. | clients. | |||
| +---------+ +---------------+ | +---------+ +---------------+ | |||
| | | | | | | | | | | |||
| | |>--(1)- Client Authentication --->| Authorization | | | |>--(1)- Client Authentication --->| Authorization | | |||
| | Client | | Server | | | Client | | Server | | |||
| | |<--(2)---- Access Token ---------<| | | | |<--(2)---- Access Token ---------<| | | |||
| | | | | | | | | | | |||
| +---------+ +---------------+ | +---------+ +---------------+ | |||
| Figure 4: Client Credentials Flow | Figure 4: Client Credentials Flow | |||
| skipping to change at page 32, line 36 ¶ | skipping to change at page 33, line 45 ¶ | |||
| 4.2.1. Authorization Request and Response | 4.2.1. Authorization Request and Response | |||
| Since the client authentication is used as the authorization grant, | Since the client authentication is used as the authorization grant, | |||
| no additional authorization request is needed. | no additional authorization request is needed. | |||
| 4.2.2. Access Token Request | 4.2.2. Access Token Request | |||
| The client makes a request to the token endpoint by adding the | The client makes a request to the token endpoint by adding the | |||
| following parameters using the "application/x-www-form-urlencoded" | following parameters using the "application/x-www-form-urlencoded" | |||
| format per Appendix B with a character encoding of UTF-8 in the HTTP | format per Appendix B with a character encoding of UTF-8 in the HTTP | |||
| request entity-body: | request payload: | |||
| "grant_type": REQUIRED. Value MUST be set to "client_credentials". | "grant_type": REQUIRED. Value MUST be set to "client_credentials". | |||
| "scope": OPTIONAL. The scope of the access request as described by | "scope": OPTIONAL. The scope of the access request as described by | |||
| Section 3.3. | Section 3.3. | |||
| The client MUST authenticate with the authorization server as | The client MUST authenticate with the authorization server as | |||
| described in Section 3.2.1. | described in Section 3.2.1. | |||
| For example, the client makes the following HTTP request using | For example, the client makes the following HTTP request using | |||
| skipping to change at page 34, line 31 ¶ | skipping to change at page 35, line 37 ¶ | |||
| If the access token request is valid and authorized, the | If the access token request is valid and authorized, the | |||
| authorization server issues an access token and optional refresh | authorization server issues an access token and optional refresh | |||
| token as described in Section 5.1. If the request failed client | token as described in Section 5.1. If the request failed client | |||
| authentication or is invalid, the authorization server returns an | authentication or is invalid, the authorization server returns an | |||
| error response as described in Section 5.2. | error response as described in Section 5.2. | |||
| 5.1. Successful Response | 5.1. Successful Response | |||
| The authorization server issues an access token and optional refresh | The authorization server issues an access token and optional refresh | |||
| token, and constructs the response by adding the following parameters | token, and constructs the response by adding the following parameters | |||
| to the entity-body of the HTTP response with a 200 (OK) status code: | to the payload of the HTTP response with a 200 (OK) status code: | |||
| "access_token": REQUIRED. The access token issued by the | "access_token": REQUIRED. The access token issued by the | |||
| authorization server. | authorization server. | |||
| "token_type": REQUIRED. The type of the token issued as described | "token_type": REQUIRED. The type of the access token issued as | |||
| in Section 7.1. Value is case insensitive. | described in Section 7.1. Value is case insensitive. | |||
| "expires_in": RECOMMENDED. The lifetime in seconds of the access | "expires_in": RECOMMENDED. The lifetime in seconds of the access | |||
| token. For example, the value "3600" denotes that the access | token. For example, the value "3600" denotes that the access | |||
| token will expire in one hour from the time the response was | token will expire in one hour from the time the response was | |||
| generated. If omitted, the authorization server SHOULD provide | generated. If omitted, the authorization server SHOULD provide | |||
| the expiration time via other means or document the default value. | the expiration time via other means or document the default value. | |||
| "refresh_token": OPTIONAL. The refresh token, which can be used to | "refresh_token": OPTIONAL. The refresh token, which can be used to | |||
| obtain new access tokens using the same authorization grant as | obtain new access tokens using the same authorization grant as | |||
| described in Section 6. | described in Section 6. | |||
| "scope": OPTIONAL, if identical to the scope requested by the | "scope": OPTIONAL, if identical to the scope requested by the | |||
| client; otherwise, REQUIRED. The scope of the access token as | client; otherwise, REQUIRED. The scope of the access token as | |||
| described by Section 3.3. | described by Section 3.3. | |||
| The parameters are included in the entity-body of the HTTP response | The parameters are included in the payload of the HTTP response using | |||
| using the "application/json" media type as defined by [RFC7159]. The | the "application/json" media type as defined by [RFC7159]. The | |||
| parameters are serialized into a JavaScript Object Notation (JSON) | parameters are serialized into a JavaScript Object Notation (JSON) | |||
| structure by adding each parameter at the highest structure level. | structure by adding each parameter at the highest structure level. | |||
| Parameter names and string values are included as JSON strings. | Parameter names and string values are included as JSON strings. | |||
| Numerical values are included as JSON numbers. The order of | Numerical values are included as JSON numbers. The order of | |||
| parameters does not matter and can vary. | parameters does not matter and can vary. | |||
| The authorization server MUST include the HTTP "Cache-Control" | The authorization server MUST include the HTTP "Cache-Control" | |||
| response header field [RFC7234] with a value of "no-store" in any | response header field [RFC7234] with a value of "no-store" in any | |||
| response containing tokens, credentials, or other sensitive | response containing tokens, credentials, or other sensitive | |||
| information, as well as the "Pragma" response header field [RFC7234] | information, as well as the "Pragma" response header field [RFC7234] | |||
| skipping to change at page 37, line 5 ¶ | skipping to change at page 38, line 10 ¶ | |||
| the "error_description" parameter MUST NOT include characters | the "error_description" parameter MUST NOT include characters | |||
| outside the set %x20-21 / %x23-5B / %x5D-7E. | outside the set %x20-21 / %x23-5B / %x5D-7E. | |||
| "error_uri": OPTIONAL. A URI identifying a human-readable web page | "error_uri": OPTIONAL. A URI identifying a human-readable web page | |||
| with information about the error, used to provide the client | with information about the error, used to provide the client | |||
| developer with additional information about the error. Values for | developer with additional information about the error. Values for | |||
| the "error_uri" parameter MUST conform to the URI-reference syntax | the "error_uri" parameter MUST conform to the URI-reference syntax | |||
| and thus MUST NOT include characters outside the set %x21 / | and thus MUST NOT include characters outside the set %x21 / | |||
| %x23-5B / %x5D-7E. | %x23-5B / %x5D-7E. | |||
| The parameters are included in the entity-body of the HTTP response | The parameters are included in the payload of the HTTP response using | |||
| using the "application/json" media type as defined by [RFC7159]. The | the "application/json" media type as defined by [RFC7159]. The | |||
| parameters are serialized into a JSON structure by adding each | parameters are serialized into a JSON structure by adding each | |||
| parameter at the highest structure level. Parameter names and string | parameter at the highest structure level. Parameter names and string | |||
| values are included as JSON strings. Numerical values are included | values are included as JSON strings. Numerical values are included | |||
| as JSON numbers. The order of parameters does not matter and can | as JSON numbers. The order of parameters does not matter and can | |||
| vary. | vary. | |||
| For example: | For example: | |||
| HTTP/1.1 400 Bad Request | HTTP/1.1 400 Bad Request | |||
| Content-Type: application/json | Content-Type: application/json | |||
| skipping to change at page 37, line 43 ¶ | skipping to change at page 38, line 48 ¶ | |||
| If refresh tokens are issued, those refresh tokens MUST be bound to | If refresh tokens are issued, those refresh tokens MUST be bound to | |||
| the scope and resource servers as consented by the resource owner. | the scope and resource servers as consented by the resource owner. | |||
| This is to prevent privilege escalation by the legitimate client and | This is to prevent privilege escalation by the legitimate client and | |||
| reduce the impact of refresh token leakage. | reduce the impact of refresh token leakage. | |||
| If the authorization server issued a refresh token to the client, the | If the authorization server issued a refresh token to the client, the | |||
| client makes a refresh request to the token endpoint by adding the | client makes a refresh request to the token endpoint by adding the | |||
| following parameters using the "application/x-www-form-urlencoded" | following parameters using the "application/x-www-form-urlencoded" | |||
| format per Appendix B with a character encoding of UTF-8 in the HTTP | format per Appendix B with a character encoding of UTF-8 in the HTTP | |||
| request entity-body: | request payload: | |||
| "grant_type": REQUIRED. Value MUST be set to "refresh_token". | "grant_type": REQUIRED. Value MUST be set to "refresh_token". | |||
| "refresh_token": REQUIRED. The refresh token issued to the client. | "refresh_token": REQUIRED. The refresh token issued to the client. | |||
| "scope": OPTIONAL. The scope of the access request as described by | "scope": OPTIONAL. The scope of the access request as described by | |||
| Section 3.3. The requested scope MUST NOT include any scope not | Section 3.3. The requested scope MUST NOT include any scope not | |||
| originally granted by the resource owner, and if omitted is | originally granted by the resource owner, and if omitted is | |||
| treated as equal to the scope originally granted by the resource | treated as equal to the scope originally granted by the resource | |||
| owner. | owner. | |||
| Because refresh tokens are typically long-lasting credentials used to | Because refresh tokens are typically long-lasting credentials used to | |||
| request additional access tokens, the refresh token is bound to the | request additional access tokens, the refresh token is bound to the | |||
| client to which it was issued. Confidential or credentialed clients | client to which it was issued. If the client type is confidential or | |||
| MUST authenticate with the authorization server as described in | the client was issued client credentials (or assigned other | |||
| Section 3.2.1. | authentication requirements), the client MUST authenticate with the | |||
| authorization server as described in Section 3.2.1. | ||||
| For example, the client makes the following HTTP request using | For example, the client makes the following HTTP request using | |||
| transport-layer security (with extra line breaks for display purposes | transport-layer security (with extra line breaks for display purposes | |||
| only): | only): | |||
| POST /token HTTP/1.1 | POST /token HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW | Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA | grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA | |||
| The authorization server MUST: | The authorization server MUST: | |||
| * require client authentication for confidential or credentialed | * require client authentication for confidential clients or for any | |||
| clients | client that was issued client credentials (or with other | |||
| authentication requirements), | ||||
| * authenticate the client if client authentication is included and | * authenticate the client if client authentication is included and | |||
| ensure that the refresh token was issued to the authenticated | ensure that the refresh token was issued to the authenticated | |||
| client, and | client, and | |||
| * validate the refresh token. | * validate the refresh token. | |||
| 6.1. Refresh Token Protection | 6.1. Refresh Token Protection | |||
| Authorization servers SHOULD utilize one of these methods to detect | Authorization servers SHOULD utilize one of these methods to detect | |||
| skipping to change at page 42, line 7 ¶ | skipping to change at page 43, line 7 ¶ | |||
| b64token = 1*( ALPHA / DIGIT / | b64token = 1*( ALPHA / DIGIT / | |||
| "-" / "." / "_" / "~" / "+" / "/" ) *"=" | "-" / "." / "_" / "~" / "+" / "/" ) *"=" | |||
| credentials = "Bearer" 1*SP b64token | credentials = "Bearer" 1*SP b64token | |||
| Clients SHOULD make authenticated requests with a bearer token using | Clients SHOULD make authenticated requests with a bearer token using | |||
| the "Authorization" request header field with the "Bearer" HTTP | the "Authorization" request header field with the "Bearer" HTTP | |||
| authorization scheme. Resource servers MUST support this method. | authorization scheme. Resource servers MUST support this method. | |||
| 7.2.1.2. Form-Encoded Body Parameter | 7.2.1.2. Form-Encoded Body Parameter | |||
| When sending the access token in the HTTP request entity-body, the | When sending the access token in the HTTP request payload, the client | |||
| client adds the access token to the request-body using the | adds the access token to the request-body using the "access_token" | |||
| "access_token" parameter. The client MUST NOT use this method unless | parameter. The client MUST NOT use this method unless all of the | |||
| all of the following conditions are met: | following conditions are met: | |||
| * The HTTP request entity-header includes the "Content-Type" header | * The HTTP request entity-header includes the "Content-Type" header | |||
| field set to "application/x-www-form-urlencoded". | field set to "application/x-www-form-urlencoded". | |||
| * The entity-body follows the encoding requirements of the | * The payload follows the encoding requirements of the "application/ | |||
| "application/x-www-form-urlencoded" content-type as defined by | x-www-form-urlencoded" content-type as defined by HTML 4.01 | |||
| HTML 4.01 [W3C.REC-html401-19991224]. | [W3C.REC-html401-19991224]. | |||
| * The HTTP request entity-body is single-part. | * The HTTP request payload is single-part. | |||
| * The content to be encoded in the entity-body MUST consist entirely | * The content to be encoded in the payload MUST consist entirely of | |||
| of ASCII [USASCII] characters. | ASCII [USASCII] characters. | |||
| * The HTTP request method is one for which the request-body has | * The HTTP request method is one for which the request-body has | |||
| defined semantics. In particular, this means that the "GET" | defined semantics. In particular, this means that the "GET" | |||
| method MUST NOT be used. | method MUST NOT be used. | |||
| The entity-body MAY include other request-specific parameters, in | The payload MAY include other request-specific parameters, in which | |||
| which case the "access_token" parameter MUST be properly separated | case the "access_token" parameter MUST be properly separated from the | |||
| from the request-specific parameters using "&" character(s) (ASCII | request-specific parameters using "&" character(s) (ASCII code 38). | |||
| code 38). | ||||
| For example, the client makes the following HTTP request using | For example, the client makes the following HTTP request using | |||
| transport-layer security: | transport-layer security: | |||
| POST /resource HTTP/1.1 | POST /resource HTTP/1.1 | |||
| Host: server.example.com | Host: server.example.com | |||
| Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
| access_token=mF_9.B5f-4.1JqM | access_token=mF_9.B5f-4.1JqM | |||
| skipping to change at page 49, line 7 ¶ | skipping to change at page 50, line 7 ¶ | |||
| 7.4.3.4. Don't store bearer tokens in HTTP cookies | 7.4.3.4. Don't store bearer tokens in HTTP cookies | |||
| Implementations MUST NOT store bearer tokens within cookies that can | Implementations MUST NOT store bearer tokens within cookies that can | |||
| be sent in the clear (which is the default transmission mode for | be sent in the clear (which is the default transmission mode for | |||
| cookies). Implementations that do store bearer tokens in cookies | cookies). Implementations that do store bearer tokens in cookies | |||
| MUST take precautions against cross-site request forgery. | MUST take precautions against cross-site request forgery. | |||
| 7.4.3.5. Issue short-lived bearer tokens | 7.4.3.5. Issue short-lived bearer tokens | |||
| Token servers SHOULD issue short-lived (one hour or less) bearer | Authorization servers SHOULD issue short-lived (one hour or less) | |||
| tokens, particularly when issuing tokens to clients that run within a | bearer tokens, particularly when issuing tokens to clients that run | |||
| web browser or other environments where information leakage may | within a web browser or other environments where information leakage | |||
| occur. Using short-lived bearer tokens can reduce the impact of them | may occur. Using short-lived bearer tokens can reduce the impact of | |||
| being leaked. | them being leaked. | |||
| 7.4.3.6. Issue scoped bearer tokens | 7.4.3.6. Issue scoped bearer tokens | |||
| Token servers SHOULD issue bearer tokens that contain an audience | Authorization servers SHOULD issue bearer tokens that contain an | |||
| restriction, scoping their use to the intended relying party or set | audience restriction, scoping their use to the intended relying party | |||
| of relying parties. | or set of relying parties. | |||
| 7.4.3.7. Don't pass bearer tokens in page URLs | 7.4.3.7. Don't pass bearer tokens in page URLs | |||
| Bearer tokens MUST NOT be passed in page URLs (for example, as query | Bearer tokens MUST NOT be passed in page URLs (for example, as query | |||
| string parameters). Instead, bearer tokens SHOULD be passed in HTTP | string parameters). Instead, bearer tokens SHOULD be passed in HTTP | |||
| message headers or message bodies for which confidentiality measures | message headers or message bodies for which confidentiality measures | |||
| are taken. Browsers, web servers, and other software may not | are taken. Browsers, web servers, and other software may not | |||
| adequately secure URLs in the browser history, web server logs, and | adequately secure URLs in the browser history, web server logs, and | |||
| other data structures. If bearer tokens are passed in page URLs, | other data structures. If bearer tokens are passed in page URLs, | |||
| attackers might be able to steal them from the history data, logs, or | attackers might be able to steal them from the history data, logs, or | |||
| other unsecured locations. | other unsecured locations. | |||
| 7.4.4. Token Replay Prevention | 7.4.4. Token Replay Prevention | |||
| A sender-constrained access token scopes the applicability of an | A sender-constrained access token scopes the applicability of an | |||
| access token to a certain sender. This sender is obliged to | access token to a certain sender. This sender is obliged to | |||
| demonstrate knowledge of a certain secret as prerequisite for the | demonstrate knowledge of a certain secret as prerequisite for the | |||
| acceptance of that token at the recipient (e.g., a resource server). | acceptance of that access token at the recipient (e.g., a resource | |||
| server). | ||||
| Authorization and resource servers SHOULD use mechanisms for sender- | Authorization and resource servers SHOULD use mechanisms for sender- | |||
| constrained access tokens to prevent token replay as described in | constrained access tokens to prevent token replay as described in | |||
| Section 4.8.1.1.2 of [I-D.ietf-oauth-security-topics]. The use of | Section 4.8.1.1.2 of [I-D.ietf-oauth-security-topics]. The use of | |||
| Mutual TLS for OAuth 2.0 [RFC8705] is RECOMMENDED. | Mutual TLS for OAuth 2.0 [RFC8705] is RECOMMENDED. | |||
| It is RECOMMENDED to use end-to-end TLS. If TLS traffic needs to be | It is RECOMMENDED to use end-to-end TLS. If TLS traffic needs to be | |||
| terminated at an intermediary, refer to Section 4.11 of | terminated at an intermediary, refer to Section 4.11 of | |||
| [I-D.ietf-oauth-security-topics] for further security advice. | [I-D.ietf-oauth-security-topics] for further security advice. | |||
| skipping to change at page 57, line 5 ¶ | skipping to change at page 58, line 5 ¶ | |||
| serve the respective request. Clients and authorization servers MAY | serve the respective request. Clients and authorization servers MAY | |||
| utilize the parameter "scope" and "authorization_details" as | utilize the parameter "scope" and "authorization_details" as | |||
| specified in [I-D.ietf-oauth-rar] to determine those resources and/or | specified in [I-D.ietf-oauth-rar] to determine those resources and/or | |||
| actions. | actions. | |||
| Authorization and resource servers SHOULD use mechanisms for sender- | Authorization and resource servers SHOULD use mechanisms for sender- | |||
| constrained access tokens to prevent token replay as described in | constrained access tokens to prevent token replay as described in | |||
| (#pop_tokens). A sender-constrained access token scopes the | (#pop_tokens). A sender-constrained access token scopes the | |||
| applicability of an access token to a certain sender. This sender is | applicability of an access token to a certain sender. This sender is | |||
| obliged to demonstrate knowledge of a certain secret as prerequisite | obliged to demonstrate knowledge of a certain secret as prerequisite | |||
| for the acceptance of that token at the recipient (e.g., a resource | for the acceptance of that access token at the recipient (e.g., a | |||
| server). The use of Mutual TLS for OAuth 2.0 [RFC8705] is | resource server). The use of Mutual TLS for OAuth 2.0 [RFC8705] is | |||
| RECOMMENDED. | RECOMMENDED. | |||
| 9.5. Refresh Tokens | 9.5. Refresh Tokens | |||
| Authorization servers MAY issue refresh tokens to clients. | Authorization servers MAY issue refresh tokens to clients. | |||
| Refresh tokens MUST be kept confidential in transit and storage, and | Refresh tokens MUST be kept confidential in transit and storage, and | |||
| shared only among the authorization server and the client to whom the | shared only among the authorization server and the client to whom the | |||
| refresh tokens were issued. The authorization server MUST maintain | refresh tokens were issued. The authorization server MUST maintain | |||
| the binding between a refresh token and the client to whom it was | the binding between a refresh token and the client to whom it was | |||
| skipping to change at page 58, line 36 ¶ | skipping to change at page 59, line 36 ¶ | |||
| carried in the "state" parameter that are securely bound to the user | carried in the "state" parameter that are securely bound to the user | |||
| agent MUST be used for CSRF protection (see (#csrf_countermeasures)). | agent MUST be used for CSRF protection (see (#csrf_countermeasures)). | |||
| In order to prevent mix-up attacks (see (#mix_up)), clients MUST only | In order to prevent mix-up attacks (see (#mix_up)), clients MUST only | |||
| process redirect responses of the authorization server they sent the | process redirect responses of the authorization server they sent the | |||
| respective request to and from the same user agent this authorization | respective request to and from the same user agent this authorization | |||
| request was initiated with. Clients MUST store the authorization | request was initiated with. Clients MUST store the authorization | |||
| server they sent an authorization request to and bind this | server they sent an authorization request to and bind this | |||
| information to the user agent and check that the authorization | information to the user agent and check that the authorization | |||
| request was received from the correct authorization server. Clients | request was received from the correct authorization server. Clients | |||
| MUST ensure that the subsequent token request, if applicable, is sent | MUST ensure that the subsequent access token request, if applicable, | |||
| to the same authorization server. Clients SHOULD use distinct | is sent to the same authorization server. Clients SHOULD use | |||
| redirect URIs for each authorization server as a means to identify | distinct redirect URIs for each authorization server as a means to | |||
| the authorization server a particular response came from. | identify the authorization server a particular response came from. | |||
| An AS that redirects a request potentially containing user | An AS that redirects a request potentially containing user | |||
| credentials MUST avoid forwarding these user credentials accidentally | credentials MUST avoid forwarding these user credentials accidentally | |||
| (see Section 9.7.2 for details). | (see Section 9.7.2 for details). | |||
| 9.7.1. Loopback Redirect Considerations in Native Apps | 9.7.1. Loopback Redirect Considerations in Native Apps | |||
| Loopback interface redirect URIs use the "http" scheme (i.e., without | Loopback interface redirect URIs use the "http" scheme (i.e., without | |||
| Transport Layer Security (TLS)). This is acceptable for loopback | Transport Layer Security (TLS)). This is acceptable for loopback | |||
| interface redirect URIs as the HTTP request never leaves the device. | interface redirect URIs as the HTTP request never leaves the device. | |||
| skipping to change at page 59, line 25 ¶ | skipping to change at page 60, line 25 ¶ | |||
| resolution on the user's device. | resolution on the user's device. | |||
| 9.7.2. HTTP 307 Redirect | 9.7.2. HTTP 307 Redirect | |||
| An AS which redirects a request that potentially contains user | An AS which redirects a request that potentially contains user | |||
| credentials MUST NOT use the HTTP 307 status code for redirection. | credentials MUST NOT use the HTTP 307 status code for redirection. | |||
| If an HTTP redirection (and not, for example, JavaScript) is used for | If an HTTP redirection (and not, for example, JavaScript) is used for | |||
| such a request, AS SHOULD use HTTP status code 303 "See Other". | such a request, AS SHOULD use HTTP status code 303 "See Other". | |||
| At the authorization endpoint, a typical protocol flow is that the AS | At the authorization endpoint, a typical protocol flow is that the AS | |||
| prompts the user to enter her credentials in a form that is then | prompts the user to enter their credentials in a form that is then | |||
| submitted (using the HTTP POST method) back to the authorization | submitted (using the HTTP POST method) back to the authorization | |||
| server. The AS checks the credentials and, if successful, redirects | server. The AS checks the credentials and, if successful, redirects | |||
| the user agent to the client's redirect URI. | the user agent to the client's redirect URI. | |||
| If the status code 307 were used for redirection, the user agent | If the status code 307 were used for redirection, the user agent | |||
| would send the user credentials via HTTP POST to the client. | would send the user credentials via HTTP POST to the client. | |||
| This discloses the sensitive credentials to the client. If the | This discloses the sensitive credentials to the client. If the | |||
| relying party is malicious, it can use the credentials to impersonate | relying party is malicious, it can use the credentials to impersonate | |||
| the user at the AS. | the user at the AS. | |||
| skipping to change at page 60, line 30 ¶ | skipping to change at page 61, line 30 ¶ | |||
| If the client can be authenticated, the authorization servers MUST | If the client can be authenticated, the authorization servers MUST | |||
| authenticate the client and ensure that the authorization code was | authenticate the client and ensure that the authorization code was | |||
| issued to the same client. | issued to the same client. | |||
| Clients MUST prevent injection (replay) of authorization codes into | Clients MUST prevent injection (replay) of authorization codes into | |||
| the authorization response by attackers. To this end, using | the authorization response by attackers. To this end, using | |||
| "code_challenge" and "code_verifier" is REQUIRED for clients and | "code_challenge" and "code_verifier" is REQUIRED for clients and | |||
| authorization servers MUST enforce their use, unless both of the | authorization servers MUST enforce their use, unless both of the | |||
| following criteria are met: | following criteria are met: | |||
| * The client is a confidential or credentialed client. | * The client is a confidential client. | |||
| * In the specific deployment and the specific request, there is | * In the specific deployment and the specific request, there is | |||
| reasonable assurance for authorization server that the client | reasonable assurance for authorization server that the client | |||
| implements the OpenID Connect "nonce" mechanism properly. | implements the OpenID Connect "nonce" mechanism properly. | |||
| In this case, using and enforcing "code_challenge" and | In this case, using and enforcing "code_challenge" and | |||
| "code_verifier" is still RECOMMENDED. | "code_verifier" is still RECOMMENDED. | |||
| The "code_challenge" or OpenID Connect "nonce" value MUST be | The "code_challenge" or OpenID Connect "nonce" value MUST be | |||
| transaction-specific and securely bound to the client and the user | transaction-specific and securely bound to the client and the user | |||
| skipping to change at page 73, line 40 ¶ | skipping to change at page 74, line 40 ¶ | |||
| This document does not require any IANA actions. | This document does not require any IANA actions. | |||
| All referenced registries are defined by RFC6749 and related | All referenced registries are defined by RFC6749 and related | |||
| documents that this work is based upon. No changes to those | documents that this work is based upon. No changes to those | |||
| registries are required by this specification. | registries are required by this specification. | |||
| 14. References | 14. References | |||
| 14.1. Normative References | 14.1. Normative References | |||
| [BCP195] Sheffer, Y., Holz, R., and P. Saint-Andre, | ||||
| "Recommendations for Secure Use of Transport Layer | ||||
| Security (TLS)", n.d.. | ||||
| [I-D.ietf-oauth-security-topics] | [I-D.ietf-oauth-security-topics] | |||
| Lodderstedt, T., Bradley, J., Labunets, A., and D. Fett, | Lodderstedt, T., Bradley, J., Labunets, A., and D. Fett, | |||
| "OAuth 2.0 Security Best Current Practice", Work in | "OAuth 2.0 Security Best Current Practice", Work in | |||
| Progress, Internet-Draft, draft-ietf-oauth-security- | Progress, Internet-Draft, draft-ietf-oauth-security- | |||
| topics-15, 5 April 2020, <http://www.ietf.org/internet- | topics-16, 5 October 2020, <http://www.ietf.org/internet- | |||
| drafts/draft-ietf-oauth-security-topics-15.txt>. | drafts/draft-ietf-oauth-security-topics-16.txt>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | |||
| Leach, P., Luotonen, A., and L. Stewart, "HTTP | Leach, P., Luotonen, A., and L. Stewart, "HTTP | |||
| Authentication: Basic and Digest Access Authentication", | Authentication: Basic and Digest Access Authentication", | |||
| RFC 2617, DOI 10.17487/RFC2617, June 1999, | RFC 2617, DOI 10.17487/RFC2617, June 1999, | |||
| skipping to change at page 75, line 49 ¶ | skipping to change at page 77, line 9 ¶ | |||
| <https://www.rfc-editor.org/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
| [USASCII] Institute, A.N.S., "Coded Character Set -- 7-bit American | [USASCII] Institute, A.N.S., "Coded Character Set -- 7-bit American | |||
| Standard Code for Information Interchange, ANSI X3.4", | Standard Code for Information Interchange, ANSI X3.4", | |||
| 1986. | 1986. | |||
| [W3C.REC-html401-19991224] | [W3C.REC-html401-19991224] | |||
| Raggett, D., Hors, A., and I. Jacobs, "HTML 4.01 | Raggett, D., Hors, A., and I. Jacobs, "HTML 4.01 | |||
| Specification", World Wide Web Consortium Recommendation | Specification", World Wide Web Consortium Recommendation | |||
| REC-html401-19991224, 24 December 1999, | REC-html401-19991224, 24 December 1999, | |||
| <http://www.w3.org/TR/1999/REC-html401-19991224>. | <https://www.w3.org/TR/1999/REC-html401-19991224>. | |||
| [W3C.REC-xml-20081126] | [W3C.REC-xml-20081126] | |||
| Bray, T., Paoli, J., Sperberg-McQueen, M., Maler, E., and | Bray, T., Paoli, J., Sperberg-McQueen, M., Maler, E., and | |||
| F. Yergeau, "Extensible Markup Language (XML) 1.0 (Fifth | F. Yergeau, "Extensible Markup Language (XML) 1.0 (Fifth | |||
| Edition)", World Wide Web Consortium Recommendation REC- | Edition)", World Wide Web Consortium Recommendation REC- | |||
| xml-20081126, 26 November 2008, | xml-20081126, 26 November 2008, | |||
| <http://www.w3.org/TR/2008/REC-xml-20081126>. | <https://www.w3.org/TR/2008/REC-xml-20081126>. | |||
| 14.2. Informative References | 14.2. Informative References | |||
| [CSP-2] "Content Security Policy Level 2", December 2016, | [CSP-2] "Content Security Policy Level 2", December 2016, | |||
| <https://www.w3.org/TR/CSP2>. | <https://www.w3.org/TR/CSP2>. | |||
| [I-D.bradley-oauth-jwt-encoded-state] | [I-D.bradley-oauth-jwt-encoded-state] | |||
| Bradley, J., Lodderstedt, T., and H. Zandbelt, "Encoding | Bradley, J., Lodderstedt, T., and H. Zandbelt, "Encoding | |||
| claims in the OAuth 2 state parameter using a JWT", Work | claims in the OAuth 2 state parameter using a JWT", Work | |||
| in Progress, Internet-Draft, draft-bradley-oauth-jwt- | in Progress, Internet-Draft, draft-bradley-oauth-jwt- | |||
| encoded-state-09, 4 November 2018, <http://www.ietf.org/ | encoded-state-09, 4 November 2018, <http://www.ietf.org/ | |||
| internet-drafts/draft-bradley-oauth-jwt-encoded-state- | internet-drafts/draft-bradley-oauth-jwt-encoded-state- | |||
| 09.txt>. | 09.txt>. | |||
| [I-D.ietf-oauth-access-token-jwt] | [I-D.ietf-oauth-access-token-jwt] | |||
| Bertocci, V., "JSON Web Token (JWT) Profile for OAuth 2.0 | Bertocci, V., "JSON Web Token (JWT) Profile for OAuth 2.0 | |||
| Access Tokens", Work in Progress, Internet-Draft, draft- | Access Tokens", Work in Progress, Internet-Draft, draft- | |||
| ietf-oauth-access-token-jwt-07, 27 April 2020, | ietf-oauth-access-token-jwt-11, 22 January 2021, | |||
| <http://www.ietf.org/internet-drafts/draft-ietf-oauth- | <http://www.ietf.org/internet-drafts/draft-ietf-oauth- | |||
| access-token-jwt-07.txt>. | access-token-jwt-11.txt>. | |||
| [I-D.ietf-oauth-browser-based-apps] | [I-D.ietf-oauth-browser-based-apps] | |||
| Parecki, A. and D. Waite, "OAuth 2.0 for Browser-Based | Parecki, A. and D. Waite, "OAuth 2.0 for Browser-Based | |||
| Apps", Work in Progress, Internet-Draft, draft-ietf-oauth- | Apps", Work in Progress, Internet-Draft, draft-ietf-oauth- | |||
| browser-based-apps-06, 5 April 2020, <http://www.ietf.org/ | browser-based-apps-07, 2 October 2020, | |||
| internet-drafts/draft-ietf-oauth-browser-based-apps- | <http://www.ietf.org/internet-drafts/draft-ietf-oauth- | |||
| 06.txt>. | browser-based-apps-07.txt>. | |||
| [I-D.ietf-oauth-dpop] | [I-D.ietf-oauth-dpop] | |||
| Fett, D., Campbell, B., Bradley, J., Lodderstedt, T., | Fett, D., Campbell, B., Bradley, J., Lodderstedt, T., | |||
| Jones, M., and D. Waite, "OAuth 2.0 Demonstration of | Jones, M., and D. Waite, "OAuth 2.0 Demonstrating Proof- | |||
| Proof-of-Possession at the Application Layer (DPoP)", Work | of-Possession at the Application Layer (DPoP)", Work in | |||
| in Progress, Internet-Draft, draft-ietf-oauth-dpop-01, 1 | Progress, Internet-Draft, draft-ietf-oauth-dpop-02, 18 | |||
| May 2020, <http://www.ietf.org/internet-drafts/draft-ietf- | November 2020, <http://www.ietf.org/internet-drafts/draft- | |||
| oauth-dpop-01.txt>. | ietf-oauth-dpop-02.txt>. | |||
| [I-D.ietf-oauth-par] | [I-D.ietf-oauth-par] | |||
| Lodderstedt, T., Campbell, B., Sakimura, N., Tonge, D., | Lodderstedt, T., Campbell, B., Sakimura, N., Tonge, D., | |||
| and F. Skokan, "OAuth 2.0 Pushed Authorization Requests", | and F. Skokan, "OAuth 2.0 Pushed Authorization Requests", | |||
| Work in Progress, Internet-Draft, draft-ietf-oauth-par-02, | Work in Progress, Internet-Draft, draft-ietf-oauth-par-05, | |||
| 10 July 2020, <http://www.ietf.org/internet-drafts/draft- | 14 December 2020, <http://www.ietf.org/internet-drafts/ | |||
| ietf-oauth-par-02.txt>. | draft-ietf-oauth-par-05.txt>. | |||
| [I-D.ietf-oauth-rar] | [I-D.ietf-oauth-rar] | |||
| Lodderstedt, T., Richer, J., and B. Campbell, "OAuth 2.0 | Lodderstedt, T., Richer, J., and B. Campbell, "OAuth 2.0 | |||
| Rich Authorization Requests", Work in Progress, Internet- | Rich Authorization Requests", Work in Progress, Internet- | |||
| Draft, draft-ietf-oauth-rar-01, 19 February 2020, | Draft, draft-ietf-oauth-rar-03, 18 October 2020, | |||
| <http://www.ietf.org/internet-drafts/draft-ietf-oauth-rar- | <http://www.ietf.org/internet-drafts/draft-ietf-oauth-rar- | |||
| 01.txt>. | 03.txt>. | |||
| [I-D.ietf-oauth-token-binding] | [I-D.ietf-oauth-token-binding] | |||
| Jones, M., Campbell, B., Bradley, J., and W. Denniss, | Jones, M., Campbell, B., Bradley, J., and W. Denniss, | |||
| "OAuth 2.0 Token Binding", Work in Progress, Internet- | "OAuth 2.0 Token Binding", Work in Progress, Internet- | |||
| Draft, draft-ietf-oauth-token-binding-08, 19 October 2018, | Draft, draft-ietf-oauth-token-binding-08, 19 October 2018, | |||
| <http://www.ietf.org/internet-drafts/draft-ietf-oauth- | <http://www.ietf.org/internet-drafts/draft-ietf-oauth- | |||
| token-binding-08.txt>. | token-binding-08.txt>. | |||
| [NIST800-63] | [NIST800-63] | |||
| Burr, W., Dodson, D., Newton, E., Perlner, R., Polk, T., | Burr, W., Dodson, D., Newton, E., Perlner, R., Polk, T., | |||
| skipping to change at page 83, line 45 ¶ | skipping to change at page 85, line 4 ¶ | |||
| location of the authorization and token endpoints and the | location of the authorization and token endpoints and the | |||
| supported grant types. | supported grant types. | |||
| * [RFC8707]: Resource Indicators | * [RFC8707]: Resource Indicators | |||
| - Provides a way for the client to explicitly signal to the | - Provides a way for the client to explicitly signal to the | |||
| authorization server where it intends to use the access token | authorization server where it intends to use the access token | |||
| it is requesting. | it is requesting. | |||
| * [RFC7591]: Dynamic Client Registration | * [RFC7591]: Dynamic Client Registration | |||
| - Dynamic Client Registration provides a mechanism for | - Dynamic Client Registration provides a mechanism for | |||
| programmatically registering clients with an authorization | programmatically registering clients with an authorization | |||
| server. | server. | |||
| * [RFC7592]: Dynamic Client Management | * [RFC7592]: Dynamic Client Management | |||
| - Dynamic Client Management provides a mechanism for updating | - Dynamic Client Management provides a mechanism for updating | |||
| dynamically registered client information. | dynamically registered client information. | |||
| * [I-D.ietf-oauth-access-token-jwt]: JSON Web Token (JWT) Profile | * [I-D.ietf-oauth-access-token-jwt]: JSON Web Token (JWT) Profile | |||
| for OAuth 2.0 Access Tokens | for OAuth 2.0 Access Tokens | |||
| - This specification defines a profile for issuing OAuth access | - This specification defines a profile for issuing OAuth access | |||
| tokens in JSON web token (JWT) format. | tokens in JSON Web Token (JWT) format. | |||
| * [RFC8705]: Mutual TLS | * [RFC8705]: Mutual TLS | |||
| - Mutual TLS describes a mechanism of binding access tokens and | - Mutual TLS describes a mechanism of binding access tokens and | |||
| refresh tokens to the clients they were issued to, as well as a | refresh tokens to the clients they were issued to, as well as a | |||
| client authentication mechanism, via TLS certificate | client authentication mechanism, via TLS certificate | |||
| authentication. | authentication. | |||
| * [RFC7662]: Token Introspection | * [RFC7662]: Token Introspection | |||
| End of changes. 78 change blocks. | ||||
| 307 lines changed or deleted | 363 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/ | ||||