| rfc9207.original | rfc9207.txt | |||
|---|---|---|---|---|
| Web Authorization Protocol K. Meyer zu Selhausen | Internet Engineering Task Force (IETF) K. Meyer zu Selhausen | |||
| Internet-Draft Hackmanit | Request for Comments: 9207 Hackmanit | |||
| Intended status: Standards Track D. Fett | Category: Standards Track D. Fett | |||
| Expires: 15 July 2022 yes.com | ISSN: 2070-1721 yes.com | |||
| 11 January 2022 | February 2022 | |||
| OAuth 2.0 Authorization Server Issuer Identification | OAuth 2.0 Authorization Server Issuer Identification | |||
| draft-ietf-oauth-iss-auth-resp-05 | ||||
| Abstract | Abstract | |||
| This document specifies a new parameter "iss" that is used to | This document specifies a new parameter called iss. This parameter | |||
| explicitly include the issuer identifier of the authorization server | is used to explicitly include the issuer identifier of the | |||
| in the authorization response of an OAuth authorization flow. The | authorization server in the authorization response of an OAuth | |||
| "iss" parameter serves as an effective countermeasure to "mix-up | authorization flow. The iss parameter serves as an effective | |||
| attacks". | countermeasure to "mix-up attacks". | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 15 July 2022. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9207. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2022 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 | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Simplified BSD License text | to this document. Code Components extracted from this document must | |||
| as described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Simplified BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
| 1.1. Conventions and Terminology . . . . . . . . . . . . . . . 3 | 1.1. Conventions and Terminology | |||
| 2. Response Parameter "iss" . . . . . . . . . . . . . . . . . . 4 | 2. Response Parameter iss | |||
| 2.1. Example Authorization Response . . . . . . . . . . . . . 4 | 2.1. Example Authorization Response | |||
| 2.2. Example Error Response . . . . . . . . . . . . . . . . . 4 | 2.2. Example Error Response | |||
| 2.3. Providing the Issuer Identifier "iss" . . . . . . . . . . 4 | 2.3. Providing the Issuer Identifier | |||
| 2.4. Validation of the Issuer Identifier "iss" . . . . . . . . 5 | 2.4. Validating the Issuer Identifier | |||
| 3. Authorization Server Metadata . . . . . . . . . . . . . . . . 6 | 3. Authorization Server Metadata | |||
| 4. Security Considerations . . . . . . . . . . . . . . . . . . . 6 | 4. Security Considerations | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7 | 5. IANA Considerations | |||
| 5.1. OAuth Authorization Server Metadata . . . . . . . . . . . 7 | 5.1. OAuth Authorization Server Metadata | |||
| 5.2. OAuth Parameters Registration . . . . . . . . . . . . . . 8 | 5.2. OAuth Parameters Registration | |||
| 6. Normative References . . . . . . . . . . . . . . . . . . . . 8 | 6. References | |||
| 7. Informative References . . . . . . . . . . . . . . . . . . . 8 | 6.1. Normative References | |||
| Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 10 | 6.2. Informative References | |||
| Appendix B. Document History . . . . . . . . . . . . . . . . . . 10 | Acknowledgements | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 11 | Authors' Addresses | |||
| 1. Introduction | 1. Introduction | |||
| The OAuth authorization framework [RFC6749] allows clients to | The OAuth 2.0 Authorization Framework [RFC6749] allows clients to | |||
| interact with multiple independent authorization servers under the | interact with multiple independent authorization servers under the | |||
| control of separate entities. Some OAuth grant types utilize the | control of separate entities. Some OAuth grant types utilize the | |||
| resource owner's user-agent to deliver the authorization server's | resource owner's user agent to deliver the authorization server's | |||
| response to the OAuth client. One example of this pattern is the | response to the OAuth client. One example of this pattern is the | |||
| authorization response of the authorization code grant. | authorization response of the authorization code grant. | |||
| The authorization response as specified in Section 4.1.2 of [RFC6749] | The authorization response as specified in Section 4.1.2 of [RFC6749] | |||
| does not contain any information about the identity of the | does not contain any information about the identity of the | |||
| authorization server which issued the response. Therefore, clients | authorization server that issued the response. Therefore, clients | |||
| receiving a response from the resource owner's user-agent cannot be | receiving a response from the resource owner's user agent cannot be | |||
| sure who initially issued the response and the secrets contained | sure who initially issued the response and the secrets contained | |||
| therein. The lack of certainty about the origin of the response | therein. The lack of certainty about the origin of the response | |||
| enables a class of attacks called "mix-up attacks". | enables a class of attacks called "mix-up attacks". | |||
| Mix-up attacks are a potential threat to all OAuth clients that | Mix-up attacks are a potential threat to all OAuth clients that | |||
| interact with multiple authorization servers. When at least one of | interact with multiple authorization servers. When at least one of | |||
| these authorization servers is under an attacker's control, the | these authorization servers is under an attacker's control, the | |||
| attacker can launch a mix-up attack to acquire authorization codes or | attacker can launch a mix-up attack to acquire authorization codes or | |||
| access tokens issued by any one of the other authorization servers. | access tokens issued by any one of the other authorization servers. | |||
| There are multiple ways in which an attacker can gain control over an | There are multiple ways in which an attacker can gain control over an | |||
| authorization server supported by the client: For instance, an | authorization server supported by the client; for instance, an | |||
| authorization server could become compromised, or the attacker could | authorization server could become compromised, or the attacker could | |||
| register their own authorization server, for example, using dynamic | register their own authorization server, for example, using dynamic | |||
| client registration ([RFC7591]). | client registration [RFC7591]. | |||
| OAuth clients that interact with only one authorization server are | OAuth clients that interact with only one authorization server are | |||
| not vulnerable to mix-up attacks. However, when such clients decide | not vulnerable to mix-up attacks. However, when such clients decide | |||
| to add support for a second authorization server in the future they | to add support for a second authorization server in the future, they | |||
| become vulnerable and need to apply countermeasures to mix-up | become vulnerable and need to apply countermeasures to mix-up | |||
| attacks. | attacks. | |||
| Mix-up attacks aim to steal an authorization code or access token by | Mix-up attacks aim to steal an authorization code or access token by | |||
| tricking the client into sending the authorization code or access | tricking the client into sending the authorization code or access | |||
| token to the attacker instead of the honest authorization or resource | token to the attacker instead of the honest authorization or resource | |||
| server. This marks a severe threat to the confidentiality and | server. This marks a severe threat to the confidentiality and | |||
| integrity of resources whose access is managed with OAuth. A | integrity of resources whose access is managed with OAuth. A | |||
| detailed description and different variants of the mix-up attack | detailed description and different variants of the mix-up attack | |||
| class can be found in Section 4.4 of the OAuth Security Best Current | class can be found in Section 4.4 of "OAuth 2.0 Security Best Current | |||
| Practice [I-D.ietf-oauth-security-topics] as well as in the original | Practice" [OAUTH-SECURITY-TOPICS] as well as in the original research | |||
| research first highlighting this attack class, "On the security of | first highlighting this attack class, "On the security of modern | |||
| modern Single Sign-On Protocols: Second-Order Vulnerabilities in | Single Sign-On Protocols: Second-Order Vulnerabilities in OpenID | |||
| OpenID Connect" [arXiv.1508.04324] and "A Comprehensive Formal | Connect" [arXiv.1508.04324] and "A Comprehensive Formal Security | |||
| Security Analysis of OAuth 2.0" [arXiv.1601.01229]. | Analysis of OAuth 2.0" [arXiv.1601.01229]. | |||
| This document defines a new parameter in the authorization response | This document defines a new parameter in the authorization response | |||
| called "iss". The "iss" parameter allows the authorization server to | called iss. The iss parameter allows the authorization server to | |||
| include its identity in the authorization response explicitly. The | include its identity in the authorization response explicitly. The | |||
| client can compare the value of the "iss" parameter to the issuer | client can compare the value of the iss parameter to the issuer | |||
| identifier of the authorization server (e.g., retrieved from its | identifier of the authorization server (e.g., retrieved from its | |||
| metadata) it believes it is interacting with. The "iss" parameter | metadata) it believes it is interacting with. The iss parameter | |||
| gives the client certainty about the authorization server's identity | gives the client certainty about the authorization server's identity | |||
| and enables it to send credentials such as authorization codes and | and enables it to send credentials such as authorization codes and | |||
| access tokens only to the intended recipients. | access tokens only to the intended recipients. | |||
| The effectiveness of the "iss" parameter against mix-up attacks was | The effectiveness of the iss parameter against mix-up attacks was | |||
| analyzed and formally proven in "A Comprehensive Formal Security | analyzed and formally proven in "A Comprehensive Formal Security | |||
| Analysis of OAuth 2.0" [arXiv.1601.01229]. | Analysis of OAuth 2.0" [arXiv.1601.01229]. | |||
| 1.1. Conventions and Terminology | 1.1. Conventions and Terminology | |||
| 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 | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| This specification uses the terms "access token", "authorization | This specification uses the terms "access token", "authorization | |||
| code", "authorization code grant", "authorization server", "resource | code", "authorization code grant", "authorization server", "resource | |||
| server", "authorization response", "grant type", and "client" defined | server", "authorization response", "grant type", and "client" defined | |||
| by the OAuth 2.0 Authorization Framework [RFC6749] and the term | by the OAuth 2.0 Authorization Framework [RFC6749]. The term "issuer | |||
| "issuer identifier" defined by OAuth 2.0 Authorization Server | identifier" is defined by OAuth 2.0 Authorization Server Metadata | |||
| Metadata [RFC8414]. | [RFC8414]. | |||
| 2. Response Parameter "iss" | 2. Response Parameter iss | |||
| In authorization responses to the client, including error responses, | In authorization responses to the client, including error responses, | |||
| an authorization server supporting this specification MUST indicate | an authorization server supporting this specification MUST indicate | |||
| its identity by including the "iss" parameter in the response. | its identity by including the iss parameter in the response. | |||
| The "iss" parameter value is the issuer identifier of the | The iss parameter value is the issuer identifier of the authorization | |||
| authorization server which created the authorization response, as | server that created the authorization response, as defined in | |||
| defined in [RFC8414]. Its value MUST be a URL that uses the "https" | [RFC8414]. Its value MUST be a URL that uses the "https" scheme | |||
| scheme without any query or fragment components. | without any query or fragment components. | |||
| 2.1. Example Authorization Response | 2.1. Example Authorization Response | |||
| The following example shows an authorization response from the | The following example shows an authorization response from the | |||
| authorization server whose issuer identifier is | authorization server whose issuer identifier is | |||
| "https://honest.as.example" (extra line breaks and indentation are | https://honest.as.example (extra line breaks and indentation are for | |||
| for display purposes only): | display purposes only): | |||
| HTTP/1.1 302 Found | HTTP/1.1 302 Found | |||
| Location: https://client.example/cb? | Location: https://client.example/cb? | |||
| code=x1848ZT64p4IirMPT0R-X3141MFPTuBX-VFL_cvaplMH58 | code=x1848ZT64p4IirMPT0R-X3141MFPTuBX-VFL_cvaplMH58 | |||
| &state=ZWVlNDBlYzA1NjdkMDNhYjg3ZjUxZjAyNGQzMTM2NzI | &state=ZWVlNDBlYzA1NjdkMDNhYjg3ZjUxZjAyNGQzMTM2NzI | |||
| &iss=https%3A%2F%2Fhonest.as.example | &iss=https%3A%2F%2Fhonest.as.example | |||
| 2.2. Example Error Response | 2.2. Example Error Response | |||
| The following example shows an error response from the same | The following example shows an error response from the same | |||
| authorization server (extra line breaks and indentation are for | authorization server (extra line breaks and indentation are for | |||
| display purposes only): | display purposes only): | |||
| HTTP/1.1 302 Found | HTTP/1.1 302 Found | |||
| Location: https://client.example/cb? | Location: https://client.example/cb? | |||
| error=access_denied | error=access_denied | |||
| &state=N2JjNGJhY2JiZjRhYzA3MGJkMzNmMDE5OWJhZmJhZjA | &state=N2JjNGJhY2JiZjRhYzA3MGJkMzNmMDE5OWJhZmJhZjA | |||
| &iss=https%3A%2F%2Fhonest.as.example | &iss=https%3A%2F%2Fhonest.as.example | |||
| 2.3. Providing the Issuer Identifier "iss" | 2.3. Providing the Issuer Identifier | |||
| Authorization servers supporting this specification MUST provide | Authorization servers supporting this specification MUST provide | |||
| their issuer identifier to enable clients to validate the "iss" | their issuer identifier to enable clients to validate the iss | |||
| parameter effectively. | parameter effectively. | |||
| For authorization servers publishing metadata according to [RFC8414], | For authorization servers publishing metadata according to [RFC8414], | |||
| the following rules apply: | the following rules apply: | |||
| * The issuer identifier included in the server's metadata value | * The issuer identifier included in the server's metadata value | |||
| "issuer" MUST be identical to the "iss" parameter's value. | issuer MUST be identical to the iss parameter's value. | |||
| * The server MUST indicate its support for the "iss" parameter by | * The server MUST indicate its support for the iss parameter by | |||
| setting the metadata parameter | setting the metadata parameter | |||
| "authorization_response_iss_parameter_supported", defined in | authorization_response_iss_parameter_supported, defined in | |||
| Section 3, to "true". | Section 3, to true. | |||
| Authorization servers MAY additionally provide the issuer identifier | Authorization servers MAY additionally provide the issuer identifier | |||
| to clients by any other mechanism which is outside of the scope of | to clients by any other mechanism, which is outside of the scope of | |||
| this specification. | this specification. | |||
| 2.4. Validation of the Issuer Identifier "iss" | 2.4. Validating the Issuer Identifier | |||
| Clients that support this specification MUST extract the value of the | Clients that support this specification MUST extract the value of the | |||
| "iss" parameter from authorization responses they receive if the | iss parameter from authorization responses they receive if the | |||
| parameter is present. Clients MUST then decode the value from its | parameter is present. Clients MUST then decode the value from its | |||
| "application/x-www-form-urlencoded" form according to [RFC6749], | "application/x-www-form-urlencoded" form according to Appendix B of | |||
| Appendix B, and compare the result to the issuer identifier of the | [RFC6749] and compare the result to the issuer identifier of the | |||
| authorization server where the authorization request was sent to. | authorization server where the authorization request was sent to. | |||
| This comparison MUST use simple string comparison as defined in | This comparison MUST use simple string comparison as defined in | |||
| Section 6.2.1 of [RFC3986]. If the value does not match the expected | Section 6.2.1 of [RFC3986]. If the value does not match the expected | |||
| issuer identifier, clients MUST reject the authorization response and | issuer identifier, clients MUST reject the authorization response and | |||
| MUST NOT proceed with the authorization grant. For error responses, | MUST NOT proceed with the authorization grant. For error responses, | |||
| clients MUST NOT assume that the error originates from the intended | clients MUST NOT assume that the error originates from the intended | |||
| authorization server. | authorization server. | |||
| More precisely, clients that interact with authorization servers | More precisely, clients that interact with authorization servers | |||
| supporting OAuth metadata [RFC8414] MUST compare the "iss" parameter | supporting OAuth metadata [RFC8414] MUST compare the iss parameter | |||
| value to the "issuer" value in the server's metadata document. If | value to the issuer value in the server's metadata document. If | |||
| OAuth metadata is not used, clients MUST use deployment-specific | OAuth metadata is not used, clients MUST use deployment-specific ways | |||
| ways, for example a static configuration, to decide if the returned | (for example, a static configuration) to decide if the returned iss | |||
| "iss" value is the expected value in the current flow (see also | value is the expected value in the current flow (see also Section 4). | |||
| Section 4). | ||||
| If clients interact with both authorization servers supporting this | If clients interact with both authorization servers supporting this | |||
| specification and authorization servers not supporting this | specification and authorization servers not supporting this | |||
| specification, clients MUST retain state about whether each | specification, clients MUST retain state about whether each | |||
| authorization server supports the "iss" parameter. Clients MUST | authorization server supports the iss parameter. Clients MUST reject | |||
| reject authorization responses without the "iss" parameter from | authorization responses without the iss parameter from authorization | |||
| authorization servers which do support the parameter according to the | servers that do support the parameter according to the client's | |||
| client's configuration. Clients SHOULD discard authorization | configuration. Clients SHOULD discard authorization responses with | |||
| responses with the "iss" parameter from authorization servers which | the iss parameter from authorization servers that do not indicate | |||
| do not indicate their support for the parameter. However, there | their support for the parameter. However, there might be legitimate | |||
| might be legitimate authorization servers that provide the "iss" | authorization servers that provide the iss parameter without | |||
| parameter without indicating their support in their metadata. Local | indicating their support in their metadata. Local policy or | |||
| policy or configuration can determine whether to accept such | configuration can determine whether to accept such responses, and | |||
| responses and specific guidance is out of scope for this | specific guidance is out of scope for this specification. | |||
| specification. | ||||
| In general, clients that support this specification MAY accept | In general, clients that support this specification MAY accept | |||
| authorization responses that do not contain the "iss" parameter or | authorization responses that do not contain the iss parameter or | |||
| reject them and exclusively support authorization servers which | reject them and exclusively support authorization servers that | |||
| provide the "iss" parameter in the authorization response. Local | provide the iss parameter in the authorization response. Local | |||
| policy or configuration can determine when to accept such responses | policy or configuration can determine when to accept such responses, | |||
| and specific guidance is out of scope for this specification. | and specific guidance is out of scope for this specification. | |||
| In OpenID Connect [OIDC.Core] flows where an ID Token is returned | In OpenID Connect [OIDC.Core] flows where an ID Token is returned | |||
| from the authorization endpoint, the value in the "iss" parameter | from the authorization endpoint, the value in the iss parameter MUST | |||
| MUST always be identical to the "iss" claim in the ID Token. | always be identical to the iss claim in the ID Token. | |||
| Section 4.1.2 of [RFC6749] already mandates that clients that do not | Section 4.1.2 of [RFC6749] already mandates that clients that do not | |||
| support this specification MUST ignore the unrecognized "iss" | support this specification MUST ignore the unrecognized iss | |||
| parameter. | parameter. | |||
| Note: The "JWT Secured Authorization Response Mode for OAuth 2.0 | | Note: The "JWT Secured Authorization Response Mode for OAuth | |||
| (JARM)" [JARM] defines a mechanism that conveys all authorization | | 2.0 (JARM)" [JARM] defines a mechanism that conveys all | |||
| response parameters in a JWT. This JWT contains an "iss" claim that | | authorization response parameters in a JSON Web Token (JWT). | |||
| provides the same protection if it is validated as described in | | This JWT contains an iss claim that provides the same | |||
| Section 2.4. Therefore, an additional "iss" parameter outside the | | protection if it is validated as described in Section 2.4. | |||
| JWT is not necessary when JARM is used. | | Therefore, an additional iss parameter outside the JWT is not | |||
| | necessary when JARM is used. | ||||
| 3. Authorization Server Metadata | 3. Authorization Server Metadata | |||
| The following parameter for the authorization server metadata | The following parameter for the authorization server metadata | |||
| [RFC8414] is introduced to signal the authorization server's support | [RFC8414] is introduced to signal the authorization server's support | |||
| for this specification: | for this specification: | |||
| "authorization_response_iss_parameter_supported" Boolean parameter | authorization_response_iss_parameter_supported: Boolean parameter | |||
| indicating whether the authorization server provides the "iss" | indicating whether the authorization server provides the iss | |||
| parameter in the authorization response as defined in Section 2. | parameter in the authorization response as defined in Section 2. | |||
| If omitted, the default value is false. | If omitted, the default value is false. | |||
| 4. Security Considerations | 4. Security Considerations | |||
| Clients MUST validate the "iss" parameter precisely as described in | Clients MUST validate the iss parameter precisely as described in | |||
| Section 2.4 and MUST NOT allow multiple authorization servers to use | Section 2.4 and MUST NOT allow multiple authorization servers to use | |||
| the same issuer identifier. In particular, when authorization server | the same issuer identifier. In particular, when authorization server | |||
| details can be manually configured in the client, the client MUST | details can be manually configured in the client, the client MUST | |||
| ensure that the accepted "iss" values are unique for each | ensure that the accepted iss values are unique for each authorization | |||
| authorization server. | server. | |||
| The "iss" parameter enables a client to decide if an authorization | The iss parameter enables a client to decide if an authorization | |||
| server "expects" to be used in an OAuth flow together with a certain | server "expects" to be used in an OAuth flow together with a certain | |||
| token endpoint and potentially other endpoints, like the userinfo | token endpoint and potentially other endpoints, like the userinfo | |||
| endpoint ([OIDC.Core]). When OAuth metadata is used, the "iss" | endpoint [OIDC.Core]. When OAuth metadata is used, the iss parameter | |||
| parameter identifies the issuer and therefore the respective OAuth | identifies the issuer and therefore the respective OAuth metadata | |||
| metadata document which points to the other endpoints. When OAuth | document that points to the other endpoints. When OAuth metadata is | |||
| metadata is not used, the client can use, for example, a statically | not used, the client can use, for example, a statically configured | |||
| configured expected "iss" value for each configured authorization | expected iss value for each configured authorization server. | |||
| server. | ||||
| The issuer identifier contained in the authorization response is not | The issuer identifier contained in the authorization response is not | |||
| cryptographically protected against tampering. In general, | cryptographically protected against tampering. In general, | |||
| mechanisms such as JWTs (as specified in JARM [JARM]) could be used | mechanisms such as JWTs (as specified in [JARM]) could be used to | |||
| to protect the integrity of the authorization response. However, in | protect the integrity of the authorization response. However, in | |||
| mix-up attacks, the client generally receives the authorization | mix-up attacks, the client generally receives the authorization | |||
| response from an uncompromised authorization server. If an attacker | response from an uncompromised authorization server. If an attacker | |||
| can tamper this authorization response before it is received by the | can tamper with this authorization response before it is received by | |||
| client, the attacker would also have direct access to the | the client, the attacker would also have direct access to the | |||
| authorization code. The attacker does not need to execute a mix-up | authorization code. The attacker does not need to execute a mix-up | |||
| attack to steal the authorization code. Therefore, integrity | attack to steal the authorization code. Therefore, integrity | |||
| protection for the authorization response is not necessary to defend | protection for the authorization response is not necessary to defend | |||
| against mix-up attacks. | against mix-up attacks. | |||
| There are also alternative countermeasures to mix-up attacks. When | There are also alternative countermeasures to mix-up attacks. When | |||
| an authorization response already includes an authorization server's | an authorization response already includes an authorization server's | |||
| issuer identifier by other means, and this identifier is checked as | issuer identifier by other means and this identifier is checked as | |||
| laid out in Section 2.4, the use and verification of the "iss" | laid out in Section 2.4, the use and verification of the iss | |||
| parameter is not necessary and MAY be omitted. This is the case when | parameter is not necessary and MAY be omitted. For example, this is | |||
| OpenID Connect response types that return an ID token from the | the case when OpenID Connect response types that return an ID Token | |||
| authorization endpoint (e.g., "response_type=code id_token") or JARM | from the authorization endpoint (e.g., response_type=code id_token) | |||
| response mode are used, for example. However, if a client receives | or [JARM] are used. However, if a client receives an authorization | |||
| an authorization response that contains multiple issuer identifiers, | response that contains multiple issuer identifiers, the client MUST | |||
| the client MUST reject the response if these issuer identifiers do | reject the response if these issuer identifiers do not match. The | |||
| not match. The details of alternative countermeasures are outside of | details of alternative countermeasures are outside of the scope of | |||
| the scope of this specification. | this specification. | |||
| Mix-up attacks are only relevant to clients that interact with | Mix-up attacks are only relevant to clients that interact with | |||
| multiple authorization servers. However, clients interacting with | multiple authorization servers. However, clients interacting with | |||
| only one authorization server might add support for a second | only one authorization server might add support for a second | |||
| authorization server in the future. By supporting multiple | authorization server in the future. By supporting multiple | |||
| authorization servers they become vulnerable to mix-up attacks and | authorization servers, they become vulnerable to mix-up attacks and | |||
| need to apply countermeasures. | need to apply countermeasures. | |||
| 5. IANA Considerations | 5. IANA Considerations | |||
| 5.1. OAuth Authorization Server Metadata | 5.1. OAuth Authorization Server Metadata | |||
| This specification adds the following values to the IANA "OAuth | IANA has registered the following values in the "OAuth Authorization | |||
| Authorization Server Metadata" registry of [IANA.OAuth.Parameters] | Server Metadata" registry of [IANA.OAuth.Parameters] established by | |||
| established by [RFC8414]. | [RFC8414]. | |||
| Metadata Name: "authorization_response_iss_parameter_supported" | Metadata Name: authorization_response_iss_parameter_supported | |||
| Metadata Description: Boolean value indicating whether the | Metadata Description: Boolean value indicating whether the | |||
| authorization server provides the "iss" parameter in the | authorization server provides the iss parameter in the | |||
| authorization response. | authorization response. | |||
| Change Controller: IETF | Change Controller: IETF | |||
| Specification Document(s): Section 3 of [[ this document ]] | Specification Document(s): Section 3 of RFC 9207 | |||
| 5.2. OAuth Parameters Registration | 5.2. OAuth Parameters Registration | |||
| This specification updates the "iss" entry in the IANA "OAuth | IANA has updated the iss entry to appear as follows in the "OAuth | |||
| Parameters" registry of [IANA.OAuth.Parameters] established by | Parameters" registry of [IANA.OAuth.Parameters] established by | |||
| [RFC6749]. | [RFC6749]. | |||
| Parameter name: "iss" | Parameter name: iss | |||
| Parameter usage location: authorization request, authorization | Parameter usage location: authorization request, authorization | |||
| response | response | |||
| Change Controller: IETF | Change Controller: IETF | |||
| Specification Document(s): Section 2 of [[ this document ]], | Specification Document(s): Section 2 of RFC 9207, [RFC9101], and | |||
| [RFC9101], and Section 4.1.1 of [RFC7519]. | Section 4.1.1 of [RFC7519]. | |||
| 6. Normative References | 6. References | |||
| 6.1. Normative References | ||||
| [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>. | |||
| [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | ||||
| Resource Identifier (URI): Generic Syntax", STD 66, | ||||
| RFC 3986, DOI 10.17487/RFC3986, January 2005, | ||||
| <https://www.rfc-editor.org/info/rfc3986>. | ||||
| [RFC6749] Hardt, D., Ed., "The OAuth 2.0 Authorization Framework", | [RFC6749] Hardt, D., Ed., "The OAuth 2.0 Authorization Framework", | |||
| RFC 6749, DOI 10.17487/RFC6749, October 2012, | RFC 6749, DOI 10.17487/RFC6749, October 2012, | |||
| <https://www.rfc-editor.org/info/rfc6749>. | <https://www.rfc-editor.org/info/rfc6749>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | ||||
| Resource Identifier (URI): Generic Syntax", STD 66, | ||||
| RFC 3986, DOI 10.17487/RFC3986, January 2005, | ||||
| <https://www.rfc-editor.org/info/rfc3986>. | ||||
| [RFC8414] Jones, M., Sakimura, N., and J. Bradley, "OAuth 2.0 | [RFC8414] Jones, M., Sakimura, N., and J. Bradley, "OAuth 2.0 | |||
| Authorization Server Metadata", RFC 8414, | Authorization Server Metadata", RFC 8414, | |||
| DOI 10.17487/RFC8414, June 2018, | DOI 10.17487/RFC8414, June 2018, | |||
| <https://www.rfc-editor.org/info/rfc8414>. | <https://www.rfc-editor.org/info/rfc8414>. | |||
| 7. Informative References | 6.2. Informative References | |||
| [RFC9101] Sakimura, N., Bradley, J., and M. Jones, "The OAuth 2.0 | ||||
| Authorization Framework: JWT-Secured Authorization Request | ||||
| (JAR)", RFC 9101, DOI 10.17487/RFC9101, August 2021, | ||||
| <https://www.rfc-editor.org/info/rfc9101>. | ||||
| [RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | ||||
| (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | ||||
| <https://www.rfc-editor.org/info/rfc7519>. | ||||
| [I-D.ietf-oauth-security-topics] | [arXiv.1508.04324] | |||
| Lodderstedt, T., Bradley, J., Labunets, A., and D. Fett, | Mainka, C., Mladenov, V., and J. Schwenk, "On the security | |||
| "OAuth 2.0 Security Best Current Practice", Work in | of modern Single Sign-On Protocols: Second-Order | |||
| Progress, Internet-Draft, draft-ietf-oauth-security- | Vulnerabilities in OpenID Connect", August 2015, | |||
| topics-19, 16 December 2021, <https://tools.ietf.org/html/ | <https://arxiv.org/abs/1508.04324>. | |||
| draft-ietf-oauth-security-topics-19>. | ||||
| [arXiv.1601.01229] | [arXiv.1601.01229] | |||
| Fett, D., Kuesters, R., and G. Schmitz, "A Comprehensive | Fett, D., Kuesters, R., and G. Schmitz, "A Comprehensive | |||
| Formal Security Analysis of OAuth 2.0", 6 January 2016, | Formal Security Analysis of OAuth 2.0", | |||
| DOI 10.1145/2976749.2978385, January 2016, | ||||
| <https://arxiv.org/abs/1601.01229>. | <https://arxiv.org/abs/1601.01229>. | |||
| [RFC7591] Richer, J., Ed., Jones, M., Bradley, J., Machulak, M., and | ||||
| P. Hunt, "OAuth 2.0 Dynamic Client Registration Protocol", | ||||
| RFC 7591, DOI 10.17487/RFC7591, July 2015, | ||||
| <https://www.rfc-editor.org/info/rfc7591>. | ||||
| [IANA.OAuth.Parameters] | [IANA.OAuth.Parameters] | |||
| IANA, "OAuth Parameters", | IANA, "OAuth Parameters", | |||
| <https://www.iana.org/assignments/oauth-parameters>. | <https://www.iana.org/assignments/oauth-parameters>. | |||
| [JARM] Lodderstedt, T. and B. Campbell, "Financial-grade API: JWT | ||||
| Secured Authorization Response Mode for OAuth 2.0 (JARM)", | ||||
| October 2018, | ||||
| <https://openid.net/specs/openid-financial-api-jarm.html>. | ||||
| [OAUTH-SECURITY-TOPICS] | ||||
| Lodderstedt, T., Bradley, J., Labunets, A., and D. Fett, | ||||
| "OAuth 2.0 Security Best Current Practice", Work in | ||||
| Progress, Internet-Draft, draft-ietf-oauth-security- | ||||
| topics-19, 16 December 2021, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-oauth- | ||||
| security-topics-19>. | ||||
| [OIDC.Core] | [OIDC.Core] | |||
| Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and | Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and | |||
| C. Mortimore, "OpenID Connect Core 1.0 incorporating | C. Mortimore, "OpenID Connect Core 1.0 incorporating | |||
| errata set 1", 8 November 2014, | errata set 1", November 2014, | |||
| <https://openid.net/specs/openid-connect-core-1_0.html>. | <https://openid.net/specs/openid-connect-core-1_0.html>. | |||
| [JARM] Lodderstedt, T. and B. Campbell, "Financial-grade API: JWT | [RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | |||
| Secured Authorization Response Mode for OAuth 2.0 (JARM)", | (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | |||
| 17 October 2018, | <https://www.rfc-editor.org/info/rfc7519>. | |||
| <https://openid.net/specs/openid-financial-api-jarm.html>. | ||||
| [arXiv.1508.04324] | [RFC7591] Richer, J., Ed., Jones, M., Bradley, J., Machulak, M., and | |||
| Mainka, C., Mladenov, V., and J. Schwenk, "On the security | P. Hunt, "OAuth 2.0 Dynamic Client Registration Protocol", | |||
| of modern Single Sign-On Protocols: Second-Order | RFC 7591, DOI 10.17487/RFC7591, July 2015, | |||
| Vulnerabilities in OpenID Connect", 18 August 2015, | <https://www.rfc-editor.org/info/rfc7591>. | |||
| <https://arxiv.org/abs/1508.04324>. | ||||
| Appendix A. Acknowledgements | [RFC9101] Sakimura, N., Bradley, J., and M. Jones, "The OAuth 2.0 | |||
| Authorization Framework: JWT-Secured Authorization Request | ||||
| (JAR)", RFC 9101, DOI 10.17487/RFC9101, August 2021, | ||||
| <https://www.rfc-editor.org/info/rfc9101>. | ||||
| Acknowledgements | ||||
| We would like to thank Brian Campbell, Roman Danyliw, Vladimir | We would like to thank Brian Campbell, Roman Danyliw, Vladimir | |||
| Dzhuvinov, Joseph Heenan, Takahiko Kawasaki, Torsten Lodderstedt, | Dzhuvinov, Joseph Heenan, Takahiko Kawasaki, Torsten Lodderstedt, | |||
| Christian Mainka, Vladislav Mladenov, Warren Parad, Aaron Parecki, | Christian Mainka, Vladislav Mladenov, Warren Parad, Aaron Parecki, | |||
| and Rifaat Shekh-Yusef for their valuable feedback on this document. | and Rifaat Shekh-Yusef for their valuable feedback on this document. | |||
| Appendix B. Document History | ||||
| [[ To be removed from the final specification ]] | ||||
| -05 [[ Working Group Draft ]] | ||||
| * Changed reference to OAuth Security Best Current Practices from normative to informative | ||||
| -04 [[ Working Group Draft ]] | ||||
| * Incorporated feedback from Lars Eggert | ||||
| * Incorporated feedback from Francesca Palombini (IANA registrations) | ||||
| * Incorporated feedback from Benjamin Kaduk | ||||
| -03 [[ Working Group Draft ]] | ||||
| * Incorporated feedback from AD review | ||||
| * Incorporated feedback from artart and secdir reviews | ||||
| -02 [[ Working Group Draft ]] | ||||
| * Incorporated feedback from shepherd review | ||||
| * Changed SHOULD to MUST (clients MUST store which AS support `iss` parameter) | ||||
| * Added note for clients receiving unexpected `iss` parameter | ||||
| * Editorial changes | ||||
| -01 [[ Working Group Draft ]] | ||||
| * Incorporated WG feedback | ||||
| * Changed title of the draft to make it shorter | ||||
| * Clarified mix-up attacks in introduction | ||||
| * Improved note on JARM in validation section | ||||
| -00 [[ Working Group Draft ]] | ||||
| * Working group draft | ||||
| -02 | ||||
| * Incorporated WG feedback | ||||
| * Clarifications for unique issuer identifier | ||||
| * Clarifications when multiple issuer identifier could be present | ||||
| * Added note that iss parameter MUST NOT be used with JARM | ||||
| * Added note on error responses and example for error response | ||||
| * Editorial changes | ||||
| -01 | ||||
| * Incorporated first WG feedback | ||||
| * Clarifications for use with OIDC | ||||
| * Added note that clients supporting just one AS are not vulnerable | ||||
| * Renamed metadata parameter | ||||
| * Various editorial changes | ||||
| -00 | ||||
| * initial draft | ||||
| Authors' Addresses | Authors' Addresses | |||
| Karsten Meyer zu Selhausen | Karsten Meyer zu Selhausen | |||
| Hackmanit | Hackmanit | |||
| Email: karsten.meyerzuselhausen@hackmanit.de | Email: karsten.meyerzuselhausen@hackmanit.de | |||
| Daniel Fett | Daniel Fett | |||
| yes.com | yes.com | |||
| Email: mail@danielfett.de | Email: mail@danielfett.de | |||
| End of changes. 71 change blocks. | ||||
| 246 lines changed or deleted | 193 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/ | ||||