<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" docName="draft-janicijevic-oauth-b2b-authorization-00" category="std" ipr="trust200902" obsoletes="" updates="" xml:lang="en" symRefs="true" sortRefs="false" tocInclude="true" version="3">
<!-- xml2rfc v2v3 conversion 3.21.0 -->
<!-- Generated by id2xml 1.5.2 on 2024-05-12T03:27:06Z -->
<front>
<title>OAuth 2.0 Delegated B2B Authorization</title>
<seriesInfo name="Internet-Draft" value="draft-janicijevic-oauth-b2b-authorization-00"/>
<author initials="I." surname="Janicijevic" fullname="Igor Janicijevic">
<organization>National Australia Bank</organization>
<address>
<email>igor@ivagor.com</email>
</address>
</author>
<date year="2024" month="May" day="13"/>
<workgroup>Web Authorization Protocol</workgroup>
<abstract>
<t>Delegated B2B Authorization enables a third-party OAuth client to
obtain a limited access to an HTTP service on behalf of another OAuth
client which is acting as a resource owner.</t>
<t>This specification extends the OAuth 2.0 Authorization Framework
with two new endpoints which allow a resource owner OAuth client to
manage access for a third-party OAuth client.</t>
</abstract>
</front>
<middle>
<section anchor="sect-1" numbered="true" toc="default">
<name>Introduction</name>
<t>The OAuth 2.0 Authorization Framework <xref target="RFC6749" format="default"/> enables a third-
party OAuth client to obtain delegated access to an HTTP service on
behalf of the end-user which is a resource owner. This use case is
prevalent in consumer-to-business (C2B) interactions where resource
owner is typically a person (human) and approval interaction between
the parties is achieved via browser redirects. The <xref target="RFC6749" format="default"/> also
allows the third-party OAuth client to obtain direct access to
protected resources on its own behalf. This use case is prevalent in
direct service-to-service (S2S) or business-to-business (B2B)
interactions.</t>
<t>In summary, <xref target="RFC6749" format="default"/> caters for delegated C2B access authorization
and direct B2B access authorization; however, delegated B2B access
authorization is not covered.</t>
<t>There are business use cases where a third-party client needs to
obtain access to protected resources held at resource provider on
behalf of the resource owner client. These are the use cases where
delegated B2B access authorization is required.</t>
<t>This document defines two new OAuth 2.0 endpoints: the B2B
authorization endpoint and the B2B authorization revocation endpoint,
which allow a resource owner OAuth client to request and revoke
access authorization for another (third-party) OAuth client.</t>
</section>
<section anchor="sect-2" numbered="true" toc="default">
<name>Conventions and Terminology</name>
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in <xref target="RFC2119" format="default"/>.</t>
<t>In this document, these words will appear with that interpretation
only when in ALL CAPS. Lower case uses of these words are not to be
interpreted as carrying significance described in <xref target="RFC2119" format="default"/>.</t>
<t>This specification uses the terms "token endpoint", "access token",
"refresh token", "authorization server", "resource owner", "resource server", "authorization request", "authorization grant", "protected resource", "client", "confidential client", "client identifier",
"client registration", and "client authentication" as defined by
<xref target="RFC6749" format="default"/>.</t>
</section>
<section anchor="sect-3" numbered="true" toc="default">
<name>Protocol Flow</name>
<t>The following diagram depicts the overall architecture and the authorization protocol flow.</t>
<figure anchor="ure-abstract-protocol-flow">
<name>Abstract Protocol Flow</name>
<artwork name="" type="" align="left" alt=""><![CDATA[
+------------+                               +---------------+
|  Resource  |--(A)- Authorization Request ->|               |
|    Owner   |                               |               |
|            |<-(B)-- Authorization Grant ---|               |
+------------+                               |               |
       |                                     |               |
       |                                     |               |
      (C)                                    |               |
       |                                     | Authorization |
 Authorization                               |     Server    |
     Grant                                   |               |
       |                                     |               |
       |                                     |               |
       V                                     |               |
+------------+                               |               |
|            |--(D)-- Authorization Grant -->|               |
|            |                               |               |
|            |<-(E)------ Access Token ------|               |
|            |                               +---------------+
|   Client   |
|            |                               +---------------+
|            |--(F)------ Access Token ----->|    Resource   |
|            |                               |     Server    |
|            |<-(G)--- Protected Resource ---|               |
+------------+                               +---------------+
]]></artwork>
</figure>
<t>The following steps describe this OAuth flow:</t>
<dl newline="false" spacing="normal" indent="5">
<dt>(A)</dt>
<dd>
<t>The resource owner client authenticates with the authorization server and requests authorization for the third party client.</t>
</dd>
<dt>(B)</dt>
<dd>
<t>The authorization server authenticates the resource owner client and issues an authorization grant, which is a credential representing the resource owner's authorization for the third party client and a grant id, which can be used to revoke the authorization grant, if required.</t>
</dd>
<dt>(C)</dt>
<dd>
<t>The resource owner client passes the authorization grant on to the third-party client. The way the resource owner client communicates with the third-party client is beyond the scope of this specification, however, the authorization grant MUST be passed to the third-party client in a secure manner.</t>
</dd>
<dt>(D)</dt>
<dd>
<t>The third-party client authenticates with the authorization server and requests an access token by presenting the authorization grant.</t>
</dd>
<dt>(E)</dt>
<dd>
<t>The authorization server authenticates the third-party client and validates authorization grant, and if valid, issues an access token.</t>
</dd>
<dt>(F)</dt>
<dd>
<t>The third-party client requests the protected resource from the resource server and authenticates by presenting the access token.</t>
</dd>
<dt>(G)</dt>
<dd>
<t>The resource server validates the access token, and if valid, serves the request.</t>
</dd>
</dl>
<section anchor="sect-3.1" numbered="true" toc="default">
<name>Client Registration</name>
<t>Before initiating the protocol, both the resource owner client and the third-party client must be registered with the authorization server as confidential clients. The means through which the clients are registered with the authorization server are beyond the scope of this specification.</t>
</section>
<section anchor="sect-3.2" numbered="true" toc="default">
<name>Protocol Endpoints</name>
<t>The authorization process utilizes two authorization server endpoints, as follows:</t>
<ul spacing="normal">
<li>
<t>B2B authorization endpoint - used by the resource owner client to obtain authorization for the third-party client. This is a new endpoint introduced by this specification.</t>
</li>
<li>
<t>Token endpoint - used by the third-party client to exchange the authorization grant for access token. This is the existing token endpoint as defined by <xref target="RFC6749" format="default"/>.</t>
</li>
</ul>
<t>The authorization grant management process utilizes one authorization server endpoint, as follows:</t>
<ul spacing="normal">
<li>
<t>B2B authorization revocation endpoint - used by the resource owner client to revoke access for the third-party client. This is a new endpoint introduced by this specification.</t>
</li>
</ul>
</section>
</section>
<section anchor="sect-4" numbered="true" toc="default">
<name>B2B Authorization Endpoint</name>
<t>This authorization server endpoint MUST use the "https" scheme and it MUST accept HTTP POST requests with parameters in the HTTP request message body using the "application/x-www-form-urlencoded" format as per Appendix B of <xref target="RFC6749" format="default"/> with UTF-8 character encoding.</t>
<t>This endpoint is used by the resource owner client to request the authorization grant for the third-party client. The authorization server MUST authenticate the resource owner client making requests to this endpoint by using the same rules as defined in <xref target="RFC6749" format="default"/> for token endpoint requests, and by using the registered authentication method indicated by the "token_endpoint_auth_method" client metadata parameter <xref target="RFC7591" format="default"/>.</t>
<t>The authorization server indicates the client authentication methods supported when accepting requests to this endpoint by using the "token_endpoint_auth_methods_supported" authorization server metadata parameter <xref target="RFC8414" format="default"/>.</t>
<section anchor="sect-4.1" numbered="true" toc="default">
<name>Request</name>
<t>The resource owner client makes an HTTP POST request to this endpoint by sending the following parameters in the HTTP message body using the "application/x-www-form-urlencoded" format as per Appendix B of <xref target="RFC6749" format="default"/> with UTF-8 character encoding.</t>
<dl newline="true" spacing="normal" indent="2">
<dt>client_id</dt>
<dd>REQUIRED. The client identifier of the resource-owner client that is making the authorization request.</dd>
<dt>request</dt>
<dd>REQUIRED. The B2B authorization request object with authorization request parameters encoded as claims in a signed <xref target="RFC7515" format="default"/> and optionally encrypted <xref target="RFC7516" format="default"/> JSON Web Token (JWT) <xref target="RFC7519" format="default"/>.</dd>
</dl>
<t>The B2B authorization request object includes the following claims:</t>
<dl newline="true" spacing="normal" indent="2">
<dt>grant_details</dt>
<dd>REQUIRED. JSON object with the following members:</dd>
<dt>client_id</dt>
<dd>REQUIRED. The client identifier of the third-party client that the authorization request is for.</dd>
<dt>resource</dt>
<dd>OPTIONAL. The resource(s) as defined in <xref target="RFC8707" format="default"/> that the third-party client SHOULD be authorized to access. If omitted, the third-party client SHOULD be authorized to access all resources that the owner client is authorized to access. A single "resource" parameter value is represented as a JSON string while multiple values are represented as an array of strings.</dd>
<dt>scope</dt>
<dd>OPTIONAL. The scope(s) that the third-party client SHOULD be authorized to obtain. If omitted, the third-party client SHOULD be authorized to obtain all scopes which the resource owner client is authorized to obtain.</dd>
<dt>expires_at</dt>
<dd>OPTIONAL. The time when the authorization grant SHOULD expire. If omitted, the authorization grant SHOULD be valid until revoked by the resource owner client.</dd>
</dl>
<t>The following is an example of claims in the B2B authorization object before base64url encoding and signing:</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
{
   "iss": "s76gh32kjuolXaw",
   "aud": "https://server.example.com/as/b2b_authorize",
   "exp": 1715400380,
   "grant_details": {
      "client_id": "s56ghRwqo87bVxzs",
      "resource": "https://server.example.com/api/accounts",
      "scope": "accounts:read",
      "expires_at": 1731463200
   }
}
]]></artwork>
<t>For example, the resource owner client makes the following HTTP request using TLS (with extra line breaks for display purposes only):</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
POST /as/b2b_authorize HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

