| rfc9728.original | rfc9728.txt | |||
|---|---|---|---|---|
| OAuth Working Group M.B. Jones | Internet Engineering Task Force (IETF) M.B. Jones | |||
| Internet-Draft Self-Issued Consulting | Request for Comments: 9728 Self-Issued Consulting | |||
| Intended status: Standards Track P. Hunt | Category: Standards Track P. Hunt | |||
| Expires: 18 April 2025 Independent Identity, Inc. | ISSN: 2070-1721 Independent Identity, Inc. | |||
| A. Parecki | A. Parecki | |||
| Okta | Okta | |||
| 15 October 2024 | April 2025 | |||
| OAuth 2.0 Protected Resource Metadata | OAuth 2.0 Protected Resource Metadata | |||
| draft-ietf-oauth-resource-metadata-13 | ||||
| Abstract | Abstract | |||
| This specification defines a metadata format that an OAuth 2.0 client | This specification defines a metadata format that an OAuth 2.0 client | |||
| or authorization server can use to obtain the information needed to | or authorization server can use to obtain the information needed to | |||
| interact with an OAuth 2.0 protected resource. | interact with an OAuth 2.0 protected resource. | |||
| 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 18 April 2025. | 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/rfc9728. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2025 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 Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| 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 Revised 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 . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 1.1. Requirements Notation and Conventions . . . . . . . . . . 4 | 1.1. Requirements Notation and Conventions | |||
| 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.2. Terminology | |||
| 2. Protected Resource Metadata . . . . . . . . . . . . . . . . . 5 | 2. Protected Resource Metadata | |||
| 2.1. Human-Readable Resource Metadata . . . . . . . . . . . . 7 | 2.1. Human-Readable Resource Metadata | |||
| 2.2. Signed Protected Resource Metadata . . . . . . . . . . . 8 | 2.2. Signed Protected Resource Metadata | |||
| 3. Obtaining Protected Resource Metadata . . . . . . . . . . . . 8 | 3. Obtaining Protected Resource Metadata | |||
| 3.1. Protected Resource Metadata Request . . . . . . . . . . . 9 | 3.1. Protected Resource Metadata Request | |||
| 3.2. Protected Resource Metadata Response . . . . . . . . . . 10 | 3.2. Protected Resource Metadata Response | |||
| 3.3. Protected Resource Metadata Validation . . . . . . . . . 11 | 3.3. Protected Resource Metadata Validation | |||
| 4. Authorization Server Metadata . . . . . . . . . . . . . . . . 11 | 4. Authorization Server Metadata | |||
| 5. Use of WWW-Authenticate for Protected Resource Metadata . . . 12 | 5. Use of WWW-Authenticate for Protected Resource Metadata | |||
| 5.1. WWW-Authenticate Response . . . . . . . . . . . . . . . . 14 | 5.1. WWW-Authenticate Response | |||
| 5.2. Changes to Resource Metadata . . . . . . . . . . . . . . 15 | 5.2. Changes to Resource Metadata | |||
| 5.3. Client Identifier and Client Authentication . . . . . . . 15 | 5.3. Client Identifier and Client Authentication | |||
| 5.4. Compatibility with Other Authentication Methods . . . . . 16 | 5.4. Compatibility with Other Authentication Methods | |||
| 6. String Operations . . . . . . . . . . . . . . . . . . . . . . 16 | 6. String Operations | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | 7. Security Considerations | |||
| 7.1. TLS Requirements . . . . . . . . . . . . . . . . . . . . 16 | 7.1. TLS Requirements | |||
| 7.2. Scopes . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 7.2. Scopes | |||
| 7.3. Impersonation Attacks . . . . . . . . . . . . . . . . . . 17 | 7.3. Impersonation Attacks | |||
| 7.4. Audience-Restricted Access Tokens . . . . . . . . . . . . 17 | 7.4. Audience-Restricted Access Tokens | |||
| 7.5. Publishing Metadata in a Standard Format . . . . . . . . 18 | 7.5. Publishing Metadata in a Standard Format | |||
| 7.6. Authorization Servers . . . . . . . . . . . . . . . . . . 18 | 7.6. Authorization Servers | |||
| 7.7. Server-Side Request Forgery (SSRF) . . . . . . . . . . . 19 | 7.7. Server-Side Request Forgery (SSRF) | |||
| 7.8. Phishing . . . . . . . . . . . . . . . . . . . . . . . . 19 | 7.8. Phishing | |||
| 7.9. Differences between Unsigned and Signed Metadata . . . . 19 | 7.9. Differences Between Unsigned and Signed Metadata | |||
| 7.10. Metadata Caching . . . . . . . . . . . . . . . . . . . . 20 | 7.10. Metadata Caching | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 | 8. IANA Considerations | |||
| 8.1. OAuth Protected Resource Metadata Registry . . . . . . . 21 | 8.1. OAuth Protected Resource Metadata Registry | |||
| 8.1.1. Registration Template . . . . . . . . . . . . . . . . 21 | 8.1.1. Registration Template | |||
| 8.1.2. Initial Registry Contents . . . . . . . . . . . . . . 22 | 8.1.2. Initial Registry Contents | |||
| 8.2. OAuth Authorization Server Metadata Registry . . . . . . 24 | 8.2. OAuth Authorization Server Metadata Registry | |||
| 8.2.1. Registry Contents . . . . . . . . . . . . . . . . . . 24 | 8.2.1. Registry Contents | |||
| 8.3. Well-Known URI Registry . . . . . . . . . . . . . . . . . 24 | 8.3. Well-Known URIs Registry | |||
| 8.3.1. Registry Contents . . . . . . . . . . . . . . . . . . 24 | 8.3.1. Registry Contents | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 24 | 9. References | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . 24 | 9.1. Normative References | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . 27 | 9.2. Informative References | |||
| Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 28 | Acknowledgements | |||
| Appendix B. Document History . . . . . . . . . . . . . . . . . . 28 | Authors' Addresses | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 31 | ||||
| 1. Introduction | 1. Introduction | |||
| This specification defines a metadata format enabling OAuth 2.0 | This specification defines a metadata format enabling OAuth 2.0 | |||
| clients and authorization servers to obtain information needed to | clients and authorization servers to obtain information needed to | |||
| interact with an OAuth 2.0 protected resource. The structure and | interact with an OAuth 2.0 protected resource. The structure and | |||
| content of this specification is intentionally as parallel as | content of this specification are intentionally as parallel as | |||
| possible to that of "OAuth 2.0 Dynamic Client Registration Protocol" | possible to (1) "OAuth 2.0 Dynamic Client Registration Protocol" | |||
| [RFC7591], which enables a client to provide metadata about itself to | [RFC7591], which enables a client to provide metadata about itself to | |||
| an OAuth 2.0 authorization server and to OAuth 2.0 Authorization | an OAuth 2.0 authorization server and (2) "OAuth 2.0 Authorization | |||
| Server Metadata [RFC8414], which enables a client to obtain metadata | Server Metadata" [RFC8414], which enables a client to obtain metadata | |||
| about an OAuth 2.0 authorization server. | about an OAuth 2.0 authorization server. | |||
| The means by which the client obtains the location of the protected | The means by which the client obtains the location of the protected | |||
| resource is out of scope of this document. In some cases, the | resource is out of scope for this document. In some cases, the | |||
| location may be manually configured into the client; for example, an | location may be manually configured into the client; for example, an | |||
| email client could provide an interface for a user to enter the URL | email client could provide an interface for a user to enter the URL | |||
| of their JMAP [RFC8620] server. In other cases, it may be | of their JSON Meta Application Protocol (JMAP) server [RFC8620]. In | |||
| dynamically discovered; for example, a user could enter their email | other cases, it may be dynamically discovered; for example, a user | |||
| address into an email client, the client could perform WebFinger | could enter their email address into an email client, the client | |||
| [RFC7033] discovery (in a manner related to the description in | could perform WebFinger discovery [RFC7033] (in a manner related to | |||
| Section 2 of "OpenID Connect Discovery 1.0" [OpenID.Discovery]) to | the description in Section 2 of [OpenID.Discovery]) to find the | |||
| find the resource server, then fetch the resource server metadata to | resource server, and the client could then fetch the resource server | |||
| find the authorization server to use to obtain authorization to | metadata to find the authorization server to use to obtain | |||
| access the user's email. | authorization to access the user's email. | |||
| The metadata for a protected resource is retrieved from a well-known | The metadata for a protected resource is retrieved from a well-known | |||
| location as a JSON [RFC8259] document, which declares information | location as a JSON [RFC8259] document, which declares information | |||
| about its capabilities and optionally, its relationships to other | about its capabilities and, optionally, its relationships with other | |||
| services. This process is described in Section 3. | services. This process is described in Section 3. | |||
| This metadata can either be communicated in a self-asserted fashion | This metadata can be communicated either in a self-asserted fashion | |||
| or as a set of signed metadata values represented as claims in a JSON | or as a set of signed metadata values represented as claims in a JSON | |||
| Web Token (JWT) [JWT]. In the JWT case, the issuer is vouching for | Web Token (JWT) [JWT]. In the JWT case, the issuer is vouching for | |||
| the validity of the data about the protected resource. This is | the validity of the data about the protected resource. This is | |||
| analogous to the role that the Software Statement plays in OAuth | analogous to the role that the software statement plays in OAuth | |||
| Dynamic Client Registration [RFC7591]. | Dynamic Client Registration [RFC7591]. | |||
| Each protected resource publishing metadata about itself makes its | Each protected resource publishing metadata about itself makes its | |||
| own metadata document available at a well-known location | own metadata document available at a well-known location | |||
| deterministically derived from the protected resource's URL, even | deterministically derived from the protected resource's URL, even | |||
| when the resource server implements multiple protected resources. | when the resource server implements multiple protected resources. | |||
| This prevents attackers from publishing metadata supposedly | This prevents attackers from publishing metadata that supposedly | |||
| describing the protected resource, but that is not actually | describes the protected resource but that is not actually | |||
| authoritative for the protected resource, as described in | authoritative for the protected resource, as described in | |||
| Section 7.3. | Section 7.3. | |||
| Section 2 defines metadata parameters that a protected resource can | Section 2 defines metadata parameters that a protected resource can | |||
| publish, which includes things like which scopes are supported, how a | publish, which includes things like which scopes are supported, how a | |||
| client can present an access token, and more. These values may be | client can present an access token, and more. These values, such as | |||
| used by other specifications, such as the jwks_uri used to publish | the jwks_uri (see Section 2), may be used with other specifications; | |||
| public keys the resource server uses to sign resource responses, for | for example, the public keys published in the jwks_uri can be used to | |||
| instance, as described in [FAPI.MessageSigning]. | verify the signed resource responses, as described in | |||
| [FAPI.MessageSigning]. | ||||
| Section 5 describes the use of WWW-Authenticate by protected | Section 5 describes the use of WWW-Authenticate by protected | |||
| resources to dynamically inform clients of the URL of their protected | resources to dynamically inform clients of the URL of their protected | |||
| resource metadata. This use of WWW-Authenticate can indicate that | resource metadata. This use of WWW-Authenticate can indicate that | |||
| the protected resource metadata may have changed. | the protected resource metadata may have changed. | |||
| 1.1. Requirements Notation and Conventions | 1.1. Requirements Notation and 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 | |||
| 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. | |||
| All uses of JSON Web Signature (JWS) [JWS] and JSON Web Encryption | All applications of JSON Web Signature (JWS) data structures [JWS] | |||
| (JWE) [JWE] data structures in this specification utilize the JWS | and JSON Web Encryption (JWE) data structures [JWE] as discussed in | |||
| Compact Serialization or the JWE Compact Serialization; the JWS JSON | this specification utilize the JWS Compact Serialization or the JWE | |||
| Serialization and the JWE JSON Serialization are not used. Choosing | Compact Serialization; the JWS JSON Serialization and the JWE JSON | |||
| a single serialization is intended to facilitate interoperability. | Serialization are not used. Choosing a single serialization is | |||
| intended to facilitate interoperability. | ||||
| 1.2. Terminology | 1.2. Terminology | |||
| This specification uses the terms "Access Token", "Authorization | This specification uses the terms "access token", "authorization | |||
| Code", "Authorization Endpoint", "Authorization Grant", | code", "authorization server", "client", "client authentication", | |||
| "Authorization Server", "Client", "Client Authentication", "Client | "client identifier", "protected resource", and "resource server" | |||
| Identifier", "Client Secret", "Grant Type", "Protected Resource", | defined by OAuth 2.0 [RFC6749], and the terms "Claim Name" and "JSON | |||
| "Redirection URI", "Refresh Token", "Resource Owner", "Resource | Web Token (JWT)" defined by "JSON Web Token (JWT)" [JWT]. | |||
| Server", "Response Type", and "Token Endpoint" defined by OAuth 2.0 | ||||
| [RFC6749], the terms "Claim Name", "Claim Value", and "JSON Web Token | ||||
| (JWT)" defined by JSON Web Token (JWT) [JWT]. | ||||
| This specification defines the following term: | This specification defines the following term: | |||
| Resource Identifier: | Resource Identifier: | |||
| The Protected resource's resource identifier, which is a URL that | The protected resource's resource identifier, which is a URL that | |||
| uses the https scheme and has no fragment component. As in | uses the https scheme and has no fragment component. As specified | |||
| Section 2 of [RFC8707], it also SHOULD NOT include a query | in Section 2 of [RFC8707], it also SHOULD NOT include a query | |||
| component, but it is recognized that there are cases that make a | component, but it is recognized that there are cases that make a | |||
| query component a useful and necessary part of a resource | query component a useful and necessary part of a resource | |||
| identifier. Protected resource metadata is published at a .well- | identifier. Protected resource metadata is published at a .well- | |||
| known location [RFC8615] derived from this resource identifier, as | known location [RFC8615] derived from this resource identifier, as | |||
| described in Section 3. | described in Section 3. | |||
| 2. Protected Resource Metadata | 2. Protected Resource Metadata | |||
| Protected resources can have metadata describing their configuration. | Protected resources can have metadata describing their configuration. | |||
| The following protected resource metadata parameters are used by this | The following protected resource metadata parameters are used by this | |||
| specification and are registered in the IANA "OAuth Protected | specification and are registered in the "OAuth Protected Resource | |||
| Resource Metadata" registry established in Section 8.1: | Metadata" registry established in Section 8.1: | |||
| resource | resource | |||
| REQUIRED. The protected resource's Resource Identifier, as | REQUIRED. The protected resource's resource identifier, as | |||
| defined in Section 1.2. | defined in Section 1.2. | |||
| authorization_servers | authorization_servers | |||
| OPTIONAL. JSON array containing a list of OAuth authorization | OPTIONAL. JSON array containing a list of OAuth authorization | |||
| server issuer identifiers, as defined in [RFC8414], for | server issuer identifiers, as defined in [RFC8414], for | |||
| authorization servers that can be used with this protected | authorization servers that can be used with this protected | |||
| resource. Protected resources MAY choose not to advertise some | resource. Protected resources MAY choose not to advertise some | |||
| supported authorization servers even when this parameter is used. | supported authorization servers even when this parameter is used. | |||
| In some use cases, the set of authorization servers will not be | In some use cases, the set of authorization servers will not be | |||
| enumerable, in which case this metadata parameter would not be | enumerable, in which case this metadata parameter would not be | |||
| skipping to change at page 5, line 37 ¶ | skipping to change at line 217 ¶ | |||
| OPTIONAL. URL of the protected resource's JSON Web Key (JWK) Set | OPTIONAL. URL of the protected resource's JSON Web Key (JWK) Set | |||
| [JWK] document. This contains public keys belonging to the | [JWK] document. This contains public keys belonging to the | |||
| protected resource, such as signing key(s) that the resource | protected resource, such as signing key(s) that the resource | |||
| server uses to sign resource responses. This URL MUST use the | server uses to sign resource responses. This URL MUST use the | |||
| https scheme. When both signing and encryption keys are made | https scheme. When both signing and encryption keys are made | |||
| available, a use (public key use) parameter value is REQUIRED for | available, a use (public key use) parameter value is REQUIRED for | |||
| all keys in the referenced JWK Set to indicate each key's intended | all keys in the referenced JWK Set to indicate each key's intended | |||
| usage. | usage. | |||
| scopes_supported | scopes_supported | |||
| RECOMMENDED. JSON array containing a list of the OAuth 2.0 | RECOMMENDED. JSON array containing a list of scope values, as | |||
| [RFC6749] scope values that are used in authorization requests to | defined in OAuth 2.0 [RFC6749], that are used in authorization | |||
| request access to this protected resource. Protected resources | requests to request access to this protected resource. Protected | |||
| MAY choose not to advertise some scope values supported even when | resources MAY choose not to advertise some scope values supported | |||
| this parameter is used. | even when this parameter is used. | |||
| bearer_methods_supported | bearer_methods_supported | |||
| OPTIONAL. JSON array containing a list of the supported methods | OPTIONAL. JSON array containing a list of the supported methods | |||
| of sending an OAuth 2.0 Bearer Token [RFC6750] to the protected | of sending an OAuth 2.0 bearer token [RFC6750] to the protected | |||
| resource. Defined values are ["header", "body", "query"], | resource. Defined values are ["header", "body", "query"], | |||
| corresponding to Sections 2.1, 2.2, and 2.3 of RFC 6750. The | corresponding to Sections 2.1, 2.2, and 2.3 of [RFC6750]. The | |||
| empty array [] can be used to indicate that no Bearer methods are | empty array [] can be used to indicate that no bearer methods are | |||
| supported. If this entry is omitted, no default Bearer methods | supported. If this entry is omitted, no default bearer methods | |||
| supported are implied, nor does its absence indicate that they are | supported are implied, nor does its absence indicate that they are | |||
| not supported. | not supported. | |||
| resource_signing_alg_values_supported | resource_signing_alg_values_supported | |||
| OPTIONAL. JSON array containing a list of the JWS [JWS] signing | OPTIONAL. JSON array containing a list of the JWS [JWS] signing | |||
| algorithms (alg values) [JWA] supported by the protected resource | algorithms (alg values) [JWA] supported by the protected resource | |||
| for signing resource responses, for instance, as described in | for signing resource responses, for instance, as described in | |||
| [FAPI.MessageSigning]. No default algorithms are implied if this | [FAPI.MessageSigning]. No default algorithms are implied if this | |||
| entry is omitted. The value none MUST NOT be used. | entry is omitted. The value none MUST NOT be used. | |||
| resource_name | resource_name | |||
| Human-readable name of the protected resource intended for display | Human-readable name of the protected resource intended for display | |||
| to the end-user. It is RECOMMENDED that protected resource | to the end user. It is RECOMMENDED that protected resource | |||
| metadata includes this field. The value of this field MAY be | metadata include this field. The value of this field MAY be | |||
| internationalized, as described in Section 2.1. | internationalized, as described in Section 2.1. | |||
| resource_documentation | resource_documentation | |||
| OPTIONAL. URL of a page containing human-readable information | OPTIONAL. URL of a page containing human-readable information | |||
| that developers might want or need to know when using the | that developers might want or need to know when using the | |||
| protected resource. The value of this field MAY be | protected resource. The value of this field MAY be | |||
| internationalized, as described in Section 2.1. | internationalized, as described in Section 2.1. | |||
| resource_policy_uri | resource_policy_uri | |||
| OPTIONAL. URL of a page containing human-readable information | OPTIONAL. URL of a page containing human-readable information | |||
| skipping to change at page 6, line 41 ¶ | skipping to change at line 269 ¶ | |||
| OPTIONAL. URL of a page containing human-readable information | OPTIONAL. URL of a page containing human-readable information | |||
| about the protected resource's terms of service. The value of | about the protected resource's terms of service. The value of | |||
| this field MAY be internationalized, as described in Section 2.1. | this field MAY be internationalized, as described in Section 2.1. | |||
| tls_client_certificate_bound_access_tokens | tls_client_certificate_bound_access_tokens | |||
| OPTIONAL. Boolean value indicating protected resource support for | OPTIONAL. Boolean value indicating protected resource support for | |||
| mutual-TLS client certificate-bound access tokens [RFC8705]. If | mutual-TLS client certificate-bound access tokens [RFC8705]. If | |||
| omitted, the default value is false. | omitted, the default value is false. | |||
| authorization_details_types_supported | authorization_details_types_supported | |||
| OPTIONAL. A JSON array containing a list of the authorization | OPTIONAL. JSON array containing a list of the authorization | |||
| details type values supported by the resource server when the | details type values supported by the resource server when the | |||
| authorization_details request parameter [RFC9396] is used. | authorization_details request parameter [RFC9396] is used. | |||
| dpop_signing_alg_values_supported | dpop_signing_alg_values_supported | |||
| OPTIONAL. A JSON array containing a list of the JWS alg values | OPTIONAL. JSON array containing a list of the JWS alg values | |||
| (from the "JSON Web Signature and Encryption Algorithms" registry | (from the "JSON Web Signature and Encryption Algorithms" registry | |||
| [IANA.JOSE]) supported by the resource server for validating DPoP | [IANA.JOSE]) supported by the resource server for validating | |||
| proof JWTs [RFC9449]. | Demonstrating Proof of Possession (DPoP) proof JWTs [RFC9449]. | |||
| dpop_bound_access_tokens_required | dpop_bound_access_tokens_required | |||
| OPTIONAL. A boolean value specifying whether the protected | OPTIONAL. Boolean value specifying whether the protected resource | |||
| resource always requires the use of DPoP-bound access tokens | always requires the use of DPoP-bound access tokens [RFC9449]. If | |||
| [RFC9449]. If omitted, the default value is false. | omitted, the default value is false. | |||
| Additional protected resource metadata parameters MAY also be used. | Additional protected resource metadata parameters MAY also be used. | |||
| 2.1. Human-Readable Resource Metadata | 2.1. Human-Readable Resource Metadata | |||
| Human-readable resource metadata values and resource metadata values | Human-readable resource metadata values and resource metadata values | |||
| that reference human-readable content MAY be represented in multiple | that reference human-readable content MAY be represented in multiple | |||
| languages and scripts. For example, the values of fields such as | languages and scripts. For example, the values of fields such as | |||
| resource_name, resource_documentation, resource_tos_uri, and | resource_name, resource_documentation, resource_tos_uri, and | |||
| resource_policy_uri might have multiple locale-specific metadata | resource_policy_uri might have multiple locale-specific metadata | |||
| values to facilitate use in different locations. | values to facilitate use in different locations. | |||
| To specify the languages and scripts, BCP 47 [RFC5646] language tags | To specify the languages and scripts, language tags [BCP47] are added | |||
| are added to resource metadata parameter names, delimited by a # | to resource metadata parameter names, delimited by a # character. | |||
| character. Since JSON [RFC8259] member names are case sensitive, it | Since member names as discussed in JSON [RFC8259] are case sensitive, | |||
| is RECOMMENDED that language tag values used in Claim Names be | it is RECOMMENDED that language tag values used in Claim Names be | |||
| spelled using the character case with which they are registered in | spelled using the character case with which they are registered in | |||
| the "IANA Language Subtag" registry [IANA.Language]. In particular, | the "Language Subtag Registry" [IANA.Language]. In particular, | |||
| normally language names are spelled with lowercase characters, region | normally, language names are spelled with lowercase characters, | |||
| names are spelled with uppercase characters, and languages are | region names are spelled with uppercase characters, and languages are | |||
| spelled with mixed-case characters. However, since BCP 47 language | spelled with mixed-case characters. However, since language tag | |||
| tag values are case-insensitive, implementations SHOULD interpret the | values are case insensitive per [BCP47], implementations SHOULD | |||
| language tag values supplied in a case insensitive manner. Per the | interpret the language tag values supplied in a case-insensitive | |||
| recommendations in BCP 47, language tag values used in metadata | manner. Per the recommendations in [BCP47], language tag values used | |||
| parameter names should only be as specific as necessary. For | in metadata parameter names should only be as specific as is | |||
| instance, using fr might be sufficient in many contexts, rather than | necessary. For instance, using fr might be sufficient in many | |||
| fr-CA or fr-FR. | contexts, rather than fr-CA or fr-FR. | |||
| For example, a resource could represent its name in English as | For example, a resource could represent its name in English as | |||
| "resource_name#en": "My Resource" and its name in Italian as | "resource_name#en": "My Resource" and its name in Italian as | |||
| "resource_name#it": "La mia bella risorsa" within its metadata. Any | "resource_name#it": "La mia bella risorsa" within its metadata. Any | |||
| or all of these names MAY be displayed to the end-user, choosing | or all of these names MAY be displayed to the end user, choosing | |||
| which names to display based on system configuration, user | which names to display based on system configuration, user | |||
| preferences, or other factors. | preferences, or other factors. | |||
| If any human-readable field is sent without a language tag, parties | If any human-readable field is sent without a language tag, parties | |||
| using it MUST NOT make any assumptions about the language, character | using it MUST NOT make any assumptions about the language, character | |||
| set, or script of the string value, and the string value MUST be used | set, or script of the string value, and the string value MUST be used | |||
| as is wherever it is presented in a user interface. To facilitate | as is wherever it is presented in a user interface. To facilitate | |||
| interoperability, it is RECOMMENDED that each kind of human-readable | interoperability, it is RECOMMENDED that each kind of human-readable | |||
| metadata provided includes an instance of its metadata parameter | metadata provided include an instance of its metadata parameter | |||
| without any language tags in addition to any language-specific | without any language tags in addition to any language-specific | |||
| parameters, and it is RECOMMENDED that any human-readable fields sent | parameters, and it is RECOMMENDED that any human-readable fields sent | |||
| without language tags contain values suitable for display on a wide | without language tags contain values suitable for display on a wide | |||
| variety of systems. | variety of systems. | |||
| 2.2. Signed Protected Resource Metadata | 2.2. Signed Protected Resource Metadata | |||
| In addition to JSON elements, metadata values MAY also be provided as | In addition to JSON elements, metadata values MAY also be provided as | |||
| a signed_metadata value, which is a JSON Web Token (JWT) [JWT] that | a signed_metadata value, which is a JSON Web Token (JWT) [JWT] that | |||
| asserts metadata values about the protected resource as a bundle. A | asserts metadata values about the protected resource as a bundle. A | |||
| set of metadata parameters that can be used in signed metadata as | set of metadata parameters that can be used in signed metadata as | |||
| claims are defined in Section 2. The signed metadata MUST be | claims are defined in Section 2. The signed metadata MUST be | |||
| digitally signed or MACed using JSON Web Signature (JWS) [JWS] and | digitally signed or MACed (protected with a Message Authentication | |||
| MUST contain an iss (issuer) claim denoting the party attesting to | Code) using a JSON Web Signature (JWS) [JWS] and MUST contain an iss | |||
| the claims in the signed metadata. Consumers of the metadata MAY | (issuer) claim denoting the party attesting to the claims in the | |||
| ignore the signed metadata if they do not support this feature. If | signed metadata. Consumers of the metadata MAY ignore the signed | |||
| the consumer of the metadata supports signed metadata, metadata | metadata if they do not support this feature. If the consumer of the | |||
| values conveyed in the signed metadata MUST take precedence over the | metadata supports signed metadata, metadata values conveyed in the | |||
| corresponding values conveyed using plain JSON elements. | signed metadata MUST take precedence over the corresponding values | |||
| conveyed using plain JSON elements. | ||||
| Signed metadata is included in the protected resource metadata JSON | Signed metadata is included in the protected resource metadata JSON | |||
| object using this OPTIONAL metadata parameter: | object using this OPTIONAL metadata parameter: | |||
| signed_metadata | signed_metadata | |||
| A JWT containing metadata parameters about the protected resource | A JWT containing metadata parameters about the protected resource | |||
| as claims. This is a string value consisting of the entire signed | as claims. This is a string value consisting of the entire signed | |||
| JWT. A signed_metadata parameter SHOULD NOT appear as a claim in | JWT. A signed_metadata parameter SHOULD NOT appear as a claim in | |||
| the JWT; it is RECOMMENDED to reject any metadata in which this | the JWT; it is RECOMMENDED to reject any metadata in which this | |||
| occurs. | occurs. | |||
| 3. Obtaining Protected Resource Metadata | 3. Obtaining Protected Resource Metadata | |||
| Protected resources supporting metadata MUST make a JSON document | Protected resources supporting metadata MUST make a JSON document | |||
| containing metadata as specified in Section 2 available at a URL | containing metadata as specified in Section 2 available at a URL | |||
| formed by inserting a well-known URI string into the protected | formed by inserting a well-known URI string into the protected | |||
| resource's resource identifier between the host component and the | resource's resource identifier between the host component and the | |||
| path and/or query components, if any. By default, the well-known URI | path and/or query components, if any. By default, the well-known URI | |||
| string used is /.well-known/oauth-protected-resource. The syntax and | string used is /.well-known/oauth-protected-resource. The syntax and | |||
| semantics of .well-known are defined in [RFC8615]. The well-known | semantics of .well-known are defined in [RFC8615]. The well-known | |||
| URI path suffix used MUST be registered in the IANA "Well-Known URIs" | URI path suffix used MUST be registered in the "Well-Known URIs" | |||
| registry [IANA.well-known]. Examples of this construction can be | registry [IANA.well-known]. Examples of this construction can be | |||
| found in Section 3.1. | found in Section 3.1. | |||
| The term "application", as used below (and as used in [RFC8414]), | The term "application", as used below (and as used in [RFC8414]), | |||
| encompasses all the components used to accomplish the task for the | encompasses all the components used to accomplish the task for the | |||
| use case. That can include OAuth clients, authorization servers, | use case. That can include OAuth clients, authorization servers, | |||
| protected resources, and non-OAuth components, inclusive of the code | protected resources, and non-OAuth components, inclusive of the code | |||
| running in each of them. Applications are built to solve particular | running in each of them. Applications are built to solve particular | |||
| problems and may utilize many components and services. | problems and may utilize many components and services. | |||
| Different applications utilizing OAuth protected resources in | Different applications utilizing OAuth protected resources in | |||
| application-specific ways MAY define and register different well- | application-specific ways MAY define and register different well- | |||
| known URI path suffixes for publishing protected resource metadata | known URI path suffixes for publishing protected resource metadata | |||
| used by those applications. For instance, if the Example application | used by those applications. For instance, if the Example application | |||
| uses an OAuth protected resource in an Example-specific way, and | uses an OAuth protected resource in an Example-specific way and there | |||
| there are Example-specific metadata values that it needs to publish, | are Example-specific metadata values that it needs to publish, then | |||
| then it might register and use the example-protected-resource URI | it might register and use the example-protected-resource URI path | |||
| path suffix and publish the metadata document at the URL formed by | suffix and publish the metadata document at the URL formed by | |||
| inserting /.well-known/example-protected-resource between the host | inserting /.well-known/example-protected-resource between the host | |||
| and path and/or query components of the protected resource's resource | and path and/or query components of the protected resource's resource | |||
| identifier. Alternatively, many such applications will use the | identifier. Alternatively, many such applications will use the | |||
| default well-known URI string /.well-known/oauth-protected-resource, | default well-known URI string /.well-known/oauth-protected-resource, | |||
| which is the right choice for general-purpose OAuth protected | which is the right choice for general-purpose OAuth protected | |||
| resources, and not register an application-specific one. | resources, and not register an application-specific one. | |||
| An OAuth 2.0 application using this specification MUST specify what | An OAuth 2.0 application using this specification MUST specify what | |||
| well-known URI suffix it will use for this purpose. The same | well-known URI suffix it will use for this purpose. The same | |||
| protected resource MAY choose to publish its metadata at multiple | protected resource MAY choose to publish its metadata at multiple | |||
| well-known locations derived from its resource identifier, for | well-known locations derived from its resource identifier -- for | |||
| example, publishing metadata at both /.well-known/example-protected- | example, publishing metadata at both /.well-known/example-protected- | |||
| resource and /.well-known/oauth-protected-resource. | resource and /.well-known/oauth-protected-resource. | |||
| 3.1. Protected Resource Metadata Request | 3.1. Protected Resource Metadata Request | |||
| A protected resource metadata document MUST be queried using an HTTP | A protected resource metadata document MUST be queried using an HTTP | |||
| GET request at the previously specified URL. | GET request at the previously specified URL. | |||
| The consumer of the metadata would make the following request when | The consumer of the metadata would make the following request when | |||
| the resource identifier is https://resource.example.com and the well- | the resource identifier is https://resource.example.com and the well- | |||
| known URI path suffix is oauth-protected-resource to obtain the | known URI path suffix is oauth-protected-resource to obtain the | |||
| metadata, since the resource identifier contains no path component: | metadata, since the resource identifier contains no path component: | |||
| GET /.well-known/oauth-protected-resource HTTP/1.1 | GET /.well-known/oauth-protected-resource HTTP/1.1 | |||
| Host: resource.example.com | Host: resource.example.com | |||
| If the resource identifier value contains a path or query component, | If the resource identifier value contains a path or query component, | |||
| any terminating / following the host component MUST be removed before | any terminating slash (/) following the host component MUST be | |||
| inserting /.well-known/ and the well-known URI path suffix between | removed before inserting /.well-known/ and the well-known URI path | |||
| the host component and the path and/or query components. The | suffix between the host component and the path and/or query | |||
| consumer of the metadata would make the following request when the | components. The consumer of the metadata would make the following | |||
| resource identifier is https://resource.example.com/resource1 and the | request when the resource identifier is https://resource.example.com/ | |||
| well-known URI path suffix is oauth-protected-resource to obtain the | resource1 and the well-known URI path suffix is oauth-protected- | |||
| metadata, since the resource identifier contains a path component: | resource to obtain the metadata, since the resource identifier | |||
| contains a path component: | ||||
| GET /.well-known/oauth-protected-resource/resource1 HTTP/1.1 | GET /.well-known/oauth-protected-resource/resource1 HTTP/1.1 | |||
| Host: resource.example.com | Host: resource.example.com | |||
| Using path components enables supporting multiple resources per host. | Using path components enables supporting multiple resources per host. | |||
| This is required in some multi-tenant hosting configurations. This | This is required in some multi-tenant hosting configurations. This | |||
| use of .well-known is for supporting multiple resources per host; | use of .well-known is for supporting multiple resources per host; | |||
| unlike its use in [RFC8615], it does not provide general information | unlike its use in [RFC8615], it does not provide general information | |||
| about the host. | about the host. | |||
| skipping to change at page 12, line 10 ¶ | skipping to change at line 500 ¶ | |||
| specification defines the authorization server metadata parameter | specification defines the authorization server metadata parameter | |||
| protected_resources, which enables the authorization server to | protected_resources, which enables the authorization server to | |||
| explicitly list the protected resources. Note that if the set of | explicitly list the protected resources. Note that if the set of | |||
| legitimate authorization servers to use with a protected resource is | legitimate authorization servers to use with a protected resource is | |||
| also enumerable, lists in the authorization server metadata and | also enumerable, lists in the authorization server metadata and | |||
| protected resource metadata should be cross-checked against one | protected resource metadata should be cross-checked against one | |||
| another for consistency when these lists are used by the application | another for consistency when these lists are used by the application | |||
| profile. | profile. | |||
| The following authorization server metadata parameter is defined by | The following authorization server metadata parameter is defined by | |||
| this specification and is registered in the IANA "OAuth Authorization | this specification and is registered in the "OAuth Authorization | |||
| Server Metadata" registry established in OAuth 2.0 Authorization | Server Metadata" registry established in "OAuth 2.0 Authorization | |||
| Server Metadata [RFC8414]. | Server Metadata" [RFC8414]. | |||
| protected_resources | protected_resources | |||
| OPTIONAL. JSON array containing a list of resource identifiers | OPTIONAL. JSON array containing a list of resource identifiers | |||
| for OAuth protected resources for protected resources that can be | for OAuth protected resources that can be used with this | |||
| used with this authorization server. Authorization servers MAY | authorization server. Authorization servers MAY choose not to | |||
| choose not to advertise some supported protected resources even | advertise some supported protected resources even when this | |||
| when this parameter is used. In some use cases, the set of | parameter is used. In some use cases, the set of protected | |||
| protected resources will not be enumerable, in which case this | resources will not be enumerable, in which case this metadata | |||
| metadata parameter will not be present. | parameter will not be present. | |||
| 5. Use of WWW-Authenticate for Protected Resource Metadata | 5. Use of WWW-Authenticate for Protected Resource Metadata | |||
| A protected resource MAY use the WWW-Authenticate [RFC9110] HTTP | A protected resource MAY use the WWW-Authenticate HTTP response | |||
| response header field to return a URL to its protected resource | header field, as discussed in [RFC9110], to return a URL to its | |||
| metadata to the client. The client can then retrieve protected | protected resource metadata to the client. The client can then | |||
| resource metadata as described in Section 3. The client might then, | retrieve protected resource metadata as described in Section 3. The | |||
| for instance, determine what authorization server to use for the | client might then, for instance, determine what authorization server | |||
| resource based on protected resource metadata retrieved. | to use for the resource based on protected resource metadata | |||
| retrieved. | ||||
| A typical end-to-end flow doing so is as follows. Note that while | A typical end-to-end flow doing so is as follows. Note that while | |||
| this example uses the OAuth 2.0 Authorization Code flow, a similar | this example uses the OAuth 2.0 authorization code flow, a similar | |||
| sequence could also be implemented with any other OAuth flow. | sequence could also be implemented with any other OAuth flow. | |||
| +----------+ +----------+ +---------------+ | +----------+ +----------+ +---------------+ | |||
| | Client | | Resource | | Authorization | | | Client | | Resource | | Authorization | | |||
| | | | Server | | Server | | | | | Server | | Server | | |||
| +----+-----+ +----+-----+ +-------+-------+ | +----+-----+ +----+-----+ +-------+-------+ | |||
| | | | | | | | | |||
| | 1. Resource Request | | | | 1. Resource Request | | | |||
| | ----------------------> | | | | ----------------------> | | | |||
| | Without Access Token | | | | Without Access Token | | | |||
| skipping to change at page 13, line 51 ¶ | skipping to change at line 573 ¶ | |||
| +-+-------------------------+------------------+-+ | +-+-------------------------+------------------+-+ | |||
| | | | | | | | | |||
| | 10. Resource Request | | | | 10. Resource Request | | | |||
| | ----------------------> | | | | ----------------------> | | | |||
| | With Access Token | | | | With Access Token | | | |||
| | | | | | | | | |||
| | | | | | | | | |||
| | 11. Resource Response | | | | 11. Resource Response | | | |||
| | <---------------------- | | | | <---------------------- | | | |||
| | | | | | | | | |||
| +----+-----+ +----+-----+ +-------+-------+ | ||||
| | Client | | Resource | | Authorization | | ||||
| | | | Server | | Server | | ||||
| +----------+ +----------+ +---------------+ | ||||
| Figure 1: Sequence Diagram | Figure 1: Sequence Diagram | |||
| 1. The client makes a request to a protected resource without | 1. The client makes a request to a protected resource without | |||
| presenting an access token. | presenting an access token. | |||
| 2. The resource server responds with a WWW-Authenticate header | 2. The resource server responds with a WWW-Authenticate header | |||
| including the URL of the protected resource metadata. | including the URL of the protected resource metadata. | |||
| 3. The client fetches the protected resource metadata from this | 3. The client fetches the protected resource metadata from this | |||
| URL. | URL. | |||
| 4. The resource server responds with the protected resource | 4. The resource server responds with the protected resource | |||
| metadata according to Section 3.2. | metadata according to Section 3.2. | |||
| 5. The client validates the protected resource metadata, as | 5. The client validates the protected resource metadata, as | |||
| described in Section 3.3. | described in Section 3.3, and builds the authorization server | |||
| metadata URL from an issuer identifier in the resource metadata | ||||
| according to [RFC8414]. | ||||
| 6. The client builds the authorization server metadata URL from an | 6. The client makes a request to fetch the authorization server | |||
| issuer identifier in the resource metadata according to | ||||
| [RFC8414] and makes a request to fetch the authorization server | ||||
| metadata. | metadata. | |||
| 7. The authorization server responds with the authorization server | 7. The authorization server responds with the authorization server | |||
| metadata document according to [RFC8414]. | metadata document according to [RFC8414]. | |||
| 8. The client directs the user agent to the authorization server to | 8. The client directs the user agent to the authorization server to | |||
| begin the authorization flow. | begin the authorization flow. | |||
| 9. The authorization exchange is completed and the authorization | 9. The authorization exchange is completed and the authorization | |||
| server returns an access token to the client. | server returns an access token to the client. | |||
| skipping to change at page 15, line 5 ¶ | skipping to change at line 626 ¶ | |||
| This specification introduces a new parameter in the WWW-Authenticate | This specification introduces a new parameter in the WWW-Authenticate | |||
| HTTP response header field to indicate the protected resource | HTTP response header field to indicate the protected resource | |||
| metadata URL: | metadata URL: | |||
| resource_metadata: | resource_metadata: | |||
| The URL of the protected resource metadata. | The URL of the protected resource metadata. | |||
| The response below is an example of a WWW-Authenticate header that | The response below is an example of a WWW-Authenticate header that | |||
| includes the resource identifier. | includes the resource identifier. | |||
| HTTP/1.1 400 Bad Request | HTTP/1.1 401 Unauthorized | |||
| WWW-Authenticate: Bearer error="invalid_request", | WWW-Authenticate: Bearer resource_metadata= | |||
| error_description="No access token was provided in this request", | ||||
| resource_metadata= | ||||
| "https://resource.example.com/.well-known/oauth-protected-resource" | "https://resource.example.com/.well-known/oauth-protected-resource" | |||
| The HTTP status code and error string in the example response above | The HTTP status code in the example response above is defined by | |||
| are defined by [RFC6750]. | [RFC6750]. | |||
| This parameter MAY also be used in WWW-Authenticate responses using | This parameter MAY also be used in WWW-Authenticate responses using | |||
| Authorization schemes other than Bearer [RFC6750], such as the DPoP | authorization schemes other than "Bearer" [RFC6750], such as the DPoP | |||
| scheme defined by [RFC9449]. | scheme defined by [RFC9449]. | |||
| The resource_metadata parameter MAY be combined with other parameters | The resource_metadata parameter MAY be combined with other parameters | |||
| defined in other extensions, such as the max_age parameter defined by | defined in other extensions, such as the max_age parameter defined by | |||
| [RFC9470]. | [RFC9470]. | |||
| 5.2. Changes to Resource Metadata | 5.2. Changes to Resource Metadata | |||
| At any point, for any reason determined by the resource server, the | At any point, for any reason determined by the resource server, the | |||
| protected resource MAY respond with a new WWW-Authenticate challenge | protected resource MAY respond with a new WWW-Authenticate challenge | |||
| skipping to change at page 15, line 37 ¶ | skipping to change at line 656 ¶ | |||
| indicate that its metadata may have changed. If the client receives | indicate that its metadata may have changed. If the client receives | |||
| such a WWW-Authenticate response, it SHOULD retrieve the updated | such a WWW-Authenticate response, it SHOULD retrieve the updated | |||
| protected resource metadata and use the new metadata values obtained, | protected resource metadata and use the new metadata values obtained, | |||
| after validating them as described in Section 3.3. Among other | after validating them as described in Section 3.3. Among other | |||
| things, this enables a resource server to change which authorization | things, this enables a resource server to change which authorization | |||
| servers it uses without any other coordination with clients. | servers it uses without any other coordination with clients. | |||
| 5.3. Client Identifier and Client Authentication | 5.3. Client Identifier and Client Authentication | |||
| The way in which the client identifier is established at the | The way in which the client identifier is established at the | |||
| authorization server is out of scope of this specification. | authorization server is out of scope for this specification. | |||
| This specification is intended to be deployed in scenarios where the | This specification is intended to be deployed in scenarios where the | |||
| client has no prior knowledge about the resource server, and the | client has no prior knowledge about the resource server and where the | |||
| resource server might or might not have prior knowledge about the | resource server might or might not have prior knowledge about the | |||
| client. | client. | |||
| There are some existing methods by which an unrecognized client can | There are some existing methods by which an unrecognized client can | |||
| make use of an authorization server, such as using Dynamic Client | make use of an authorization server, such as using Dynamic Client | |||
| Registration [RFC7591] to register the client prior to initiating the | Registration [RFC7591] to register the client prior to initiating the | |||
| authorization flow. Future OAuth extensions might define | authorization flow. Future OAuth extensions might define | |||
| alternatives, such as using URLs to identify clients. | alternatives, such as using URLs to identify clients. | |||
| 5.4. Compatibility with Other Authentication Methods | 5.4. Compatibility with Other Authentication Methods | |||
| Resource servers MAY return other WWW-Authenticate headers indicating | Resource servers MAY return other WWW-Authenticate headers indicating | |||
| various authentication schemes. This allows the resource server to | various authentication schemes. This allows the resource server to | |||
| support clients that may or may not implement this specification, and | support clients that may or may not implement this specification and | |||
| allows clients to choose their preferred authentication scheme. | allows clients to choose their preferred authentication scheme. | |||
| 6. String Operations | 6. String Operations | |||
| Processing some OAuth 2.0 messages requires comparing values in the | Processing some OAuth 2.0 messages requires comparing values in the | |||
| messages to known values. For example, the member names in the | messages to known values. For example, the member names in the | |||
| metadata response might be compared to specific member names such as | metadata response might be compared to specific member names such as | |||
| resource. Comparing Unicode [UNICODE] strings, however, has | resource. Comparing Unicode strings [UNICODE], however, has | |||
| significant security implications. | significant security implications. | |||
| Therefore, comparisons between JSON strings and other Unicode strings | Therefore, comparisons between JSON strings and other Unicode strings | |||
| MUST be performed as specified below: | MUST be performed as specified below: | |||
| 1. Remove any JSON applied escaping to produce an array of Unicode | 1. Remove any JSON-applied escaping to produce an array of Unicode | |||
| code points. | code points. | |||
| 2. Unicode Normalization [USA15] MUST NOT be applied at any point to | 2. Unicode Normalization [USA15] MUST NOT be applied at any point to | |||
| either the JSON string or to the string it is to be compared | either the JSON string or the string it is to be compared | |||
| against. | against. | |||
| 3. Comparisons between the two strings MUST be performed as a | 3. Comparisons between the two strings MUST be performed as a | |||
| Unicode code point to code point equality comparison. | Unicode code-point-to-code-point equality comparison. | |||
| Note that this is the same equality comparison procedure described in | Note that this is the same equality comparison procedure as that | |||
| Section 8.3 of [RFC8259]. | described in Section 8.3 of [RFC8259]. | |||
| 7. Security Considerations | 7. Security Considerations | |||
| 7.1. TLS Requirements | 7.1. TLS Requirements | |||
| Implementations MUST support TLS. They MUST follow the guidance in | Implementations MUST support TLS. They MUST follow the guidance in | |||
| BCP 195 [RFC8996] [RFC9325], which provides recommendations and | [BCP195], which provides recommendations and requirements for | |||
| requirements for improving the security of deployed services that use | improving the security of deployed services that use TLS. | |||
| TLS. | ||||
| Use of TLS at the protected resource metadata URLs protects against | The use of TLS at the protected resource metadata URLs protects | |||
| information disclosure and tampering. | against information disclosure and tampering. | |||
| 7.2. Scopes | 7.2. Scopes | |||
| The scopes_supported parameter is the list of scopes the resource | The scopes_supported parameter is the list of scopes the resource | |||
| server is willing to disclose that it supports. It is not meant to | server is willing to disclose that it supports. It is not meant to | |||
| indicate that an OAuth client should request all scopes in the list. | indicate that an OAuth client should request all scopes in the list. | |||
| The client SHOULD still follow OAuth best practices and request | The client SHOULD still follow OAuth best practices and request | |||
| tokens with as limited scope as possible for the given operation, as | tokens with as limited a scope as possible for the given operation, | |||
| described in Section 2.3 of OAuth 2.0 Security Best Current Practice | as described in Section 2.3 of "Best Current Practice for OAuth 2.0 | |||
| [I-D.ietf-oauth-security-topics]. | Security" [RFC9700]. | |||
| 7.3. Impersonation Attacks | 7.3. Impersonation Attacks | |||
| TLS certificate checking MUST be performed by the client as described | TLS certificate checking MUST be performed by the client as described | |||
| in [RFC9525] when making a protected resource metadata request. | in [RFC9525] when making a protected resource metadata request. | |||
| Checking that the server certificate is valid for the resource | Checking that the server certificate is valid for the resource | |||
| identifier URL prevents man-in-middle and DNS-based attacks. These | identifier URL prevents adversary-in-the-middle and DNS-based | |||
| attacks could cause a client to be tricked into using an attacker's | attacks. These attacks could cause a client to be tricked into using | |||
| resource server, which would enable impersonation of the legitimate | an attacker's resource server, which would enable impersonation of | |||
| protected resource. If an attacker can accomplish this, they can | the legitimate protected resource. If an attacker can accomplish | |||
| access the resources that the affected client has access to using the | this, they can access the resources that the affected client has | |||
| protected resource that they are impersonating. | access to, using the protected resource that they are impersonating. | |||
| An attacker may also attempt to impersonate a protected resource by | An attacker may also attempt to impersonate a protected resource by | |||
| publishing a metadata document that contains a resource metadata | publishing a metadata document that contains a resource metadata | |||
| parameter using the resource identifier URL of the protected resource | parameter using the resource identifier URL of the protected resource | |||
| being impersonated, but containing information of the attacker's | being impersonated but that contains information of the attacker's | |||
| choosing. This would enable it to impersonate that protected | choosing. This would enable it to impersonate that protected | |||
| resource, if accepted by the client. To prevent this, the client | resource, if accepted by the client. To prevent this, the client | |||
| MUST ensure that the resource identifier URL it is using as the | MUST ensure that the resource identifier URL it is using as the | |||
| prefix for the metadata request exactly matches the value of the | prefix for the metadata request exactly matches the value of the | |||
| resource metadata parameter in the protected resource metadata | resource metadata parameter in the protected resource metadata | |||
| document received by the client, as described in Section 3.3. | document received by the client, as described in Section 3.3. | |||
| 7.4. Audience-Restricted Access Tokens | 7.4. Audience-Restricted Access Tokens | |||
| If a client expects to interact with multiple resource servers, the | If a client expects to interact with multiple resource servers, the | |||
| client SHOULD request audience-restricted access tokens using | client SHOULD request audience-restricted access tokens using | |||
| [RFC8707], and the authorization server SHOULD support audience- | [RFC8707], and the authorization server SHOULD support audience- | |||
| restricted access tokens. | restricted access tokens. | |||
| Without audience-restricted access tokens, a malicious resource | Without audience-restricted access tokens, a malicious resource | |||
| server (RS1) may be able to use the WWW-Authenticate header to get a | server (RS1) may be able to use the WWW-Authenticate header to get a | |||
| client to request an access token with a scope used by a legitimate | client to request an access token with a scope used by a legitimate | |||
| resource server (RS2), and after the client sends a request to RS1, | resource server (RS2), and after the client sends a request to RS1, | |||
| then RS1 could re-use the access token at RS2. | then RS1 could reuse the access token at RS2. | |||
| While this attack is not explicitly enabled by this specification, | While this attack is not explicitly enabled by this specification and | |||
| and is possible in a plain OAuth 2.0 deployment, it is made somewhat | is possible in a plain OAuth 2.0 deployment, it is made somewhat more | |||
| more likely by the use of dynamically-configured clients. As such, | likely by the use of dynamically configured clients. As such, the | |||
| the use of audience-restricted access tokens and Resource Indicators | use of audience-restricted access tokens and Resource Indicators | |||
| [RFC8707] is RECOMMENDED when using the features in this | [RFC8707] is RECOMMENDED when using the features in this | |||
| specification. | specification. | |||
| 7.5. Publishing Metadata in a Standard Format | 7.5. Publishing Metadata in a Standard Format | |||
| Publishing information about the protected resource in a standard | Publishing information about the protected resource in a standard | |||
| format makes it easier for both legitimate clients and attackers to | format makes it easier for both legitimate clients and attackers to | |||
| use the protected resource. Whether a protected resource publishes | use the protected resource. Whether a protected resource publishes | |||
| its metadata in an ad-hoc manner or in the standard format defined by | its metadata in an ad hoc manner or in the standard format defined by | |||
| this specification, the same defenses against attacks that might be | this specification, the same defenses against attacks that might be | |||
| mounted that use this information should be applied. | mounted that use this information should be applied. | |||
| 7.6. Authorization Servers | 7.6. Authorization Servers | |||
| To support use cases in which the set of legitimate authorization | To support use cases in which the set of legitimate authorization | |||
| servers to use with the protected resource is enumerable, this | servers to use with the protected resource is enumerable, this | |||
| specification defines the authorization_servers metadata parameter, | specification defines the authorization_servers metadata parameter, | |||
| which enables explicitly listing them. Note that if the set of | which enables explicitly listing them. Note that if the set of | |||
| legitimate protected resources to use with an authorization server is | legitimate protected resources to use with an authorization server is | |||
| also enumerable, lists in the protected resource metadata and | also enumerable, lists in the protected resource metadata and | |||
| authorization server metadata should be cross-checked against one | authorization server metadata should be cross-checked against one | |||
| another for consistency when these lists are used by the application | another for consistency when these lists are used by the application | |||
| profile. | profile. | |||
| Secure determination of appropriate authorization servers to use with | Secure determination of appropriate authorization servers to use with | |||
| a protected resource for all use cases is out of scope of this | a protected resource for all use cases is out of scope for this | |||
| specification. This specification assumes that the client has a | specification. This specification assumes that the client has a | |||
| means of determining appropriate authorization servers to use with a | means of determining appropriate authorization servers to use with a | |||
| protected resource and that the client is using the correct metadata | protected resource and that the client is using the correct metadata | |||
| for each protected resource. Implementers need to be aware that if | for each protected resource. Implementers need to be aware that if | |||
| an inappropriate authorization server is used by the client, that an | an inappropriate authorization server is used by the client, an | |||
| attacker may be able to act as a man-in-the-middle proxy to a valid | attacker may be able to act as an adversary-in-the-middle proxy to a | |||
| authorization server without it being detected by the authorization | valid authorization server without it being detected by the | |||
| server or the client. | authorization server or the client. | |||
| The ways to determine the appropriate authorization servers to use | The ways to determine the appropriate authorization servers to use | |||
| with a protected resource are in general, application-dependent. For | with a protected resource are, in general, application dependent. | |||
| instance, some protected resources are used with a fixed | For instance, some protected resources are used with a fixed | |||
| authorization server or set of authorization servers, the locations | authorization server or a set of authorization servers, the locations | |||
| of which may be well known, or which could be published as metadata | of which may be known via out-of-band mechanisms. Alternatively, as | |||
| values by the protected resource. In other cases, the set of | described in this specification, the locations of the authorization | |||
| authorization servers that can be used with a protected resource can | servers could be published by the protected resource as metadata | |||
| by dynamically changed by administrative actions or by changes to the | values. In other cases, the set of authorization servers that can be | |||
| set of authorization servers adhering to a trust framework. Many | used with a protected resource can be dynamically changed by | |||
| other means of determining appropriate associations between protected | administrative actions or by changes to the set of authorization | |||
| resources and authorization servers are also possible. | servers adhering to a trust framework. Many other means of | |||
| determining appropriate associations between protected resources and | ||||
| authorization servers are also possible. | ||||
| 7.7. Server-Side Request Forgery (SSRF) | 7.7. Server-Side Request Forgery (SSRF) | |||
| The OAuth client is expected to fetch the authorization server | The OAuth client is expected to fetch the authorization server | |||
| metadata based on the value of the issuer in the resource server | metadata based on the value of the issuer in the resource server | |||
| metadata. Since this specification enables clients to interoperate | metadata. Since this specification enables clients to interoperate | |||
| with RSs and ASs it has no prior knowledge of, this opens a risk for | with RSs and ASes it has no prior knowledge of, this opens a risk for | |||
| SSRF attacks by malicious users or malicious resource servers. | Server-Side Request Forgery (SSRF) attacks by malicious users or | |||
| Clients SHOULD take appropriate precautions against SSRF attacks, | malicious resource servers. Clients SHOULD take appropriate | |||
| such as blocking requests to internal IP address ranges. Further | precautions against SSRF attacks, such as blocking requests to | |||
| recommendations can be found in the OWASP SSRF Prevention Cheat Sheet | internal IP address ranges. Further recommendations can be found in | |||
| [OWASP.SSRF]. | the Open Worldwide Application Security Project (OWASP) SSRF | |||
| Prevention Cheat Sheet [OWASP.SSRF]. | ||||
| 7.8. Phishing | 7.8. Phishing | |||
| This specification may be deployed in a scenario where the desired | This specification may be deployed in a scenario where the desired | |||
| HTTP resource is identified by a user-selected URL. If this resource | HTTP resource is identified by a user-selected URL. If this resource | |||
| is malicious or compromised, it could mislead the user into revealing | is malicious or compromised, it could mislead the user into revealing | |||
| their account credentials or authorizing unwanted access to OAuth- | their account credentials or authorizing unwanted access to OAuth- | |||
| controlled capabilities. This risk is reduced, but not eliminated, | controlled capabilities. This risk is reduced, but not eliminated, | |||
| by following best practices for OAuth user interfaces, such as | by following best practices for OAuth user interfaces, such as | |||
| providing clear notice to the user, displaying the authorization | providing clear notice to the user, displaying the authorization | |||
| server's domain name, supporting origin-bound phishing-resistant | server's domain name, supporting origin-bound phishing-resistant | |||
| authenticators, supporting the use of password managers, and applying | authenticators, supporting the use of password managers, and applying | |||
| heuristic checks such as domain reputation. | heuristic checks such as domain reputation. | |||
| 7.9. Differences between Unsigned and Signed Metadata | 7.9. Differences Between Unsigned and Signed Metadata | |||
| Unsigned metadata is integrity protected by use of TLS at the site | Unsigned metadata is integrity protected by the use of TLS at the | |||
| where it is hosted. This means that its security is dependent upon | site where it is hosted. This means that its security is dependent | |||
| the Internet Public Key Infrastructure (PKI) [RFC9525]. Signed | upon the Internet Public Key Infrastructure using X.509 (PKIX), as | |||
| metadata is additionally integrity protected by the JWS signature | described in [RFC9525]. Signed metadata is additionally integrity | |||
| applied by the issuer, which is not dependent upon the Internet PKI. | protected by the JWS signature applied by the issuer, which is not | |||
| dependent upon the Internet PKI. | ||||
| When using unsigned metadata, the party issuing the metadata is the | When using unsigned metadata, the party issuing the metadata is the | |||
| protected resource itself, which is represented by the resource value | protected resource itself, which is represented by the resource value | |||
| in the metadata. Whereas, when using signed metadata, the party | in the metadata, whereas when using signed metadata, the party | |||
| issuing the metadata is represented by the iss (issuer) claim in the | issuing the metadata is represented by the iss (issuer) claim in the | |||
| signed metadata. When using signed metadata, applications can make | signed metadata. When using signed metadata, applications can make | |||
| trust decisions based on the issuer that performed the signing -- | trust decisions based on the issuer that performed the signing -- | |||
| information that is not available when using unsigned metadata. How | information that is not available when using unsigned metadata. How | |||
| these trust decisions are made is out of scope for this | these trust decisions are made is out of scope for this | |||
| specification. | specification. | |||
| 7.10. Metadata Caching | 7.10. Metadata Caching | |||
| Protected resource metadata is retrieved using an HTTP GET request, | Protected resource metadata is retrieved using an HTTP GET request, | |||
| as specified in Section 3.1. Normal HTTP caching behaviors apply, | as specified in Section 3.1. Normal HTTP caching behaviors apply, | |||
| meaning that the GET may retrieve a cached copy of the content, | meaning that the GET request may retrieve a cached copy of the | |||
| rather than the latest copy. Implementations should utlize HTTP | content, rather than the latest copy. Implementations should utilize | |||
| caching directives such as Cache-Control with max-age, as defined in | HTTP caching directives such as Cache-Control with max-age, as | |||
| [RFC7234], to enable caching of retrieved metadata for appropriate | defined in [RFC9111], to enable caching of retrieved metadata for | |||
| time periods. | appropriate time periods. | |||
| 8. IANA Considerations | 8. IANA Considerations | |||
| The following registration procedure is used for the registry | Values are registered via Specification Required [RFC8126]. | |||
| established by this specification. | Registration requests should be sent to <oauth-ext-review@ietf.org> | |||
| to initiate a two-week review period. However, to allow for the | ||||
| Values are registered on a Specification Required [RFC8126] basis | allocation of values prior to publication of the final version of a | |||
| after a two-week review period on the oauth-ext-review@ietf.org | specification, the designated experts may approve registration once | |||
| mailing list, on the advice of one or more Designated Experts. | they are satisfied that the specification will be completed and | |||
| However, to allow for the allocation of values prior to publication | published. However, if the specification is not completed and | |||
| of the final version of a specification, the Designated Experts may | published in a timely manner, as determined by the designated | |||
| approve registration once they are satisfied that the specification | experts, the designated experts may request that IANA withdraw the | |||
| will be completed and published. However, if the specification is | registration. | |||
| not completed and published in a timely manner, as determined by the | ||||
| Designated Experts, the Designated Experts may request that IANA | ||||
| withdraw the registration. | ||||
| Registration requests sent to the mailing list for review should use | Registration requests sent to the mailing list for review should use | |||
| an appropriate subject (e.g., "Request to register OAuth Protected | an appropriate subject (e.g., "Request to register OAuth Protected | |||
| Resource Metadata: example"). | Resource Metadata: example"). | |||
| Within the review period, the Designated Experts will either approve | Within the review period, the designated experts will either approve | |||
| or deny the registration request, communicating this decision to the | or deny the registration request, communicating this decision to the | |||
| review list and IANA. Denials should include an explanation and, if | review list and IANA. Denials should include an explanation and, if | |||
| applicable, suggestions as to how to make the request successful. | applicable, suggestions as to how to make the request successful. If | |||
| The IANA escalation process is followed when the Designated Experts | the designated experts are not responsive, the registration | |||
| are not responsive within 14 days. | requesters should contact IANA to escalate the process. | |||
| Criteria that should be applied by the Designated Experts includes | Designated experts should apply the following criteria when reviewing | |||
| determining whether the proposed registration duplicates existing | proposed registrations: They must be unique -- that is, they should | |||
| functionality, determining whether it is likely to be of general | not duplicate existing functionality; they are likely generally | |||
| applicability or whether it is useful only for a single application, | applicable, as opposed to being used for a single application; and | |||
| and whether the registration makes sense. | they are clear and fit the purpose of the registry. | |||
| IANA must only accept registry updates from the Designated Experts | IANA must only accept registry updates from the designated experts | |||
| and should direct all requests for registration to the review mailing | and should direct all requests for registration to the review mailing | |||
| list. | list. | |||
| It is suggested that multiple Designated Experts be appointed who are | In order to enable broadly informed review of registration decisions, | |||
| able to represent the perspectives of different applications using | there should be multiple designated experts to represent the | |||
| this specification, in order to enable broadly-informed review of | perspectives of different applications using this specification. In | |||
| registration decisions. In cases where a registration decision could | cases where registration may be perceived as a conflict of interest | |||
| be perceived as creating a conflict of interest for a particular | for a particular expert, that expert should defer to the judgment of | |||
| Expert, that Expert should defer to the judgment of the other | the other experts. | |||
| Experts. | ||||
| The reason for the use of the mailing list is to enable public review | The mailing list is used to enable public review of registration | |||
| of registration requests, enabling both Designated Experts and other | requests, which enables both designated experts and other interested | |||
| interested parties to provide feedback on proposed registrations. | parties to provide feedback on proposed registrations. Designated | |||
| The reason to allow the Designated Experts to allocate values prior | experts may allocate values prior to publication of the final | |||
| to publication as a final specification is to enable giving authors | specification. This allows authors to receive guidance from the | |||
| of specifications proposing registrations the benefit of review by | designated experts early, so any identified issues can be fixed | |||
| the Designated Experts before the specification is completely done, | before the final specification is published. | |||
| so that if problems are identified, the authors can iterate and fix | ||||
| them before publication of the final specification. | ||||
| 8.1. OAuth Protected Resource Metadata Registry | 8.1. OAuth Protected Resource Metadata Registry | |||
| This specification establishes the IANA "OAuth Protected Resource | This specification establishes the "OAuth Protected Resource | |||
| Metadata" registry for OAuth 2.0 protected resource metadata names. | Metadata" registry for OAuth 2.0 protected resource metadata names. | |||
| The registry records the protected resource metadata parameter and a | The registry records the protected resource metadata parameter and a | |||
| reference to the specification that defines it. | reference to the specification that defines it. | |||
| 8.1.1. Registration Template | 8.1.1. Registration Template | |||
| Metadata Name: | Metadata Name: | |||
| The name requested (e.g., "resource"). This name is case- | The name requested (e.g., "resource"). This name is case | |||
| sensitive. Names may not match other registered names in a case- | sensitive. Names may not match other registered names in a case- | |||
| insensitive manner unless the Designated Experts state that there | insensitive manner unless the designated experts state that there | |||
| is a compelling reason to allow an exception. | is a compelling reason to allow an exception. | |||
| Metadata Description: | Metadata Description: | |||
| Brief description of the metadata (e.g., "Resource identifier | Brief description of the metadata (e.g., "Resource identifier | |||
| URL"). | URL"). | |||
| Change Controller: | Change Controller: | |||
| For IETF stream RFCs, list the "IETF". For others, give the name | For IETF Stream RFCs, list "IETF". For others, give the name of | |||
| of the responsible party. Other details (e.g., postal address, | the responsible party. Other details (e.g., postal address, email | |||
| email address, home page URI) may also be included. | address, home page URI) may also be included. | |||
| Specification Document(s): | Specification Document(s): | |||
| Reference to the document or documents that specify the parameter, | Reference to the document or documents that specify the parameter, | |||
| preferably including URIs that can be used to retrieve copies of | preferably including URIs that can be used to retrieve copies of | |||
| the documents. An indication of the relevant sections may also be | the documents. An indication of the relevant sections may also be | |||
| included but is not required. | included but is not required. | |||
| 8.1.2. Initial Registry Contents | 8.1.2. Initial Registry Contents | |||
| * Metadata Name: resource | Metadata Name: resource | |||
| * Metadata Description: Protected resource's resource identifier URL | Metadata Description: Protected resource's resource identifier URL | |||
| * Change Controller: IETF | Change Controller: IETF | |||
| * Specification Document(s): Section 2 of [[ this specification ]] | Specification Document(s): Section 2 of RFC 9728 | |||
| * Metadata Name: authorization_servers | Metadata Name: authorization_servers | |||
| * Metadata Description: JSON array containing a list of OAuth | Metadata Description: JSON array containing a list of OAuth | |||
| authorization server issuer identifiers | authorization server issuer identifiers | |||
| * Change Controller: IETF | Change Controller: IETF | |||
| * Specification Document(s): Section 2 of [[ this specification ]] | Specification Document(s): Section 2 of RFC 9728 | |||
| * Metadata Name: jwks_uri | Metadata Name: jwks_uri | |||
| * Metadata Description: URL of the protected resource's JWK Set | Metadata Description: URL of the protected resource's JWK Set | |||
| document | document | |||
| * Change Controller: IETF | Change Controller: IETF | |||
| * Specification Document(s): Section 2 of [[ this specification ]] | Specification Document(s): Section 2 of RFC 9728 | |||
| * Metadata Name: scopes_supported | Metadata Name: scopes_supported | |||
| * Metadata Description: JSON array containing a list of the OAuth | Metadata Description: JSON array containing a list of the OAuth 2.0 | |||
| 2.0 scope values that are used in authorization requests to | scope values that are used in authorization requests to request | |||
| request access to this protected resource | access to this protected resource | |||
| * Change Controller: IETF | Change Controller: IETF | |||
| * Specification Document(s): Section 2 of [[ this specification ]] | Specification Document(s): Section 2 of RFC 9728 | |||
| * Metadata Name: bearer_methods_supported | Metadata Name: bearer_methods_supported | |||
| * Metadata Description: JSON array containing a list of the OAuth | Metadata Description: JSON array containing a list of the OAuth 2.0 | |||
| 2.0 Bearer Token presentation methods that this protected resource | bearer token presentation methods that this protected resource | |||
| supports | supports | |||
| * Change Controller: IETF | Change Controller: IETF | |||
| * Specification Document(s): Section 2 of [[ this specification ]] | Specification Document(s): Section 2 of RFC 9728 | |||
| * Metadata Name: resource_signing_alg_values_supported | Metadata Name: resource_signing_alg_values_supported | |||
| * Metadata Description: JSON array containing a list of the JWS | Metadata Description: JSON array containing a list of the JWS | |||
| signing algorithms (alg values) supported by the protected | signing algorithms (alg values) supported by the protected | |||
| resource for signed content | resource for signed content | |||
| Change Controller: IETF | ||||
| Specification Document(s): Section 2 of RFC 9728 | ||||
| * Change Controller: IETF | Metadata Name: resource_name | |||
| * Specification Document(s): Section 2 of [[ this specification ]] | Metadata Description: Human-readable name of the protected resource | |||
| Change Controller: IETF | ||||
| * Metadata Name: resource_name | Specification Document(s): Section 2 of RFC 9728 | |||
| * Metadata Description: Human-readable name of the protected | ||||
| resource | ||||
| * Change Controller: IETF | ||||
| * Specification Document(s): Section 2 of [[ this specification ]] | ||||
| * Metadata Name: resource_documentation | Metadata Name: resource_documentation | |||
| * Metadata Description: URL of a page containing human-readable | Metadata Description: URL of a page containing human-readable | |||
| information that developers might want or need to know when using | information that developers might want or need to know when using | |||
| the protected resource | the protected resource | |||
| * Change Controller: IETF | Change Controller: IETF | |||
| * Specification Document(s): Section 2 of [[ this specification ]] | Specification Document(s): Section 2 of RFC 9728 | |||
| * Metadata Name: resource_policy_uri | Metadata Name: resource_policy_uri | |||
| * Metadata Description: URL of a page containing human-readable | Metadata Description: URL of a page containing human-readable | |||
| information about the protected resource's requirements on how the | information about the protected resource's requirements on how the | |||
| client can use the data provided by the protected resource | client can use the data provided by the protected resource | |||
| * Change Controller: IETF | Change Controller: IETF | |||
| * Specification Document(s): Section 2 of [[ this specification ]] | Specification Document(s): Section 2 of RFC 9728 | |||
| * Metadata Name: resource_tos_uri | Metadata Name: resource_tos_uri | |||
| * Metadata Description: URL of a page containing human-readable | Metadata Description: URL of a page containing human-readable | |||
| information about the protected resource's terms of service | information about the protected resource's terms of service | |||
| * Change Controller: IETF | Change Controller: IETF | |||
| * Specification Document(s): Section 2 of [[ this specification ]] | Specification Document(s): Section 2 of RFC 9728 | |||
| * Metadata Name: tls_client_certificate_bound_access_tokens | Metadata Name: tls_client_certificate_bound_access_tokens | |||
| * Metadata Description: Boolean value indicating protected resource | Metadata Description: Boolean value indicating protected resource | |||
| support for mutual-TLS client certificate-bound access tokens | support for mutual-TLS client certificate-bound access tokens | |||
| * Change Controller: IETF | Change Controller: IETF | |||
| * Specification Document(s): Section 2 of [[ this specification ]] | Specification Document(s): Section 2 of RFC 9728 | |||
| * Metadata Name: authorization_details_types_supported | Metadata Name: authorization_details_types_supported | |||
| * Metadata Description: JSON array containing a list of the | Metadata Description: JSON array containing a list of the | |||
| authorization details type values supported by the resource server | authorization details type values supported by the resource server | |||
| when the authorization_details request parameter is used | when the authorization_details request parameter is used | |||
| * Change Controller: IETF | Change Controller: IETF | |||
| * Specification Document(s): Section 2 of [[ this specification ]] | Specification Document(s): Section 2 of RFC 9728 | |||
| * Metadata Name: dpop_signing_alg_values_supported | Metadata Name: dpop_signing_alg_values_supported | |||
| * Metadata Description: JSON array containing a list of the JWS alg | Metadata Description: JSON array containing a list of the JWS alg | |||
| values supported by the resource server for validating DPoP proof | values supported by the resource server for validating DPoP proof | |||
| JWTs | JWTs | |||
| * Change Controller: IETF | Change Controller: IETF | |||
| * Specification Document(s): Section 2 of [[ this specification ]] | Specification Document(s): Section 2 of RFC 9728 | |||
| * Metadata Name: dpop_bound_access_tokens_required | ||||
| * Metadata Description: Boolean value specifying whether the | ||||
| protected resource always requires the use of DPoP-bound access | ||||
| tokens | ||||
| * Change Controller: IETF | ||||
| * Specification Document(s): Section 2 of [[ this specification ]] | ||||
| * Metadata Name: signed_metadata | Metadata Name: dpop_bound_access_tokens_required | |||
| * Metadata Description: Signed JWT containing metadata parameters | Metadata Description: Boolean value specifying whether the protected | |||
| resource always requires the use of DPoP-bound access tokens | ||||
| Change Controller: IETF | ||||
| Specification Document(s): Section 2 of RFC 9728 | ||||
| Metadata Name: signed_metadata | ||||
| Metadata Description: Signed JWT containing metadata parameters | ||||
| about the protected resource as claims | about the protected resource as claims | |||
| * Change Controller: IETF | Change Controller: IETF | |||
| * Specification Document(s): Section 2.2 of [[ this specification ]] | Specification Document(s): Section 2.2 of RFC 9728 | |||
| 8.2. OAuth Authorization Server Metadata Registry | 8.2. OAuth Authorization Server Metadata Registry | |||
| The following authorization server metadata parameter is registered | IANA has registered the following authorization server metadata | |||
| in the IANA "OAuth Authorization Server Metadata" registry | parameter in the "OAuth Authorization Server Metadata" registry | |||
| established in OAuth 2.0 Authorization Server Metadata [RFC8414]. | established in "OAuth 2.0 Authorization Server Metadata" [RFC8414]. | |||
| 8.2.1. Registry Contents | 8.2.1. Registry Contents | |||
| * Metadata Name: protected_resources | Metadata Name: protected_resources | |||
| * Metadata Description: JSON array containing a list of resource | Metadata Description: JSON array containing a list of resource | |||
| identifiers for OAuth protected resources | identifiers for OAuth protected resources | |||
| * Change Controller: IETF | Change Controller: IETF | |||
| * Specification Document(s): Section 4 of [[ this specification ]] | Specification Document(s): Section 4 of RFC 9728 | |||
| 8.3. Well-Known URI Registry | 8.3. Well-Known URIs Registry | |||
| This specification registers the well-known URI defined in Section 3 | This specification registers the well-known URI defined in Section 3 | |||
| in the IANA "Well-Known URIs" registry [IANA.well-known]. | in the "Well-Known URIs" registry [IANA.well-known]. | |||
| 8.3.1. Registry Contents | 8.3.1. Registry Contents | |||
| * URI Suffix: oauth-protected-resource | URI Suffix: oauth-protected-resource | |||
| * Reference: Section 3 of [[ this specification ]] | Reference: Section 3 of RFC 9728 | |||
| * Status: permanent | Status: permanent | |||
| * Change Controller: IETF | Change Controller: IETF | |||
| * Related Information: (none) | Related Information: (none) | |||
| 9. References | 9. References | |||
| 9.1. Normative References | 9.1. Normative References | |||
| [BCP195] Best Current Practice 195, | ||||
| <https://www.rfc-editor.org/info/bcp195>. | ||||
| At the time of writing, this BCP comprises the following: | ||||
| Moriarty, K. and S. Farrell, "Deprecating TLS 1.0 and TLS | ||||
| 1.1", BCP 195, RFC 8996, DOI 10.17487/RFC8996, March 2021, | ||||
| <https://www.rfc-editor.org/info/rfc8996>. | ||||
| Sheffer, Y., Saint-Andre, P., and T. Fossati, | ||||
| "Recommendations for Secure Use of Transport Layer | ||||
| Security (TLS) and Datagram Transport Layer Security | ||||
| (DTLS)", BCP 195, RFC 9325, DOI 10.17487/RFC9325, November | ||||
| 2022, <https://www.rfc-editor.org/info/rfc9325>. | ||||
| [BCP47] Best Current Practice 47, | ||||
| <https://www.rfc-editor.org/info/bcp47>. | ||||
| At the time of writing, this BCP comprises the following: | ||||
| Phillips, A., Ed. and M. Davis, Ed., "Matching of Language | ||||
| Tags", BCP 47, RFC 4647, DOI 10.17487/RFC4647, September | ||||
| 2006, <https://www.rfc-editor.org/info/rfc4647>. | ||||
| Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying | ||||
| Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646, | ||||
| September 2009, <https://www.rfc-editor.org/info/rfc5646>. | ||||
| [IANA.Language] | [IANA.Language] | |||
| IANA, "Language Subtag Registry", | IANA, "Language Subtag Registry", | |||
| <https://www.iana.org/assignments/language-subtag- | <https://www.iana.org/assignments/language-subtag- | |||
| registry>. | registry>. | |||
| [JWA] Jones, M.B., "JSON Web Algorithms (JWA)", RFC 7518, | [JWA] Jones, M., "JSON Web Algorithms (JWA)", RFC 7518, | |||
| DOI 10.17487/RFC7518, May 2015, | DOI 10.17487/RFC7518, May 2015, | |||
| <https://tools.ietf.org/html/rfc7518>. | <https://www.rfc-editor.org/info/rfc7518>. | |||
| [JWE] Jones, M.B. and J. Hildebrand, "JSON Web Encryption | [JWE] Jones, M. and J. Hildebrand, "JSON Web Encryption (JWE)", | |||
| (JWE)", RFC 7516, DOI 10.17487/RFC7516, May 2015, | RFC 7516, DOI 10.17487/RFC7516, May 2015, | |||
| <https://tools.ietf.org/html/rfc7516>. | <https://www.rfc-editor.org/info/rfc7516>. | |||
| [JWK] Jones, M.B., "JSON Web Key (JWK)", RFC 7517, | [JWK] Jones, M., "JSON Web Key (JWK)", RFC 7517, | |||
| DOI 10.17487/RFC7517, May 2015, | DOI 10.17487/RFC7517, May 2015, | |||
| <https://tools.ietf.org/html/rfc7517>. | <https://www.rfc-editor.org/info/rfc7517>. | |||
| [JWS] Jones, M.B., Bradley, J., and N. Sakimura, "JSON Web | [JWS] Jones, M., Bradley, J., and N. Sakimura, "JSON Web | |||
| Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May | Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May | |||
| 2015, <https://tools.ietf.org/html/rfc7515>. | 2015, <https://www.rfc-editor.org/info/rfc7515>. | |||
| [JWT] Jones, M.B., Bradley, J., and N. Sakimura, "JSON Web Token | [JWT] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | |||
| (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | |||
| <https://tools.ietf.org/html/rfc7519>. | <https://www.rfc-editor.org/info/rfc7519>. | |||
| [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>. | |||
| [RFC5646] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying | ||||
| Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646, | ||||
| September 2009, <https://www.rfc-editor.org/info/rfc5646>. | ||||
| [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>. | |||
| [RFC6750] Jones, M. and D. Hardt, "The OAuth 2.0 Authorization | [RFC6750] Jones, M. and D. Hardt, "The OAuth 2.0 Authorization | |||
| Framework: Bearer Token Usage", RFC 6750, | Framework: Bearer Token Usage", RFC 6750, | |||
| DOI 10.17487/RFC6750, October 2012, | DOI 10.17487/RFC6750, October 2012, | |||
| <https://www.rfc-editor.org/info/rfc6750>. | <https://www.rfc-editor.org/info/rfc6750>. | |||
| [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | ||||
| Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | ||||
| RFC 7234, DOI 10.17487/RFC7234, June 2014, | ||||
| <https://www.rfc-editor.org/info/rfc7234>. | ||||
| [RFC7591] Richer, J., Ed., Jones, M., Bradley, J., Machulak, M., and | [RFC7591] Richer, J., Ed., Jones, M., Bradley, J., Machulak, M., and | |||
| P. Hunt, "OAuth 2.0 Dynamic Client Registration Protocol", | P. Hunt, "OAuth 2.0 Dynamic Client Registration Protocol", | |||
| RFC 7591, DOI 10.17487/RFC7591, July 2015, | RFC 7591, DOI 10.17487/RFC7591, July 2015, | |||
| <https://www.rfc-editor.org/info/rfc7591>. | <https://www.rfc-editor.org/info/rfc7591>. | |||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
| Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
| <https://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
| skipping to change at page 26, line 38 ¶ | skipping to change at line 1175 ¶ | |||
| [RFC8705] Campbell, B., Bradley, J., Sakimura, N., and T. | [RFC8705] Campbell, B., Bradley, J., Sakimura, N., and T. | |||
| Lodderstedt, "OAuth 2.0 Mutual-TLS Client Authentication | Lodderstedt, "OAuth 2.0 Mutual-TLS Client Authentication | |||
| and Certificate-Bound Access Tokens", RFC 8705, | and Certificate-Bound Access Tokens", RFC 8705, | |||
| DOI 10.17487/RFC8705, February 2020, | DOI 10.17487/RFC8705, February 2020, | |||
| <https://www.rfc-editor.org/info/rfc8705>. | <https://www.rfc-editor.org/info/rfc8705>. | |||
| [RFC8707] Campbell, B., Bradley, J., and H. Tschofenig, "Resource | [RFC8707] Campbell, B., Bradley, J., and H. Tschofenig, "Resource | |||
| Indicators for OAuth 2.0", RFC 8707, DOI 10.17487/RFC8707, | Indicators for OAuth 2.0", RFC 8707, DOI 10.17487/RFC8707, | |||
| February 2020, <https://www.rfc-editor.org/info/rfc8707>. | February 2020, <https://www.rfc-editor.org/info/rfc8707>. | |||
| [RFC8996] Moriarty, K. and S. Farrell, "Deprecating TLS 1.0 and TLS | ||||
| 1.1", BCP 195, RFC 8996, DOI 10.17487/RFC8996, March 2021, | ||||
| <https://www.rfc-editor.org/info/rfc8996>. | ||||
| [RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Ed., "HTTP Semantics", STD 97, RFC 9110, | Ed., "HTTP Semantics", STD 97, RFC 9110, | |||
| DOI 10.17487/RFC9110, June 2022, | DOI 10.17487/RFC9110, June 2022, | |||
| <https://www.rfc-editor.org/info/rfc9110>. | <https://www.rfc-editor.org/info/rfc9110>. | |||
| [RFC9325] Sheffer, Y., Saint-Andre, P., and T. Fossati, | [RFC9111] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| "Recommendations for Secure Use of Transport Layer | Ed., "HTTP Caching", STD 98, RFC 9111, | |||
| Security (TLS) and Datagram Transport Layer Security | DOI 10.17487/RFC9111, June 2022, | |||
| (DTLS)", BCP 195, RFC 9325, DOI 10.17487/RFC9325, November | <https://www.rfc-editor.org/info/rfc9111>. | |||
| 2022, <https://www.rfc-editor.org/info/rfc9325>. | ||||
| [RFC9396] Lodderstedt, T., Richer, J., and B. Campbell, "OAuth 2.0 | [RFC9396] Lodderstedt, T., Richer, J., and B. Campbell, "OAuth 2.0 | |||
| Rich Authorization Requests", RFC 9396, | Rich Authorization Requests", RFC 9396, | |||
| DOI 10.17487/RFC9396, May 2023, | DOI 10.17487/RFC9396, May 2023, | |||
| <https://www.rfc-editor.org/info/rfc9396>. | <https://www.rfc-editor.org/info/rfc9396>. | |||
| [RFC9449] Fett, D., Campbell, B., Bradley, J., Lodderstedt, T., | [RFC9449] Fett, D., Campbell, B., Bradley, J., Lodderstedt, T., | |||
| Jones, M., and D. Waite, "OAuth 2.0 Demonstrating Proof of | Jones, M., and D. Waite, "OAuth 2.0 Demonstrating Proof of | |||
| Possession (DPoP)", RFC 9449, DOI 10.17487/RFC9449, | Possession (DPoP)", RFC 9449, DOI 10.17487/RFC9449, | |||
| September 2023, <https://www.rfc-editor.org/info/rfc9449>. | September 2023, <https://www.rfc-editor.org/info/rfc9449>. | |||
| [RFC9525] Saint-Andre, P. and R. Salz, "Service Identity in TLS", | [RFC9525] Saint-Andre, P. and R. Salz, "Service Identity in TLS", | |||
| RFC 9525, DOI 10.17487/RFC9525, November 2023, | RFC 9525, DOI 10.17487/RFC9525, November 2023, | |||
| <https://www.rfc-editor.org/info/rfc9525>. | <https://www.rfc-editor.org/info/rfc9525>. | |||
| [UNICODE] The Unicode Consortium, "The Unicode Standard", | [UNICODE] The Unicode Consortium, "The Unicode Standard", | |||
| <https://www.unicode.org/versions/latest/>. | <https://www.unicode.org/versions/latest/>. | |||
| [USA15] Davis, M. and K. Whistler, "Unicode Normalization Forms", | [USA15] Whistler, K., Ed., "Unicode Normalization Forms", Unicode | |||
| Unicode Standard Annex 15, 1 June 2015, | Standard Annex #15, 14 August 2024, | |||
| <https://www.unicode.org/reports/tr15/>. | <https://www.unicode.org/reports/tr15/>. | |||
| 9.2. Informative References | 9.2. Informative References | |||
| [FAPI.MessageSigning] | [FAPI.MessageSigning] | |||
| Tonge, D. and D. Fett, "FAPI 2.0 Message Signing", 24 | Tonge, D. and D. Fett, "FAPI 2.0 Message Signing (Draft)", | |||
| March 2023, | 24 March 2023, | |||
| <https://openid.net/specs/fapi-2_0-message-signing.html>. | <https://openid.net/specs/fapi-2_0-message-signing.html>. | |||
| [I-D.ietf-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-29, 3 June 2024, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-oauth- | ||||
| security-topics-29>. | ||||
| [IANA.JOSE] | [IANA.JOSE] | |||
| IANA, "JSON Object Signing and Encryption (JOSE)", | IANA, "JSON Web Signature and Encryption Algorithms", | |||
| <https://www.iana.org/assignments/jose>. | <https://www.iana.org/assignments/jose>. | |||
| [IANA.well-known] | [IANA.well-known] | |||
| IANA, "Well-Known URIs", | IANA, "Well-Known URIs", | |||
| <https://www.iana.org/assignments/well-known-uris>. | <https://www.iana.org/assignments/well-known-uris>. | |||
| [OpenID.Discovery] | [OpenID.Discovery] | |||
| Sakimura, N., Bradley, J., Jones, M.B., and E. Jay, | Sakimura, N., Bradley, J., Jones, M., and E. Jay, "OpenID | |||
| "OpenID Connect Discovery 1.0", 15 December 2023, | Connect Discovery 1.0 incorporating errata set 2", 15 | |||
| <https://openid.net/specs/openid-connect-discovery- | December 2023, <https://openid.net/specs/openid-connect- | |||
| 1_0.html>. | discovery-1_0.html>. | |||
| [OWASP.SSRF] | [OWASP.SSRF] | |||
| OWASP, "OWASP SSRF Prevention Cheat Sheet", | OWASP Foundation, "OWASP Server-Side Request Forgery | |||
| Prevention Cheat Sheet", | ||||
| <https://cheatsheetseries.owasp.org/cheatsheets/ | <https://cheatsheetseries.owasp.org/cheatsheets/ | |||
| Server_Side_Request_Forgery_Prevention_Cheat_Sheet.html>. | Server_Side_Request_Forgery_Prevention_Cheat_Sheet.html>. | |||
| [RFC7033] Jones, P., Salgueiro, G., Jones, M., and J. Smarr, | [RFC7033] Jones, P., Salgueiro, G., Jones, M., and J. Smarr, | |||
| "WebFinger", RFC 7033, DOI 10.17487/RFC7033, September | "WebFinger", RFC 7033, DOI 10.17487/RFC7033, September | |||
| 2013, <https://www.rfc-editor.org/info/rfc7033>. | 2013, <https://www.rfc-editor.org/info/rfc7033>. | |||
| [RFC8620] Jenkins, N. and C. Newman, "The JSON Meta Application | [RFC8620] Jenkins, N. and C. Newman, "The JSON Meta Application | |||
| Protocol (JMAP)", RFC 8620, DOI 10.17487/RFC8620, July | Protocol (JMAP)", RFC 8620, DOI 10.17487/RFC8620, July | |||
| 2019, <https://www.rfc-editor.org/info/rfc8620>. | 2019, <https://www.rfc-editor.org/info/rfc8620>. | |||
| [RFC9470] Bertocci, V. and B. Campbell, "OAuth 2.0 Step Up | [RFC9470] Bertocci, V. and B. Campbell, "OAuth 2.0 Step Up | |||
| Authentication Challenge Protocol", RFC 9470, | Authentication Challenge Protocol", RFC 9470, | |||
| DOI 10.17487/RFC9470, September 2023, | DOI 10.17487/RFC9470, September 2023, | |||
| <https://www.rfc-editor.org/info/rfc9470>. | <https://www.rfc-editor.org/info/rfc9470>. | |||
| Appendix A. Acknowledgements | [RFC9700] Lodderstedt, T., Bradley, J., Labunets, A., and D. Fett, | |||
| "Best Current Practice for OAuth 2.0 Security", BCP 240, | ||||
| RFC 9700, DOI 10.17487/RFC9700, January 2025, | ||||
| <https://www.rfc-editor.org/info/rfc9700>. | ||||
| Acknowledgements | ||||
| The authors of this specification would like to thank the attendees | The authors of this specification would like to thank the attendees | |||
| of the IETF 115 OAuth and HTTP API Working Group meetings and the | of the IETF 115 OAuth and HTTP API Working Group meetings and the | |||
| attendees of subsequent OAuth Working Group meetings for their input | attendees of subsequent OAuth Working Group meetings for their input | |||
| on this specification. We would would also like to thank Amanda | on this specification. We would also like to thank Amanda Baber, | |||
| Baber, Mike Bishop, Ralph Bragg, Brian Campbell, Deb Cooley, Roman | Mike Bishop, Ralph Bragg, Brian Campbell, Deb Cooley, Gabriel Corona, | |||
| Danyliw, Gabriel Corona, Vladimir Dzhuvinov, George Fletcher, Arnt | Roman Danyliw, Vladimir Dzhuvinov, George Fletcher, Arnt Gulbrandsen, | |||
| Gulbrandsen, Pieter Kasselman, Murray Kucherawy, David Mandelberg, | Pieter Kasselman, Murray Kucherawy, David Mandelberg, Tony Nadalin, | |||
| Tony Nadalin, Francesca Palombini, John Scudder, Rifaat Shekh-Yusef, | Francesca Palombini, John Scudder, Rifaat Shekh-Yusef, Filip Skokan, | |||
| Filip Skokan, Orie Steele, Atul Tulshibagwale, Éric Vyncke, Paul | Orie Steele, Atul Tulshibagwale, Éric Vyncke, Paul Wouters, and Bo Wu | |||
| Wouters, and Bo Wu for their contributions to the specification. | for their contributions to the specification. | |||
| Appendix B. Document History | ||||
| [[ to be removed by the RFC Editor before publication as an RFC ]] | ||||
| -13 | ||||
| * Described motivations for the IANA registration procedure, per | ||||
| additional comments by Murray Kucherawy. | ||||
| -12 | ||||
| * Incorporated responses to IESG review comments by John Scudder, | ||||
| Murray Kucherawy, Francesca Palombini, and Éric Vyncke. The IANA | ||||
| registration procedure was updated per the discussion on the IESG | ||||
| telechat. | ||||
| -11 | ||||
| * Incorporated responses to HttpDir review comments by Mike Bishop. | ||||
| * Incorporated responses to IESG review comments by Roman Danyliw. | ||||
| * Incorporated responses to IESG review comments by Orie Steele. | ||||
| Particularly, the specification now allows resource identifiers to | ||||
| contain a query component (but still discourages it). | ||||
| * Consistently use the term "metadata parameter". The terms | ||||
| "metadata value" and "claim" were previously inconsistently used | ||||
| for the same thing. | ||||
| -10 | ||||
| * Added metadata parameter declaring RAR types supported. | ||||
| -09 | ||||
| * Added metadata values declaring support for DPoP and mutual-TLS | ||||
| client certificate-bound access tokens. | ||||
| * Added missing word caught during IANA review. | ||||
| * Addressed ART, SecDir, and OpsDir review comments by Arnt | ||||
| Gulbrandsen, David Mandelberg, and Bo Wu, resulting in the | ||||
| following changes. | ||||
| * Added step numbers to sequence diagram. | ||||
| * Defined meaning of omitting bearer_methods_supported metadata | ||||
| parameter. | ||||
| * Added internationalization of human-readable metadata values using | ||||
| the mechanism from [RFC7591]. | ||||
| * Added resource_name metadata parameter, paralleling client_name in | ||||
| [RFC7591]. | ||||
| * Added Security Considerations section on metadata caching. | ||||
| * Used and referenced Resource Identifier definition. | ||||
| * Added motivating example of an email client to intro. | ||||
| -08 | ||||
| * Added Security Considerations about the differences between | ||||
| unsigned and signed metadata, as suggested by Deb Cooley. | ||||
| * Updated obsolete references. | ||||
| -07 | ||||
| * Removed extraneous paragraph about downgrade attacks discussing an | ||||
| issue that's already addressed elsewhere in the specification. | ||||
| -06 | ||||
| * Addressed shepherd review comments by Rifaat Shekh-Yusef. | ||||
| -05 | ||||
| * Added SVG diagram | ||||
| -04 | ||||
| * Applied working group last call suggestions by Atul Tulshibagwale. | ||||
| * Better described the purpose of | ||||
| resource_signing_alg_values_supported and removed | ||||
| resource_encryption_alg_values_supported and | ||||
| resource_encryption_enc_values_supported, per WGLC comments by | ||||
| Vladimir Dzhuvinov and Brian Campbell. | ||||
| * Applied suggestions by Pieter Kasselman. | ||||
| -03 | ||||
| * Applied correction by Filip Skokan. | ||||
| -02 | ||||
| * Switched from concatenating .well-known to the end of the resource | ||||
| identifier to inserting it between the host and path components of | ||||
| it. | ||||
| * Have WWW-Authenticate return resource_metadata rather than | ||||
| resource. | ||||
| -01 | ||||
| * Renamed scopes_provided to scopes_supported. | ||||
| * Added security consideration for scopes_supported. | ||||
| * Use BCP 195 for TLS recommendations. | ||||
| * Clarified that resource metadata can be used by clients and | ||||
| authorization servers. | ||||
| * Updated references. | ||||
| * Added security consideration recommending audience-restricted | ||||
| access tokens. | ||||
| * Mention FAPI Message Signing as a use case for publishing signing | ||||
| keys. | ||||
| -00 | ||||
| * Initial working group version based on draft-jones-oauth-resource- | ||||
| metadata-04. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Michael B. Jones | Michael B. Jones | |||
| Self-Issued Consulting | Self-Issued Consulting | |||
| Email: michael_b_jones@hotmail.com | Email: michael_b_jones@hotmail.com | |||
| URI: https://self-issued.info/ | URI: https://self-issued.info/ | |||
| Phil Hunt | Phil Hunt | |||
| Independent Identity, Inc. | Independent Identity, Inc. | |||
| End of changes. 139 change blocks. | ||||
| 565 lines changed or deleted | 441 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||