client_assertion=eyJhbGciOiJSUzI1NiI ... sImtpZCI6IjIyIn0
&client_assertion_type=
 urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_id=s76gh32kjuolXaw
&request=eyJhbGciOiJFUzI1NiIsImtpZCI6 ... IjE2In0
]]></artwork>
<t>The authorization server MUST authenticate the resource owner client and validate the request object, including signature and expiry. The server then proceeds with validation of all the individual parameters included in the request object.</t>
</section>
<section anchor="sect-4.2" numbered="true" toc="default">
<name>Successful Response</name>
<t>The authorization server issues an authorization code and a grant identifier together with the details of the authorization granted. The authorization server constructs the response by adding the following parameters to the message body of the HTTP response with HTTP 200 OK status code by using "application/json" message format:</t>
<dl newline="true" spacing="normal" indent="2">
<dt>response</dt>
<dd>REQUIRED. The B2B authorization response object with authorization response parameters encoded as claims in a signed <xref target="RFC7515" format="default"/> and optionally encrypted <xref target="RFC7516" format="default"/> JSON Web Token (JWT) <xref target="RFC7519" format="default"/>.</dd>
</dl>
<t>The B2B authorization response object includes the following claims:</t>
<dl newline="true" spacing="normal" indent="2">
<dt>code</dt>
<dd>REQUIRED. The authorization code generated by the authorization server. The authorization code MUST expire shortly after it is issued to mitigate the risk of leaks. A maximum authorization code lifetime of 10 minutes is RECOMMENDED. The third-party client MUST NOT use the authorization code more than once. If an authorization code is used more than once, the authorization server MUST deny the request and SHOULD revoke (when possible) all tokens previously issued based on that authorization code. The authorization code is bound to the third-party client identifier.</dd>
<dt>grant_id</dt>
<dd>REQUIRED. The authorization grant identifier that can be used by resource owner client to reference this authorization in the future.</dd>
<dt>grant_details</dt>
<dd>REQUIRED. JSON object with the following members:</dd>
<dt>client_id</dt>
<dd>REQUIRED. The client identifier of the third-party client that the authorization response is for.</dd>
<dt>resource</dt>
<dd>OPTIONAL. The resource(s) as defined in <xref target="RFC8707" format="default"/> that the third-party client is authorized to access. If omitted, the third-party client is authorized to access all resources that the owner client itself is authorized to access. A single "resource" parameter value is represented as a JSON string while multiple values are represented as an array of strings.</dd>
<dt>scope</dt>
<dd>OPTIONAL. The scope(s) that the third-party client is authorized to obtain. If omitted, the third-party client will be authorized to obtain all scopes which the resource owner client itself is authorized to obtain.</dd>
<dt>expires_at</dt>
<dd>OPTIONAL. The time when the authorization grant will expire. If omitted, the authorization grant is valid until revoked by the resource owner client.</dd>
</dl>
<t>An example successful response:</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
   response=eyJhbGciOiJFUtpZ ... CI6IjE2In0zI1NiIsIm
}
]]></artwork>
<t>The following is an example of claims in the B2B authorization response object before base64url encoding and signing:</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
{
   "code": "Ejr1zC2YoWpAAtnFZFsicM",
   "grant_id": "G5Qx2Tlzv3JKWIAtGOkF0X",
   "grant_details": {
      "client_id": "s56ghRwqo87bVxzs",
      "resource": "https://server.example.com/api/accounts",
      "scope": "accounts:read",
      "expires_at": 1731463200
   }
}
]]></artwork>
</section>
<section anchor="sect-4.3" numbered="true" toc="default">
<name>Error Response</name>
<t>The authorization server returns an error response with the same format as is specified for error responses from the token endpoint in Section 5.2 of <xref target="RFC6749" format="default"/> using the appropriate error code from therein or from Section 4.1.2.1 of <xref target="RFC6749" format="default"/>.</t>
<t>For example:</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
   "error": "invalid_request"
}
]]></artwork>
</section>
</section>
<section anchor="sect-5" numbered="true" toc="default">
<name>Token Endpoint</name>
<t>The token endpoint is used by the third-party client to obtain an access token and optionally a refresh token by presenting its authorization grant (authorization code). This end point is defined in section 3.2 of <xref target="RFC6749" format="default"/>.</t>
<section anchor="sect-5.1" numbered="true" toc="default">
<name>Request</name>
<t>The third-party client makes an access token request to this endpoint as specified in section 4.1.3 of <xref target="RFC6749" format="default"/>.</t>
</section>
<section anchor="sect-5.2" numbered="true" toc="default">
<name>Successful Response</name>
<t>The authorization server authenticates the third-party client and processes the access token request as specified in section 4.1.4 of <xref target="RFC6749" format="default"/>. In addition to the response parameters specified in <xref target="RFC6749" format="default"/>, the authorization server adds the following parameters to the token endpoint response:</t>
<dl newline="true" spacing="normal" indent="2">
<dt>grant_details</dt>
<dd>REQUIRED. JSON object with the following members:</dd>
<dt>client_id</dt>
<dd>REQUIRED. The client identifier of the third-party client that the token response is for.</dd>
<dt>resource</dt>
<dd>OPTIONAL. The resource(s) as defined in <xref target="RFC8707" format="default"/> that the third-party client is authorized to access. If omitted, the third-party client is authorized to access all resources that the owner client itself is authorized to access. A single "resource" parameter value is represented as a JSON string while multiple values are represented as an array of strings.</dd>
<dt>scope</dt>
<dd>OPTIONAL. The scope(s) that the third-party client is authorized to obtain. If omitted, the third-party client will be authorized to obtain all scopes which the resource owner client itself is authorized to obtain.</dd>
<dt>expires_at</dt>
<dd>OPTIONAL. The time when the authorization grant will expire. If omitted, the authorization grant is valid until revoked by the resource owner client.</dd>
</dl>
<t>An example successful response:</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
   "access_token": "2YotnFZFEjr1zCsicMWpAA",
   "token_type": "Bearer",
   "expires_in": 3600,
   "refresh_token": "tGzv3JOkF0XG5Qx2TlKWIA",
   "grant_details": {
      "client_id": "s56ghRwqo87bVxzs",
      "resource": "https://server.example.com/api/accounts",
      "scope": "accounts:read",
      "expires_at": 1731463200
   }
}
]]></artwork>
</section>
<section anchor="sect-5.3" numbered="true" toc="default">
<name>Error Response</name>
<t>The authorization server returns an error response with the same format as is specified for error responses from the token endpoint in Section 5.2 of <xref target="RFC6749" format="default"/> using the appropriate error code from therein or from Section 4.1.2.1 of <xref target="RFC6749" format="default"/>.</t>
<t>For example:</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
   "error": "invalid_client"
}
]]></artwork>
</section>
</section>
<section anchor="sect-6" numbered="true" toc="default">
<name>B2B Authorization Revocation Endpoint</name>
<t>This authorization server endpoint MUST use the "https" scheme and it MUST accept HTTP POST requests with parameters in the HTTP request message body using the "application/x-www-form-urlencoded" format as per Appendix B of <xref target="RFC6749" format="default"/> with UTF-8 character encoding.</t>
<t>This endpoint is used by the resource owner client to request the revocation of the previously issued authorization grant for the third-party client. The authorization server MUST authenticate the resource owner client making requests to this endpoint by using the same rules as defined in <xref target="RFC6749" format="default"/> for token endpoint requests, and by using the registered authentication method indicated by the token_endpoint_auth_method client metadata parameter <xref target="RFC7591" format="default"/>.</t>
<t>The authorization server indicates the client authentication methods supported when accepting requests to this endpoint by using the "token_endpoint_auth_methods_supported" authorization server metadata parameter <xref target="RFC8414" format="default"/>.</t>
<section anchor="sect-6.1" numbered="true" toc="default">
<name>Request</name>
<t>The resource owner client makes an HTTP POST request to this endpoint by sending the following parameters in the HTTP message body using the "application/x-www-form-urlencoded" format as per Appendix B of <xref target="RFC6749" format="default"/> with UTF-8 character encoding.</t>
<dl newline="true" spacing="normal" indent="2">
<dt>grant_id</dt>
<dd>REQUIRED. The authorization grant identifier indicating the authorization grant that resource owner client want to revoke.</dd>
</dl>
<t>For example, the resource owner client makes the following HTTP request using TLS (with extra line breaks for display purposes only):</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
POST /as/b2b_revoke HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

client_assertion=eyJhbGciOiJSUzI1NiI ... sImtpZCI6IjIyIn0
&client_assertion_type=
 urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&grant_id=G5Qx2Tlzv3JKWIAtGOkF0X
]]></artwork>
</section>
<section anchor="sect-6.2" numbered="true" toc="default">
<name>Successful Response</name>
<t>The authorization server MUST authenticate the resource owner client and validate the grant identifier. The server then proceeds with revocation of all tokens issued using this authorization grant and finally revokes the grant itself so that it cannot any longer be used to obtain access tokens.</t>
<t>An example successful response:</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
]]></artwork>
</section>
<section anchor="sect-6.3" numbered="true" toc="default">
<name>Error Response</name>
<t>The authorization server returns an error response with the same format as is specified for error responses from the token endpoint in Section 5.2 of <xref target="RFC6749" format="default"/> using the appropriate error code from therein or from Section 4.1.2.1 of <xref target="RFC6749" format="default"/>.</t>
<t>For example:</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
   "error": "invalid_grant"
}
]]></artwork>
</section>
</section>
<section anchor="sect-7" numbered="true" toc="default">
<name>Authorization Server Metadata</name>
<t>The following authorization server metadata parameters <xref target="RFC8414" format="default"/> are introduced as part of this specification to signal the server's capability and policy with respect to the delegated B2B authorization.</t>
<dl newline="true" spacing="normal" indent="2">
<dt>b2b_authorization_endpoint</dt>
<dd>The URL at which a resource owner client can post an authorization request for the third-party client.</dd>
<dt>b2b_authorization_revocation_endpoint</dt>
<dd>The URL at which a resource owner client can post an authorization revocation request for the third-party client.</dd>
</dl>
<t>Note that the presence of the "b2b_authorization_endpoint" in the authorization server's metadata is sufficient for a resource owner client to determine that it may use the delegated B2B authorization flow.</t>
</section>
<section anchor="sect-8" numbered="true" toc="default">
<name>Client Metadata</name>
<t>The following client metadata parameter is introduced by this specification to indicate whether B2B authorization is supported by the resource owner client.</t>
<dl newline="true" spacing="normal" indent="2">
<dt>b2b_authorization</dt>
<dd>Boolean parameter indicating whether the resource owner client is registered for and supports delegated b2b authorization. If omitted, the default value is "false".</dd>
</dl>
</section>
<section anchor="sect-9" numbered="true" toc="default">
<name>Security Considerations</name>
<t>Resource owner client must be registered as confidential client because B2B authorization endpoint requires client authentication.</t>
<t>Third-party client must be registered as confidential client because token endpoint requires client authentication.</t>
<t>Authorization server must bind the authorization code to the third-party client id as specified in the authorization request.</t>
<t>Resource owner must pass on the authorization code to the third-party client securely.</t>
<t>Authorization server must not grant additional access (scopes and resources) to the third-party client from what was specified in the authorization request.</t>
<t>Authorization server must not issue any tokens with validity greater than what was specified in the authorization request.</t>
<t>If authorization grant is revoked by the resource owner the authorization server must revoke all related access tokens and refresh tokens issued to the third-party client.</t>
</section>
<section anchor="sect-10" numbered="true" toc="default">
<name>IANA Considerations</name>
<section anchor="sect-10.1" numbered="true" toc="default">
<name>OAuth Authorization Server Metadata</name>
<t>IANA has registered the following values in the IANA "OAuth Authorization Server Metadata" registry of [IANA.OAuth.Parameters] established by <xref target="RFC8414" format="default"/>.</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
[[ TBA ]]
]]></artwork>
</section>
<section anchor="sect-10.2" numbered="true" toc="default">
<name>OAuth Dynamic Client Registration Metadata</name>
<t>IANA has registered the following value in the IANA "OAuth Dynamic Client Registration Metadata" registry of [IANA.OAuth.Parameters] established by <xref target="RFC7591" format="default"/>.</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
[[ TBA ]]
]]></artwork>
</section>
</section>
</middle>
<back>
<references>
<name>References</name>
<references>
<name>Normative References</name>
<reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author fullname="S. Bradner" initials="S." surname="Bradner"/>
<date month="March" year="1997"/>
<abstract>
<t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
</abstract>
</front>
<seriesInfo name="BCP" value="14"/>
<seriesInfo name="RFC" value="2119"/>
<seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC6749" target="https://www.rfc-editor.org/info/rfc6749" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6749.xml">
<front>
<title>The OAuth 2.0 Authorization Framework</title>
<author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
<date month="October" year="2012"/>
<abstract>
<t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="6749"/>
<seriesInfo name="DOI" value="10.17487/RFC6749"/>
</reference>
<reference anchor="RFC8414" target="https://www.rfc-editor.org/info/rfc8414" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8414.xml">
<front>
<title>OAuth 2.0 Authorization Server Metadata</title>
<author fullname="M. Jones" initials="M." surname="Jones"/>
<author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
<author fullname="J. Bradley" initials="J." surname="Bradley"/>
<date month="June" year="2018"/>
<abstract>
<t>This specification defines a metadata format that an OAuth 2.0 client can use to obtain the information needed to interact with an OAuth 2.0 authorization server, including its endpoint locations and authorization server capabilities.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="8414"/>
<seriesInfo name="DOI" value="10.17487/RFC8414"/>
</reference>
<reference anchor="RFC8707" target="https://www.rfc-editor.org/info/rfc8707" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8707.xml">
<front>
<title>Resource Indicators for OAuth 2.0</title>
<author fullname="B. Campbell" initials="B." surname="Campbell"/>
<author fullname="J. Bradley" initials="J." surname="Bradley"/>
<author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
<date month="February" year="2020"/>
<abstract>
<t>This document specifies an extension to the OAuth 2.0 Authorization Framework defining request parameters that enable a client to explicitly signal to an authorization server about the identity of the protected resource(s) to which it is requesting access.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="8707"/>
<seriesInfo name="DOI" value="10.17487/RFC8707"/>
</reference>
<reference anchor="RFC7519" target="https://www.rfc-editor.org/info/rfc7519" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7519.xml">
<front>
<title>JSON Web Token (JWT)</title>
<author fullname="M. Jones" initials="M." surname="Jones"/>
<author fullname="J. Bradley" initials="J." surname="Bradley"/>
<author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
<date month="May" year="2015"/>
<abstract>
<t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7519"/>
<seriesInfo name="DOI" value="10.17487/RFC7519"/>
</reference>
<reference anchor="RFC7515" target="https://www.rfc-editor.org/info/rfc7515" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7515.xml">
<front>
<title>JSON Web Signature (JWS)</title>
<author fullname="M. Jones" initials="M." surname="Jones"/>
<author fullname="J. Bradley" initials="J." surname="Bradley"/>
<author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
<date month="May" year="2015"/>
<abstract>
<t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification. Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7515"/>
<seriesInfo name="DOI" value="10.17487/RFC7515"/>
</reference>
<reference anchor="RFC7516" target="https://www.rfc-editor.org/info/rfc7516" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7516.xml">
<front>
<title>JSON Web Encryption (JWE)</title>
<author fullname="M. Jones" initials="M." surname="Jones"/>
<author fullname="J. Hildebrand" initials="J." surname="Hildebrand"/>
<date month="May" year="2015"/>
<abstract>
<t>JSON Web Encryption (JWE) represents encrypted content using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries defined by that specification. Related digital signature and Message Authentication Code (MAC) capabilities are described in the separate JSON Web Signature (JWS) specification.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7516"/>
<seriesInfo name="DOI" value="10.17487/RFC7516"/>
</reference>
</references>
<references>
<name>Informative References</name>
<reference anchor="RFC7591" target="https://www.rfc-editor.org/info/rfc7591" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7591.xml">
<front>
<title>OAuth 2.0 Dynamic Client Registration Protocol</title>
<author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
<author fullname="M. Jones" initials="M." surname="Jones"/>
<author fullname="J. Bradley" initials="J." surname="Bradley"/>
<author fullname="M. Machulak" initials="M." surname="Machulak"/>
<author fullname="P. Hunt" initials="P." surname="Hunt"/>
<date month="July" year="2015"/>
<abstract>
<t>This specification defines mechanisms for dynamically registering OAuth 2.0 clients with authorization servers. Registration requests send a set of desired client metadata values to the authorization server. The resulting registration responses return a client identifier to use at the authorization server and the client metadata values registered for the client. The client can then use this registration information to communicate with the authorization server using the OAuth 2.0 protocol. This specification also defines a set of common client metadata fields and values for clients to use during registration.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7591"/>
<seriesInfo name="DOI" value="10.17487/RFC7591"/>
</reference>
</references>
</references>
<section anchor="sect-a" numbered="true" toc="default">
<name>Document History</name>
<t>[[ To be removed from the final specification ]]</t>
</section>
<section anchor="sect-b" numbered="true" toc="default">
<name>Acknowledgments</name>
<t>The author would like to thank Rupesh Santha Ramachandran, Mangesh Bopardikar and Naveen Tiku who contributed ideas and feedback that shaped and formed the final specification.</t>
<t>This document was prepared using 2-Word-v2.0.template.dot.</t>
</section>
</back>
</rfc>
