rfc9701xml2.original.xml | rfc9701.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!-- | <!DOCTYPE rfc [ | |||
This template is for creating an Internet Draft using xml2rfc, wh | <!ENTITY nbsp " "> | |||
ich | <!ENTITY zwsp "​"> | |||
is available here: http://xml.resource.org. | <!ENTITY nbhy "‑"> | |||
--> | <!ENTITY wj "⁠"> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | ||||
<!-- One method to get references from the online citation libraries. | ||||
There has to be one entity for each item to be referenced. | ||||
An alternate method (rfc include) is described in the references. --> | ||||
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.2119.xml"> | ||||
<!ENTITY RFC2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.2629.xml"> | ||||
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.3552.xml"> | ||||
<!ENTITY I-D.narten-iana-considerations-rfc2434bis SYSTEM "http://xml.resource.o | ||||
rg/public/rfc/bibxml3/reference.I-D.narten-iana-considerations-rfc2434bis.xml"> | ||||
]> | ]> | |||
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
<!-- used by XSLT processors --> | ||||
<!-- | ||||
For a complete list and description of processing instructions (P | ||||
Is), | ||||
please see http://xml.resource.org/authoring/README.html. | ||||
--> | ||||
<!-- | ||||
Below are generally applicable Processing Instructions (PIs) that | ||||
most | ||||
I-Ds might want to use. (Here they are set differently than their | ||||
defaults in xml2rfc v1.32) | ||||
--> | ||||
<?rfc strict="yes" ?> | ||||
<!-- give errors regarding ID-nits and DTD validation --> | ||||
<!-- control the table of contents (ToC) --> | ||||
<?rfc toc="yes"?> | ||||
<!-- generate a ToC --> | ||||
<?rfc tocdepth="4"?> | ||||
<!-- the number of levels of subsections in ToC. default: 3 --> | ||||
<!-- control references --> | ||||
<?rfc symrefs="yes"?> | ||||
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] --> | ||||
<?rfc sortrefs="yes" ?> | ||||
<!-- sort the reference entries alphabetically --> | ||||
<!-- | ||||
control vertical white space (using these PIs as follows is | ||||
recommended by the RFC Editor) | ||||
--> | ||||
<?rfc compact="yes" ?> | ||||
<!-- do not start each main section on a new page --> | ||||
<?rfc subcompact="no" ?> | ||||
<!-- keep one blank line between list items --> | ||||
<!-- end of list of popular I-D processing instructions --> | ||||
<rfc category="std" docName="draft-ietf-oauth-jwt-introspection-response-12" | ||||
ipr="trust200902"> | ||||
<!-- | ||||
category values: std, bcp, info, exp, and historic ipr values: | ||||
full3667, noModification3667, noDerivatives3667 you can add the | ||||
attributes updates="NNNN" and obsoletes="NNNN" they will automati | ||||
cally | ||||
be output with "(if approved)" | ||||
--> | ||||
<!-- ***** FRONT MATTER ***** --> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-oauth-jwt-in trospection-response-12" number="9701" ipr="trust200902" obsoletes="" updates="" submissionType="IETF" category="std" consensus="true" xml:lang="en" tocInclude= "true" tocDepth="4" symRefs="true" sortRefs="true" version="3"> | |||
<front> | <!-- xml2rfc v2v3 conversion 3.9.1 --> | |||
<!-- | <front> | |||
The abbreviated title is used in the page header - it is | <!--[rfced] FYI, the title of the document has been updated as | |||
only | follows. Abbreviations have been expanded per Section 3.6 of RFC 7322 | |||
necessary if the full title is longer than 39 characters | ("RFC Style Guide"). Please review. | |||
--> | ||||
<title abbrev="JWT Response">JWT Response for OAuth Token Introspection</tit | Original: | |||
le> | JWT Response for OAuth Token Introspection | |||
<author fullname="Torsten Lodderstedt" initials="T." role="editor" | Current: | |||
surname="Lodderstedt"> | JSON Web Token (JWT) Response for OAuth Token Introspection | |||
<organization>yes.com AG</organization> | --> | |||
<!--[rfced] FYI, regarding the use of <tt> within this document, it renders | ||||
(using xml2rfc) in fixed-width font in the HTML and PDF files. However, | ||||
the rendering of <tt> in the text file was changed in September 2021 - | ||||
quotation marks are no longer added. When you review the diff file for | ||||
this document, it will appear that the RPC removed quotation marks; | ||||
however, actually this is due to the rendering change for <tt>. | ||||
(For details, see the release notes for v3.10.0 on | ||||
https://github.com/ietf-tools/xml2rfc/blob/main/CHANGELOG.md) | ||||
Examples of where <tt> is used in the original (and remains): | ||||
alg value, enc value | ||||
Accept HTTP header field | ||||
aud claim, token_introspection claim | ||||
typ JWT header | ||||
--> | ||||
<title abbrev="JWT Response">JSON Web Token (JWT) Response for OAuth Token I | ||||
ntrospection</title> | ||||
<seriesInfo name="RFC" value="9701"/> | ||||
<author fullname="Torsten Lodderstedt" initials="T." role="editor" surname=" | ||||
Lodderstedt"> | ||||
<organization>yes.com AG</organization> | ||||
<address> | <address> | |||
<email>torsten@lodderstedt.net</email> | <email>torsten@lodderstedt.net</email> | |||
<!-- uri and facsimile elements may also be added --> | ||||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Vladimir Dzhuvinov" initials="V." surname="Dzhuvinov"> | ||||
<author fullname="Vladimir Dzhuvinov" initials="V." | ||||
surname="Dzhuvinov"> | ||||
<organization>Connect2id Ltd.</organization> | <organization>Connect2id Ltd.</organization> | |||
<address> | <address> | |||
<email>vladimir@connect2id.com</email> | <email>vladimir@connect2id.com</email> | |||
<!-- uri and facsimile elements may also be added --> | ||||
</address> | </address> | |||
</author> | </author> | |||
<date month="November" year="2024"/> | ||||
<date day="04" month="Sep" year="2021" /> | ||||
<!-- Meta-data Declarations --> | ||||
<area>Security Area</area> | <area>Security Area</area> | |||
<workgroup>Open Authentication Protocol</workgroup> | <workgroup>Open Authentication Protocol</workgroup> | |||
<!-- | ||||
WG name at the upperleft corner of the doc, IETF is fine | ||||
for | ||||
individual submissions. If this element is not present, t | ||||
he default | ||||
is "Network Working Group", which is used by the RFC Edit | ||||
or as a nod | ||||
to the history of the IETF. | ||||
--> | ||||
<keyword>token introspection</keyword> | <keyword>token introspection</keyword> | |||
<keyword>JWT</keyword> | <keyword>JWT</keyword> | |||
<keyword>oauth2</keyword> | <keyword>oauth2</keyword> | |||
<abstract> | ||||
<!--[rfced] May we update this sentence as follows, to clarify the | ||||
phrase "additional JSON Web Token (JWT) secured response"? | ||||
<!-- | Original: | |||
Keywords will be incorporated into HTML output files in a | This specification proposes an additional JSON Web Token (JWT) | |||
meta tag | secured response for OAuth 2.0 Token Introspection. | |||
but they have no effect on text or nroff output. If you s | ||||
ubmit your | ||||
draft to the RFC Editor, the keywords will be used for th | ||||
e search | ||||
engine. | ||||
--> | ||||
<abstract> | Perhaps: | |||
This specification proposes an additional response secured by | ||||
JSON Web Token (JWT) for OAuth 2.0 Token Introspection. | ||||
--> | ||||
<t>This specification proposes an additional JSON Web Token (JWT) secured response | <t>This specification proposes an additional JSON Web Token (JWT) secured response | |||
for OAuth 2.0 Token Introspection.</t> | for OAuth 2.0 Token Introspection.</t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="Introduction" title="Introduction"> | <section anchor="Introduction" numbered="true" toc="default"> | |||
<t><xref target="RFC7662">OAuth 2.0 Token Introspection</xref> specifies a | <name>Introduction</name> | |||
<t><xref target="RFC7662" format="default">"OAuth 2.0 Token Introspection" | ||||
</xref> specifies a | ||||
method for a protected resource to query an OAuth 2.0 authorization server | method for a protected resource to query an OAuth 2.0 authorization server | |||
to determine the state of an access token and obtain data associated with | to determine the state of an access token and obtain data associated with | |||
the access token. This enables deployments to implement opaque access | the access token. This enables deployments to implement opaque access | |||
tokens in an interoperable way.</t> | tokens in an interoperable way.</t> | |||
<t>The introspection response, as specified in <xref target="RFC7662">OAut | <t>The introspection response, as specified in <xref target="RFC7662" form | |||
h | at="default">"OAuth | |||
2.0 Token Introspection</xref>, is a plain JSON object. | 2.0 Token Introspection"</xref>, is a plain JSON object. | |||
However, there are use cases where the resource server requires stronger | However, there are use cases where the resource server requires stronger | |||
assurance that the authorization server issued the token introspection | assurance that the authorization server issued the token introspection | |||
response for an access token, including cases where the authorization serv er | response for an access token, including cases where the authorization serv er | |||
assumes liability for the content of the token introspection response. | assumes liability for the content of the token introspection response. | |||
An example is a resource server using verified person data to create certi ficates, | An example is a resource server using verified personal data to create cer tificates, | |||
which in turn are used to create qualified electronic signatures.</t> | which in turn are used to create qualified electronic signatures.</t> | |||
<t>In such use cases it may be useful or even required to return a | <t>In such use cases, it may be useful or even required to return a | |||
signed <xref target="RFC7519">JWT</xref> as the introspection response. | signed <xref target="RFC7519" format="default">JWT</xref> as the introspec | |||
tion response. | ||||
This specification extends the token introspection endpoint with the capab ility | This specification extends the token introspection endpoint with the capab ility | |||
to return responses as JWTs.</t> | to return responses as JWTs.</t> | |||
</section> | ||||
<section anchor="RNC" title="Requirements Notation and Conventions"> | ||||
<t> | ||||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL | ||||
" | ||||
in this document are to be interpreted as described in | ||||
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
</section> | </section> | |||
<section anchor="RNC" numbered="true" toc="default"> | ||||
<section anchor="as-rs-relationship" title="Resource Server Management"> | <name>Requirements Notation</name> | |||
<t>The authorization server (AS) and the resource server (RS) maintain a str | <t> | |||
ong two-way trust relationship. | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
"<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14> | ||||
", | ||||
"<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | ||||
"<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ||||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | ||||
be | ||||
interpreted as described in BCP 14 <xref target="RFC2119"/> <xref | ||||
target="RFC8174"/> when, and only when, they appear in all capitals, as | ||||
shown here. | ||||
</t> | ||||
</section> | ||||
<section anchor="as-rs-relationship" numbered="true" toc="default"> | ||||
<name>Resource Server Management</name> | ||||
<t>The authorization server (AS) and the resource server (RS) maintain a s | ||||
trong, two-way trust relationship. | ||||
The resource server relies on the authorization server to obtain authorizati on, | The resource server relies on the authorization server to obtain authorizati on, | |||
user and other data as input to its access control decisions and service del ivery. | user, and other data as input to its access control decisions and service de livery. | |||
The authorization server relies on the resource server to handle the provide d data | The authorization server relies on the resource server to handle the provide d data | |||
appropriately.</t> | appropriately.</t> | |||
<t>In the context of this specification, the token introspection endpoint is | <t>In the context of this specification, the token introspection endpoint | |||
used to convey | is used to convey | |||
such security data and potentially also privacy sensitive data related to an | such security data and potentially also privacy-sensitive data related to an | |||
access | access | |||
token.</t> | token.</t> | |||
<t>In order to process the introspection requests in a secure and | <t>In order to process the introspection requests in a secure and | |||
privacy-preserving manner, the authorization server MUST be able to identify | privacy-preserving manner, the authorization server <bcp14>MUST</bcp14> be a | |||
, | ble to identify, | |||
authenticate and authorize resource servers.</t> | authenticate, and authorize resource servers.</t> | |||
<t>The authorization server MAY additionally encrypt the token introspection | <t>The AS <bcp14>MAY</bcp14> additionally encrypt the token introspection | |||
response JWTs. | response JWTs. | |||
If encryption is used the authorization server is provisioned with encryptio | If encryption is used, the AS is provisioned with encryption keys and | |||
n keys and | ||||
algorithms for the RS.</t> | algorithms for the RS.</t> | |||
<t>The authorization server MUST be able to determine whether an RS is the | <t>The AS <bcp14>MUST</bcp14> be able to determine whether an RS is the | |||
audience for a particular access token and what data it is entitled to recei | audience for a particular access token and what data it is entitled to recei | |||
ve, | ve; | |||
otherwise the RS is not authorized to obtain data for the access token. | otherwise, the RS is not authorized to obtain data for the access token. | |||
The AS has the discretion how to fulfil this requirement. The AS could, for | The AS has the discretion of how to fulfill this requirement. The AS could, | |||
example, | for example, | |||
maintain a mapping between scope values and resource servers.</t> | maintain a mapping between scope values and RSes.</t> | |||
<t>The requirements given above imply that the authorization server | <t>The requirements given above imply that the AS | |||
maintains credentials and other configuration data for each RS.</t> | maintains credentials and other configuration data for each RS.</t> | |||
<t>One way is by utilizing dynamic client registration <xref target="RFC7591 | <t>One way is by utilizing dynamic client registration <xref target="RFC75 | |||
"/> | 91" format="default"/> | |||
and treating every RS as an OAuth client. In this case, the authorization se | and treating every RS as an OAuth client. In this case, the AS | |||
rver | ||||
is assumed to at least maintain a "client_id" and a "token_endpoint_auth_met hod" | is assumed to at least maintain a "client_id" and a "token_endpoint_auth_met hod" | |||
with complementary authentication method metadata, such as "jwks" or "client _secret". | with complementary authentication method metadata, such as "jwks" or "client _secret". | |||
In cases where the AS needs to acquire consent to transmit data to a RS, the following | In cases where the AS needs to acquire consent to transmit data to an RS, th e following | |||
client metadata fields are recommended: "client_name", "client_uri", "contac ts", | client metadata fields are recommended: "client_name", "client_uri", "contac ts", | |||
"tos_uri", "policy_uri".</t> | "tos_uri", and "policy_uri".</t> | |||
<t>The AS MUST restrict the use of client credentials by a RS to the calls | <t>The AS <bcp14>MUST</bcp14> restrict the use of client credentials by an | |||
it requires, e.g. the AS MAY restrict such a client to call | RS to the calls | |||
it requires, e.g., the AS <bcp14>MAY</bcp14> restrict such a client to call | ||||
the token introspection endpoint only. How the AS implements this restrictio n | the token introspection endpoint only. How the AS implements this restrictio n | |||
is beyond the scope of this specification.</t> | is beyond the scope of this specification.</t> | |||
<t>This specification further introduces client metadata to manage the | <t>This specification further introduces client metadata to manage the | |||
configuration options required to sign and encrypt token introspection | configuration options required to sign and encrypt token introspection | |||
response JWTs.</t> | response JWTs.</t> | |||
</section> | </section> | |||
<section anchor="jwt_request" numbered="true" toc="default"> | ||||
<name>Requesting a JWT Response</name> | ||||
<t>An RS requests a JWT introspection response by sending an introspection | ||||
request | ||||
with an <tt>Accept</tt> HTTP header field set to | ||||
"application/token-introspection+jwt".</t> | ||||
<section anchor="jwt_request" title="Requesting a JWT Response"> | <!--[rfced] Please clarify the latter part of this sentence. | |||
What is "identifying it as subject" referring to? | ||||
<t>A resource server requests a JWT introspection response by sending an | Original: | |||
introspection request | Authentication can utilize client authentication methods | |||
with an <spanx style="verb">Accept</spanx> HTTP header field set to | or a separate access token issued to the resource server and | |||
"application/token-introspection+jwt".</t> | identifying it as subject. | |||
<t>The AS MUST authenticate the caller at the token introspection endpoint. | Perhaps (referring to the resource server): | |||
Authentication can | Authentication can utilize client authentication methods | |||
utilize client authentication methods or a separate access token issued to t | or a separate access token issued to the RS to | |||
he resource server | identify the RS as the subject. | |||
and identifying it as subject.</t> | ||||
<t>The following is a non-normative example request, with the resource | Or (also referring to the resource server): | |||
server authenticating with a private key JWT:</t> | Authentication can utilize client authentication methods | |||
or a separate access token that is issued to the RS and | ||||
identifies the RS as the subject. | ||||
--> | ||||
<t> | <t>The AS <bcp14>MUST</bcp14> authenticate the caller at the token introsp | |||
<figure> | ection endpoint. Authentication can | |||
<artwork><![CDATA[POST /introspect HTTP/1.1 | utilize client authentication methods or a separate access token issued to t | |||
he RS | ||||
and identifying it as subject.</t> | ||||
<t>The following is a non-normative example request, with the RS authentic | ||||
ating with a private key JWT:</t> | ||||
<sourcecode name="" type=""><![CDATA[ | ||||
POST /introspect HTTP/1.1 | ||||
Host: as.example.com | Host: as.example.com | |||
Accept: application/token-introspection+jwt | Accept: application/token-introspection+jwt | |||
Content-Type: application/x-www-form-urlencoded | Content-Type: application/x-www-form-urlencoded | |||
token=2YotnFZFEjr1zCsicMWpAA& | token=2YotnFZFEjr1zCsicMWpAA& | |||
client_assertion_type= | client_assertion_type= | |||
urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer& | urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer& | |||
client_assertion=PHNhbWxwOl[...omitted for brevity...]ZT]]></artwork> | client_assertion=PHNhbWxwOl[...omitted for brevity...]ZT | |||
</figure> | ]]></sourcecode> | |||
</t> | </section> | |||
<section anchor="jwt_response" numbered="true" toc="default"> | ||||
</section> | <name>JWT Response</name> | |||
<t>The introspection endpoint responds with a JWT, setting the | ||||
<section anchor="jwt_response" title="JWT Response"> | <tt>Content-Type</tt> HTTP header field to | |||
"application/token-introspection+jwt" and the JWT <tt>typ</tt> | ||||
<t>The introspection endpoint responds with a JWT, setting the | ||||
<spanx style="verb">Content-Type</spanx> HTTP header field to | ||||
"application/token-introspection+jwt" and the JWT <spanx style="verb">typ</ | ||||
spanx> | ||||
("type") header parameter to "token-introspection+jwt".</t> | ("type") header parameter to "token-introspection+jwt".</t> | |||
<t>The JWT <bcp14>MUST</bcp14> include the following top-level claims: | ||||
</t> | ||||
<dl newline="true" spacing="normal"> | ||||
<dt>iss</dt> | ||||
<dd><bcp14>MUST</bcp14> be set to the issuer URL of the authorization | ||||
server.</dd> | ||||
<dt>aud</dt> | ||||
<dd><bcp14>MUST</bcp14> identify the resource server receiving the token | ||||
introspection response.</dd> | ||||
<dt>iat</dt> | ||||
<dd><bcp14>MUST</bcp14> be set to the time when the introspection respon | ||||
se | ||||
was created by the authorization server</dd> | ||||
<dt>token_introspection</dt> | ||||
<dd> | ||||
<!--[rfced] We are having some difficulty parsing this sentence, | ||||
specifically "a dedicated containing JWT claim". How should | ||||
it be updated? | ||||
<t>The JWT MUST include the following top-level claims: | Original: | |||
<list hangIndent="8" style="hanging"> | The separation of the introspection response | |||
<t hangText="iss">MUST be set to the issuer URL of the authorization | members into a dedicated containing JWT claim is intended to | |||
server.</t> | prevent conflict and confusion with top-level JWT claims that | |||
<t hangText="aud">MUST identify the resource server receiving the token | may bear the same name. | |||
introspection response.</t> | ||||
<t hangText="iat">MUST be set to the time when the introspection respon | Perhaps: | |||
se | The separation of the introspection response | |||
was created by the authorization server.</t> | members into a dedicated, contained JWT claim is intended to | |||
<t hangText="token_introspection">A JSON object containing the members | prevent conflict and confusion with top-level JWT claims that | |||
of the token introspection response as specified in <xref target="RFC76 | may bear the same name. | |||
62"/>, section 2.2. | --> | |||
<t>A JSON object containing the members of the token introspection resp | ||||
onse, as specified | ||||
in <xref target="RFC7662" section="2.2" sectionFormat="comma" format="de | ||||
fault"/>. | ||||
The separation of the introspection response members into | The separation of the introspection response members into | |||
a dedicated containing JWT claim is intended to prevent conflict and co nfusion | a dedicated containing JWT claim is intended to prevent conflict and co nfusion | |||
with top-level JWT claims that may bear the same name. | with top-level JWT claims that may bear the same name. | |||
<vspace blankLines="1" /> | </t> | |||
<t> | ||||
If the access token is invalid, expired, revoked, or not intended for t he | If the access token is invalid, expired, revoked, or not intended for t he | |||
calling resource server (audience), the authorization server MUST set t | calling resource server (audience), the authorization server <bcp14>MUS | |||
he value of the | T</bcp14> set the value of the | |||
<spanx style="verb">active</spanx> member in the <spanx style="verb">to | <tt>active</tt> member in the <tt>token_introspection</tt> | |||
ken_introspection</spanx> | claim to <tt>false</tt> and <bcp14>MUST NOT</bcp14> include other membe | |||
claim to <spanx style="verb">false</spanx> and MUST NOT include other m | rs. | |||
embers. | Otherwise, the <tt>active</tt> member is set to <tt>true</tt>. | |||
Otherwise, the <spanx style="verb">active</spanx> member is set to <spa | </t> | |||
nx style="verb">true</spanx>. | <t> | |||
<vspace blankLines="1" /> | The AS <bcp14>SHOULD</bcp14> narrow down the <tt>scope</tt> value to th | |||
The AS SHOULD narrow down the <spanx style="verb">scope</spanx> value t | e scopes | |||
o the scopes | ||||
relevant to the particular RS. | relevant to the particular RS. | |||
<vspace blankLines="1" /> | </t> | |||
As specified in section 2.2 of <xref target="RFC7662"/>, implementation | <t> | |||
s MAY extend the | As specified in <xref target="RFC7662" section="2.2" sectionFormat="of" | |||
format="default"/>, implementations <bcp14>MAY</bcp14> extend the | ||||
token introspection response with service-specific claims. In the conte xt of this | token introspection response with service-specific claims. In the conte xt of this | |||
specification, such claims will be added as top-level members of the | specification, such claims will be added as top-level members of the | |||
<spanx style="verb">token_introspection</spanx> claim. | <tt>token_introspection</tt> claim. | |||
<vspace blankLines="1" /> | </t> | |||
Token introspection response parameter names intended to be used across | <t> | |||
domains MUST be | Token introspection response parameter names intended to be used across | |||
registered in the <xref target="IANA.OAuth.Token.Introspection">OAuth T | domains <bcp14>MUST</bcp14> be | |||
oken Introspection | registered in the <xref target="IANA.OAuth.Token.Introspection" format= | |||
Response registry</xref> defined by <xref target="RFC7662"/>. | "default">"OAuth Token Introspection | |||
<vspace blankLines="1" /> | Response" registry</xref> defined by <xref target="RFC7662" format="def | |||
ault"/>. | ||||
</t> | ||||
<t> | ||||
When the AS acts as a provider of resource owner | When the AS acts as a provider of resource owner | |||
identity claims to the RS, the AS determines based on its RS-specific p olicy what | identity claims to the RS, the AS determines, based on its RS-specific policy, what | |||
identity claims to return in the token introspection response. | identity claims to return in the token introspection response. | |||
The AS MUST ensure the release of any privacy-sensitive data is legally | The AS <bcp14>MUST</bcp14> ensure the release of any privacy-sensitive | |||
based (see | data is legally based (see | |||
<xref target="privacy"/>). | <xref target="privacy" format="default"/>). | |||
<vspace blankLines="1" /> | </t> | |||
<t> | ||||
Further content of the introspection response is determined by the RS-s pecific | Further content of the introspection response is determined by the RS-s pecific | |||
policy at the AS.</t> | policy at the AS.</t> | |||
</list> | </dd> | |||
</t> | </dl> | |||
<t>The JWT <bcp14>MAY</bcp14> include other claims, including those from t | ||||
<t>The JWT MAY include other claims, including those from the "JSON Web Tok | he | |||
en Claims" | "JSON Web Token Claims" registry established by <xref target="RFC7519" | |||
registry established by <xref target="RFC7519"/>. The JWT SHOULD NOT includ | format="default"/>. The JWT <bcp14>SHOULD NOT</bcp14> include the | |||
e the | <tt>sub</tt> and <tt>exp</tt> claims, as an additional measure to prevent | |||
<spanx style="verb">sub</spanx> and <spanx style="verb">exp</spanx> claims, | misuse of the JWT as an access token (see | |||
as an additional prevention against misuse of the JWT as an access token (s | <xref target="Cross-JWT_Confusion" format="default"/>).</t> | |||
ee | <!--[rfced] Please review whether any of the notes in this document | |||
<xref target="Cross-JWT_Confusion"/>).</t> | should be in the <aside> element. It is defined as "a container for | |||
content that is semantically less important or tangential to the | ||||
<t>Note: Although the JWT format is widely used as an access token format, | content that surrounds it" (https://xml2rfc.tools.ietf.org/xml2rfc-doc.html#name | |||
the JWT | -aside-2). | |||
--> | ||||
<t>Note: Although the JWT format is widely used as an access token format, | ||||
the JWT | ||||
returned in the introspection response is not an alternative representation of | returned in the introspection response is not an alternative representation of | |||
the introspected access token and is not intended to be used as an access t oken.</t> | the introspected access token and is not intended to be used as an access t oken.</t> | |||
<t>This specification registers the "application/token-introspection+jwt" | ||||
<t>This specification registers the "application/token-introspection+jwt" m | media type, | |||
edia type, | which is used as the value of the <tt>typ</tt> ("type") header | |||
which is used as value of the <spanx style="verb">typ</spanx> ("type") head | ||||
er | ||||
parameter of the JWT to indicate that the payload is a token introspection response.</t> | parameter of the JWT to indicate that the payload is a token introspection response.</t> | |||
<t>The JWT is cryptographically secured as specified in <xref target="RFC7 | ||||
<t>The JWT is cryptographically secured as specified in <xref target="RFC75 | 519" format="default"/>.</t> | |||
19"/>.</t> | <t>Depending on the specific resource server policy, the JWT is either | |||
signed or signed and encrypted. If the JWT is signed and encrypted, it | ||||
<t>Depending on the specific resource server policy the JWT is either | <bcp14>MUST</bcp14> be a Nested JWT, as defined in <xref target="RFC7519" f | |||
signed, or signed and encrypted. If the JWT is signed and encrypted it | ormat="default">JWT</xref>.</t> | |||
MUST be a Nested JWT, as defined in <xref target="RFC7519">JWT</xref>.</t> | <t>Note: An AS compliant with this specification <bcp14>MUST</bcp14> refus | |||
e to serve introspection | ||||
<t>Note: An AS compliant with this specification MUST refuse to serve intro | requests that don't authenticate the caller and return an HTTP status code | |||
spection | 400. This is | |||
requests that don't authenticate the caller, and return an HTTP status code | ||||
400. This is | ||||
done to ensure token data is released to legitimate recipients only and pre vent | done to ensure token data is released to legitimate recipients only and pre vent | |||
downgrading to <xref target="RFC7662"/> behavior (see | downgrading to <xref target="RFC7662" format="default"/> behavior (see | |||
<xref target="token_data_leakage"/>).</t> | <xref target="token_data_leakage" format="default"/>).</t> | |||
<t>The following is a non-normative example response | ||||
<t>The following is a non-normative example response | ||||
(with line breaks for display purposes only):</t> | (with line breaks for display purposes only):</t> | |||
<sourcecode name="" type=""><![CDATA[ | ||||
<t> | HTTP/1.1 200 OK | |||
<figure> | ||||
<artwork><![CDATA[HTTP/1.1 200 OK | ||||
Content-Type: application/token-introspection+jwt | Content-Type: application/token-introspection+jwt | |||
eyJraWQiOiJ3RzZEIiwidHlwIjoidG9rZW4taW50cm9zcGVjdGlvbitqd3QiLCJhbGc | eyJraWQiOiJ3RzZEIiwidHlwIjoidG9rZW4taW50cm9zcGVjdGlvbitqd3QiLCJhbGc | |||
iOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczovL2FzLmV4YW1wbGUuY29tLyIsImF1ZCI6I | iOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczovL2FzLmV4YW1wbGUuY29tLyIsImF1ZCI6I | |||
mh0dHBzOi8vcnMuZXhhbXBsZS5jb20vcmVzb3VyY2UiLCJpYXQiOjE1MTQ3OTc4OTIs | mh0dHBzOi8vcnMuZXhhbXBsZS5jb20vcmVzb3VyY2UiLCJpYXQiOjE1MTQ3OTc4OTIs | |||
InRva2VuX2ludHJvc3BlY3Rpb24iOnsiYWN0aXZlIjp0cnVlLCJpc3MiOiJodHRwczo | InRva2VuX2ludHJvc3BlY3Rpb24iOnsiYWN0aXZlIjp0cnVlLCJpc3MiOiJodHRwczo | |||
vL2FzLmV4YW1wbGUuY29tLyIsImF1ZCI6Imh0dHBzOi8vcnMuZXhhbXBsZS5jb20vcm | vL2FzLmV4YW1wbGUuY29tLyIsImF1ZCI6Imh0dHBzOi8vcnMuZXhhbXBsZS5jb20vcm | |||
Vzb3VyY2UiLCJpYXQiOjE1MTQ3OTc4MjIsImV4cCI6MTUxNDc5Nzk0MiwiY2xpZW50X | Vzb3VyY2UiLCJpYXQiOjE1MTQ3OTc4MjIsImV4cCI6MTUxNDc5Nzk0MiwiY2xpZW50X | |||
2lkIjoicGFpQjJnb28wYSIsInNjb3BlIjoicmVhZCB3cml0ZSBkb2xwaGluIiwic3Vi | 2lkIjoicGFpQjJnb28wYSIsInNjb3BlIjoicmVhZCB3cml0ZSBkb2xwaGluIiwic3Vi | |||
IjoiWjVPM3VwUEM4OFFyQWp4MDBkaXMiLCJiaXJ0aGRhdGUiOiIxOTgyLTAyLTAxIiw | IjoiWjVPM3VwUEM4OFFyQWp4MDBkaXMiLCJiaXJ0aGRhdGUiOiIxOTgyLTAyLTAxIiw | |||
iZ2l2ZW5fbmFtZSI6IkpvaG4iLCJmYW1pbHlfbmFtZSI6IkRvZSIsImp0aSI6InQxRm | iZ2l2ZW5fbmFtZSI6IkpvaG4iLCJmYW1pbHlfbmFtZSI6IkRvZSIsImp0aSI6InQxRm | |||
9DQ2FaZDRYdjRPUkpVV1ZVZVRaZnNLaFczMENRQ3JXRERqd1h5NncifX0.przJMU5Gh | 9DQ2FaZDRYdjRPUkpVV1ZVZVRaZnNLaFczMENRQ3JXRERqd1h5NncifX0.przJMU5Gh | |||
mNzvwtt1Sr-xa9xTkpiAg5IshbQsRiRVP_7eGR1GHYrNwQh84kxOkHCyje2g5WSRcYo | mNzvwtt1Sr-xa9xTkpiAg5IshbQsRiRVP_7eGR1GHYrNwQh84kxOkHCyje2g5WSRcYo | |||
sGEVIiC-eoPJJ-qBwqwSlgx9JEeCDw2W5DjrblOI_N0Jvsq_dUeOyoWVMqlOydOBhKN | sGEVIiC-eoPJJ-qBwqwSlgx9JEeCDw2W5DjrblOI_N0Jvsq_dUeOyoWVMqlOydOBhKN | |||
Y0smBrI4NZvEExucOm9WUJXMuJtvq1gBes-0go5j4TEv9sOP9uu81gqWTr_LOo6pgT0 | Y0smBrI4NZvEExucOm9WUJXMuJtvq1gBes-0go5j4TEv9sOP9uu81gqWTr_LOo6pgT0 | |||
tFFyZfWC4kbXPXiQ2YT6mxCiQRRNM-l9cBdF6Jx6IOrsfFhBuYdYQ_mlL19HgDDOFal | tFFyZfWC4kbXPXiQ2YT6mxCiQRRNM-l9cBdF6Jx6IOrsfFhBuYdYQ_mlL19HgDDOFal | |||
eyqmru6lKlASOsaE8dmLSeKcX91FbG79FKN8un24iwIDCbKT9xlUFl54xWVShNDFA]]></artwork> | eyqmru6lKlASOsaE8dmLSeKcX91FbG79FKN8un24iwIDCbKT9xlUFl54xWVShNDFA | |||
</figure> | ]]></sourcecode> | |||
</t> | <t> | |||
<t> | ||||
The example response JWT header contains the following JSON document: | The example response JWT header contains the following JSON document: | |||
</t> | </t> | |||
<t> | <sourcecode name="" type=""><![CDATA[ | |||
<figure> | { | |||
<artwork><![CDATA[{ | ||||
"typ": "token-introspection+jwt", | "typ": "token-introspection+jwt", | |||
"alg": "RS256", | "alg": "RS256", | |||
"kid": "wG6D" | "kid": "wG6D" | |||
}]]></artwork> | } | |||
</figure> | ]]></sourcecode> | |||
</t> | <t> | |||
<t> | ||||
The example response JWT payload contains the following JSON document: | The example response JWT payload contains the following JSON document: | |||
</t> | </t> | |||
<t> | <sourcecode name="" type=""><![CDATA[ | |||
<figure> | { | |||
<artwork><![CDATA[{ | ||||
"iss":"https://as.example.com/", | "iss":"https://as.example.com/", | |||
"aud":"https://rs.example.com/resource", | "aud":"https://rs.example.com/resource", | |||
"iat":1514797892, | "iat":1514797892, | |||
"token_introspection": | "token_introspection": | |||
{ | { | |||
"active":true, | "active":true, | |||
"iss":"https://as.example.com/", | "iss":"https://as.example.com/", | |||
"aud":"https://rs.example.com/resource", | "aud":"https://rs.example.com/resource", | |||
"iat":1514797822, | "iat":1514797822, | |||
"exp":1514797942, | "exp":1514797942, | |||
"client_id":"paiB2goo0a", | "client_id":"paiB2goo0a", | |||
"scope":"read write dolphin", | "scope":"read write dolphin", | |||
"sub":"Z5O3upPC88QrAjx00dis", | "sub":"Z5O3upPC88QrAjx00dis", | |||
"birthdate":"1982-02-01", | "birthdate":"1982-02-01", | |||
"given_name":"John", | "given_name":"John", | |||
"family_name":"Doe", | "family_name":"Doe", | |||
"jti":"t1FoCCaZd4Xv4ORJUWVUeTZfsKhW30CQCrWDDjwXy6w" | "jti":"t1FoCCaZd4Xv4ORJUWVUeTZfsKhW30CQCrWDDjwXy6w" | |||
} | } | |||
}]]></artwork> | } | |||
</figure> | ]]></sourcecode> | |||
</t> | ||||
</section> | </section> | |||
<section anchor="client_metadata" numbered="true" toc="default"> | ||||
<section anchor="client_metadata" title="Client Metadata"> | <name>Client Metadata</name> | |||
<t>The authorization server determines the algorithm to | <t>The authorization server determines the algorithm to | |||
secure the JWT for a particular introspection response. This decision can | secure the JWT for a particular introspection response. This decision can | |||
be based on registered metadata parameters for the resource server, | be based on registered metadata parameters for the resource server, | |||
supplied via dynamic client registration <xref target="RFC7591"/> with the | supplied via dynamic client registration <xref target="RFC7591" | |||
format="default"/> with the | ||||
resource server acting as a client, as specified below.</t> | resource server acting as a client, as specified below.</t> | |||
<t>The parameter names follow the pattern established by | <t>The parameter names follow the pattern established by | |||
<xref target="OpenID.Registration">OpenID Connect | <xref target="OpenID.Registration" format="default">OpenID Connect | |||
Dynamic Client Registration</xref> for configuring signing and encryption | Dynamic Client Registration</xref> for configuring signing and encryption | |||
algorithms for JWT responses at the UserInfo endpoint.</t> | algorithms for JWT responses at the UserInfo endpoint.</t> | |||
<t>The following client metadata parameters are introduced by this | <t>The following client metadata parameters are introduced by this | |||
specification: | specification: | |||
<list hangIndent="8" style="hanging"> | </t> | |||
<t hangText="introspection_signed_response_alg">OPTIONAL. | <dl newline="true" spacing="normal"> | |||
<xref target="RFC7515">JWS</xref> | <dt>introspection_signed_response_alg</dt> | |||
algorithm (<spanx style="verb">alg</spanx> value) as defined in | <dd><bcp14>OPTIONAL</bcp14>. | |||
<xref target="RFC7518">JWA</xref> for signing introspection responses. | <xref target="RFC7515" format="default">"JSON Web Signature (JWS)"</xre | |||
If | f> | |||
algorithm (<tt>alg</tt> value), as defined in | ||||
<xref target="RFC7518" format="default">"JSON Web Algorithms (JWA)"</xr | ||||
ef>, for signing | ||||
introspection responses. If | ||||
this is specified, the response will be signed using JWS and the | this is specified, the response will be signed using JWS and the | |||
configured algorithm. The default, if omitted, is <spanx style="verb">R | configured algorithm. The default, if omitted, is <tt>RS256</tt>.</dd> | |||
S256</spanx>.</t> | <dt>introspection_encrypted_response_alg</dt> | |||
<t hangText="introspection_encrypted_response_alg">OPTIONAL. | <dd><bcp14>OPTIONAL</bcp14>. | |||
<xref target="RFC7516">JWE</xref> algorithm (<spanx style="verb">alg</ | <xref target="RFC7516" format="default">"JSON Web Encryption | |||
spanx> value) | (JWE)"</xref> algorithm (<tt>alg</tt> value), | |||
as defined in <xref target="RFC7518">JWA</xref> for content key encryp | as defined in <xref target="RFC7518" format="default">JWA</xref>, for | |||
tion. | content key encryption. | |||
If this is specified, the response will be encrypted using JWE and the | If this is specified, the response will be encrypted using JWE and the | |||
configured content encryption algorithm | configured content encryption algorithm | |||
(<spanx style="verb">introspection_encrypted_response_enc</spanx>). Th e default, | (<tt>introspection_encrypted_response_enc</tt>). The default, | |||
if omitted, is that no encryption is performed. | if omitted, is that no encryption is performed. | |||
If both signing and | If both signing and | |||
encryption are requested, the response will be | encryption are requested, the response will be | |||
signed then encrypted, with the result being a Nested JWT, as defined in | signed then encrypted, with the result being a Nested JWT, as defined in | |||
<xref target="RFC7519">JWT</xref>.</t> | <xref target="RFC7519" format="default">JWT</xref>.</dd> | |||
<t hangText="introspection_encrypted_response_enc">OPTIONAL. | <dt>introspection_encrypted_response_enc</dt> | |||
<xref target="RFC7516">JWE</xref> algorithm (<spanx style="verb">enc</ | <dd><bcp14>OPTIONAL</bcp14>. | |||
spanx> value) | <xref target="RFC7516" format="default">JWE</xref> algorithm | |||
as defined in <xref target="RFC7518">JWA</xref> for content encryption | (<tt>enc</tt> value), | |||
of | as defined in <xref target="RFC7518" format="default">JWA</xref>, for | |||
introspection responses. The default, if omitted, is <spanx style="ver | content encryption of | |||
b">A128CBC-HS256</spanx>. | introspection responses. The default, if omitted, is <tt>A128CBC-HS256</ | |||
Note: This parameter MUST NOT be specified without setting | tt>. | |||
<spanx style="verb">introspection_encrypted_response_alg</spanx>.</t> | Note: This parameter <bcp14>MUST NOT</bcp14> be specified without sett | |||
</list> | ing | |||
</t> | <tt>introspection_encrypted_response_alg</tt>.</dd> | |||
<t>Resource servers may register their public encryption keys | </dl> | |||
using the <spanx style="verb">jwks_uri</spanx> or <spanx style="verb">jwks | <t>Resource servers may register their public encryption keys | |||
</spanx> | using the <tt>jwks_uri</tt> or <tt>jwks</tt> | |||
metadata parameters.</t> | metadata parameters.</t> | |||
</section> | </section> | |||
<section anchor="server_metadata" numbered="true" toc="default"> | ||||
<section anchor="server_metadata" title="Authorization Server Metadata"> | <name>Authorization Server Metadata</name> | |||
<t>Authorization servers SHOULD publish the supported algorithms for | <t>Authorization servers <bcp14>SHOULD</bcp14> publish the supported algor | |||
ithms for | ||||
signing and encrypting the JWT of an introspection response by utilizing | signing and encrypting the JWT of an introspection response by utilizing | |||
<xref target="RFC8414">OAuth 2.0 Authorization Server Metadata</xref> | <xref target="RFC8414" format="default">"OAuth 2.0 Authorization Server Me tadata"</xref> | |||
parameters. Resource servers use this data to parametrize their client | parameters. Resource servers use this data to parametrize their client | |||
registration requests.</t> | registration requests.</t> | |||
<t>The following parameters are introduced by this specification: | <t>The following parameters are introduced by this specification: | |||
<list hangIndent="8" style="hanging"> | ||||
<t hangText="introspection_signing_alg_values_supported"> | ||||
OPTIONAL. JSON array containing a list of the <xref target="RFC75 | ||||
15">JWS</xref> signing | ||||
algorithms (<spanx style="verb">alg</spanx> values) as defined in | ||||
<xref target="RFC7518">JWA</xref> supported by the introspection | ||||
endpoint to sign the response.</t> | ||||
<t hangText="introspection_encryption_alg_values_supported"> | ||||
OPTIONAL. JSON array containing a list of the <xref target="RFC75 | ||||
16">JWE</xref> | ||||
encryption algorithms (<spanx style="verb">alg</spanx> values) as | ||||
defined in | ||||
<xref target="RFC7518">JWA</xref> supported by the | ||||
introspection endpoint to encrypt the content encryption key for | ||||
introspection responses (content key encryption).</t> | ||||
<t hangText="introspection_encryption_enc_values_supported"> | ||||
OPTIONAL. JSON array containing a list of the <xref target="RFC75 | ||||
16">JWE</xref> | ||||
encryption algorithms (<spanx style="verb">enc</spanx> values) as | ||||
defined in | ||||
<xref target="RFC7518">JWA</xref> supported by the introspection | ||||
endpoint to encrypt the response (content encryption).</t> | ||||
</list> | ||||
</t> | </t> | |||
<dl newline="true" spacing="normal"> | ||||
<dt>introspection_signing_alg_values_supported</dt> | ||||
<dd> | ||||
<bcp14>OPTIONAL</bcp14>. JSON array containing a list of the <xre | ||||
f target="RFC7515" format="default">JWS</xref> signing | ||||
algorithms (<tt>alg</tt> values), as defined in | ||||
<xref target="RFC7518" format="default">JWA</xref>, supported by | ||||
the introspection | ||||
endpoint to sign the response.</dd> | ||||
<dt>introspection_encryption_alg_values_supported</dt> | ||||
<dd> | ||||
<bcp14>OPTIONAL</bcp14>. JSON array containing a list of the <xre | ||||
f target="RFC7516" format="default">JWE</xref> | ||||
encryption algorithms (<tt>alg</tt> values), as defined in | ||||
<xref target="RFC7518" format="default">JWA</xref>, supported by | ||||
the | ||||
introspection endpoint to encrypt the content encryption key for | ||||
introspection responses (content key encryption).</dd> | ||||
<dt>introspection_encryption_enc_values_supported</dt> | ||||
<dd> | ||||
<bcp14>OPTIONAL</bcp14>. JSON array containing a list of the <xre | ||||
f target="RFC7516" format="default">JWE</xref> | ||||
encryption algorithms (<tt>enc</tt> values), as defined in | ||||
<xref target="RFC7518" format="default">JWA</xref>, supported by | ||||
the introspection | ||||
endpoint to encrypt the response (content encryption).</dd> | ||||
</dl> | ||||
</section> | </section> | |||
<section anchor="Security" numbered="true" toc="default"> | ||||
<section anchor="Security" title="Security Considerations"> | <name>Security Considerations</name> | |||
<section anchor="Cross-JWT_Confusion" title="Cross-JWT Confusion"> | <section anchor="Cross-JWT_Confusion" numbered="true" toc="default"> | |||
<t>The <spanx style="verb">iss</spanx> and potentially the <spanx style="v | <name>Cross-JWT Confusion</name> | |||
erb">aud</spanx> | <t>The <tt>iss</tt> and potentially the <tt>aud</tt> | |||
claim of a token introspection JWT can resemble those of a JWT-encoded acc ess token. | claim of a token introspection JWT can resemble those of a JWT-encoded acc ess token. | |||
An attacker could try to exploit this and pass a JWT token introspection r esponse as | An attacker could try to exploit this and pass a JWT token introspection r esponse as | |||
an access token to the resource server. The <spanx style="verb">typ</spanx | an access token to the resource server. The <tt>typ</tt> ("type") | |||
> ("type") | JWT header "token-introspection+jwt" and the encapsulation of the token in | |||
JWT header "token-introspection+jwt" and the encapsulation of the token in | trospection members, | |||
trospection members | such as <tt>sub</tt> and <tt>scope</tt> in | |||
such as <spanx style="verb">sub</spanx> and <spanx style="verb">scope</spa | the <tt>token_introspection</tt> claim, are intended to prevent such | |||
nx> in | substitution attacks. Resource servers <bcp14>MUST</bcp14> therefore check | |||
the <spanx style="verb">token_introspection</spanx> claim is intended to p | the <tt>typ</tt> | |||
revent such | ||||
substitution attacks. Resource servers MUST therefore check the <spanx sty | ||||
le="verb">typ</spanx> | ||||
JWT header value of received JWT-encoded access tokens and ensure all mini mally | JWT header value of received JWT-encoded access tokens and ensure all mini mally | |||
required claims for a valid access token are present.</t> | required claims for a valid access token are present.</t> | |||
<!--[rfced] draft-ietf-oauth-security-topics (RFC-to-be 9700) does not | ||||
have a Section 3.2. How this should be updated? Please | ||||
see https://www.rfc-editor.org/authors/rfc9700.html | ||||
<t>Resource servers MUST additionally apply the countermeasures against re | Original: | |||
play | Resource servers MUST additionally apply the countermeasures against | |||
as described in <xref target="I-D.ietf-oauth-security-topics"/>, section 3 | replay as described in [I-D.ietf-oauth-security-topics], section 3.2. | |||
.2.</t> | --> | |||
<t>JWT Confusion and other attacks involving JWTs are discussed in | <t>Resource servers <bcp14>MUST</bcp14> additionally apply the counterme | |||
<xref target="I-D.ietf-oauth-jwt-bcp"/>.</t> | asures against replay, | |||
</section> | as described in <xref target="RFC9700" section="3.2" sectionFormat="comma" | |||
format="default"/>.</t> | ||||
<t>JWT confusion and other attacks involving JWTs are discussed in | ||||
<xref target="RFC8725" format="default"/>.</t> | ||||
</section> | ||||
<section anchor="token_data_leakage" numbered="true" toc="default"> | ||||
<name>Token Data Leakage</name> | ||||
<!--[rfced] RFC 7525 has been obsoleted by RFC 9325. Also, | ||||
RFC 7525 is no longer part of BCP 195. How should this sentence | ||||
be updated? | ||||
<section anchor="token_data_leakage" title="Token Data Leakage"> | Original: | |||
<t>The authorization server MUST use Transport Layer Security (TLS) 1.2 | The authorization server MUST use Transport Layer Security (TLS) 1.2 | |||
(or higher) per BCP 195 <xref target="RFC7525"/> in order to prevent | (or higher) per BCP 195 [RFC7525] in order to prevent token data | |||
token data leakage.</t> | leakage. | |||
<t>Section 2.1 of <xref target="RFC7662"/> permits requests to the introsp | Perhaps (A), if simple replacement is accurate: | |||
ection endpoint to | The authorization server MUST use Transport Layer Security (TLS) 1.2 | |||
be authorized with an access token which doesn't identify the caller. To p | (or higher) per BCP 195 [RFC9325] in order to prevent token data | |||
revent | leakage. | |||
introspection of tokens by parties that are not the intended consumer the | ||||
authorization server MUST require all requests to the token introspection | Or (B), if referencing the whole BCP (RFC 8996 + RFC 9325) is accurate: | |||
endpoint to be | The authorization server MUST use Transport Layer Security (TLS) 1.2 | |||
(or higher) per [BCP195] in order to prevent token data leakage. | ||||
--> | ||||
<t>The authorization server <bcp14>MUST</bcp14> use Transport Layer Secu | ||||
rity (TLS) 1.2 | ||||
(or higher), per BCP 195 <xref target="RFC7525" format="default"/>, in ord | ||||
er to prevent | ||||
token data leakage.</t> | ||||
<t><xref target="RFC7662" section="2.1" sectionFormat="of" format="defau | ||||
lt"/> permits requests to the introspection endpoint to | ||||
be authorized with an access token that doesn't identify the caller. To pr | ||||
event | ||||
introspection of tokens by parties that are not the intended consumer, the | ||||
authorization server <bcp14>MUST</bcp14> require all requests to the token | ||||
introspection endpoint to be | ||||
authenticated.</t> | authenticated.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="privacy" numbered="true" toc="default"> | ||||
<section anchor="privacy" title="Privacy Considerations"> | <name>Privacy Considerations</name> | |||
<t>The token introspection response can be used to transfer personal identi | <t>The token introspection response can be used to transfer personal ident | |||
fiable | ifiable | |||
information (PII) from the AS to the RS. The AS MUST conform to legal and j | information (PII) from the AS to the RS. The AS <bcp14>MUST</bcp14> conform | |||
urisdictional constraints | to legal and jurisdictional constraints | |||
for the data transfer before any data is released to a particular RS. The d etails and determining | for the data transfer before any data is released to a particular RS. The d etails and determining | |||
of these constraints varies by jurisdiction and is outside the scope of thi | of these constraints vary by jurisdiction and are outside the scope of this | |||
s document.</t> | document.</t> | |||
<t>A commonly found way to establish the legal basis for releasing PII is b | <t>A commonly found way to establish the legal basis for releasing PII is | |||
y explicit user | by explicit user | |||
consent gathered from the resource owner by the AS during the authorization flow.</t> | consent gathered from the resource owner by the AS during the authorization flow.</t> | |||
<t>It is also possible that the legal basis is established out of band, for | <t>It is also possible that the legal basis is established out of band, for | |||
example in | example, in an explicit contract or by the client gathering the resource ow | |||
an explicit contract or by the client gathering the resource owner's consen | ner's | |||
t.</t> | consent.</t> | |||
<t>If the AS and the RS belong to the same legal entity (1st party scenario | <t>If the AS and the RS belong to the same legal entity (1st party scenario | |||
), there is | ), | |||
potentially no need for an explicit user consent but the terms of service a | there is potentially no need for an explicit user consent, but the terms of | |||
nd policy | service and policy of the respective service provider <bcp14>MUST</bcp14> b | |||
of the respective service provider MUST be enforced at all times.</t> | e | |||
<t>In any case, the AS MUST ensure that the scope of the legal basis is enf | enforced at all times.</t> | |||
orced | <t>In any case, the AS <bcp14>MUST</bcp14> ensure that the scope of the leg | |||
throughout the whole process. The AS MUST retain the scope of the legal bas | al | |||
is with | basis is enforced throughout the whole process. The AS <bcp14>MUST</bcp14> | |||
the access token, e.g. in the scope value, it MUST authenticate the RS, and | retain the scope of the legal basis with the access token, e.g., in the sco | |||
the AS MUST | pe | |||
determine the data a resource server is allowed to receive based on the res | value, it <bcp14>MUST</bcp14> authenticate the RS, and the AS <bcp14>MUST</ | |||
ource server’s identity and | bcp14> | |||
suitable token data, e.g. the scope value. </t> | determine the data an RS is allowed to receive based on the RS's identity a | |||
<t>Implementers should be aware that a token introspection request lets the | nd suitable token data, | |||
AS know when the client | e.g., the scope value. </t> | |||
(and potentially the user) is accessing the RS, which is also an indication | <t>Implementers should be aware that a token introspection request lets the | |||
of when the user is using | AS | |||
the client. If this implication is not acceptable, implementers MUST use ot | know when the client (and potentially the user) is accessing the RS, which | |||
her means to relay | is | |||
access token data, for example by directly transferring the data needed by | also an indication of when the user is using | |||
the RS within the access | the client. If this implication is not acceptable, implementers | |||
token.</t> | <bcp14>MUST</bcp14> use other means to relay | |||
</section> | access token data, for example, by directly transferring the data needed by | |||
the | ||||
<section anchor="Acknowledgements" title="Acknowledgements"> | RS within the access token.</t> | |||
<t>We would like to thank Petteri Stenius, Neil Madden, Filip Skokan, Tony | ||||
Nadalin, Remco Schaar, Justin Richer, Takahiko Kawasaki, Benjamin Kaduk, | ||||
Robert Wilton and Roman Danyliw for their valuable feedback.</t> | ||||
</section> | </section> | |||
<!-- Possibly a 'Contributors' section ... --> | <section anchor="IANA" numbered="true" toc="default"> | |||
<name>IANA Considerations</name> | ||||
<section anchor="IANA" title="IANA Considerations"> | <section anchor="DynRegReg" numbered="true" toc="default"> | |||
<name>OAuth Dynamic Client Registration Metadata Registration</name> | ||||
<section anchor="DynRegReg" title="OAuth Dynamic Client Registration Metad | ||||
ata Registration"> | ||||
<t> | <t> | |||
This specification requests registration of the following client metad ata definitions | The following client metadata definitions have been registered | |||
in the IANA "OAuth Dynamic Client Registration Metadata" registry | in the IANA "OAuth Dynamic Client Registration Metadata" registry | |||
<xref target="IANA.OAuth.Parameters"/> | <xref target="IANA.OAuth.Parameters" format="default"/> | |||
established by <xref target="RFC7591"/>: | established by <xref target="RFC7591" format="default"/>: | |||
</t> | </t> | |||
<section anchor="DynRegContents" title="Registry Contents"> | <!--[rfced] FYI, in Sections 10.1.1, 10.2.1, and 10.4.1, | |||
<t> | the change controller has been updated from "IESG" to "IETF" to match | |||
<list style="symbols"> | the actual IANA registries. This was noted as follows in the mail | |||
<t> | from IANA: "Note: in accordance with recent practice, the change controller | |||
Client Metadata Name: <spanx style="verb">introspection_signed_r | for these registrations has been changed from the IESG to the IETF." | |||
esponse_alg</spanx> | ||||
</t> | ||||
<t> | ||||
Client Metadata Description: | ||||
String value indicating the client's desired introspection respo | ||||
nse | ||||
signing algorithm. | ||||
</t> | ||||
<t> | ||||
Change Controller: IESG | ||||
</t> | ||||
<t> | ||||
Specification Document(s): <xref target="client_metadata"/> of [ | ||||
[ this specification ]] | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t> | ||||
Client Metadata Name: <spanx style="verb">introspection_encrypte | ||||
d_response_alg</spanx> | ||||
</t> | ||||
<t> | ||||
Client Metadata Description: | ||||
String value specifying the desired introspection response | ||||
content key encryption algorithm (alg value). | ||||
</t> | ||||
<t> | ||||
Change Controller: IESG | ||||
</t> | ||||
<t> | ||||
Specification Document(s): <xref target="client_metadata"/> of [ | ||||
[ this specification ]] | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t> | ||||
Client Metadata Name: <spanx style="verb">introspection_encrypte | ||||
d_response_enc</spanx> | ||||
</t> | ||||
<t> | ||||
Client Metadata Description: | ||||
String value specifying the desired introspection response | ||||
content encryption algorithm (enc value). | ||||
</t> | ||||
<t> | ||||
Change Controller: IESG | ||||
</t> | ||||
<t> | ||||
Specification Document(s): <xref target="client_metadata"/> of [ | ||||
[ this specification ]] | ||||
</t> | ||||
</list> | ||||
</t> | ||||
This is in keeping with IANA's "Guidance for RFC Authors" (on | ||||
https://www.iana.org/help/protocol-registration): | ||||
"The IESG shouldn't be listed as a change controller unless the RFC that | ||||
created the registry (e.g. port numbers, XML namespaces and schemas) | ||||
requires it. The IETF should be named instead." | ||||
We have also updated the change controller in Section 10.3.1 accordingly. | ||||
If that is not accurate, please let us know. | ||||
--> | ||||
<section anchor="DynRegContents" numbered="true" toc="default"> | ||||
<name>Registry Contents</name> | ||||
<dl newline="false" spacing="compact"> | ||||
<dt>Client Metadata Name:</dt> | ||||
<dd><tt>introspection_signed_response_alg</tt></dd> | ||||
<dt>Client Metadata Description:</dt> | ||||
<dd>String value indicating the client's desired introspection respo | ||||
nse | ||||
signing algorithm</dd> | ||||
<dt>Change Controller:</dt> | ||||
<dd>IETF</dd> | ||||
<dt>Reference:</dt> | ||||
<dd><xref target="client_metadata" format="default"/> of RFC 9701</dd | ||||
> | ||||
</dl> | ||||
<dl newline="false" spacing="compact"> | ||||
<dt>Client Metadata Name:</dt> | ||||
<dd><tt>introspection_encrypted_response_alg</tt></dd> | ||||
<dt>Client Metadata Description:</dt> | ||||
<dd>String value specifying the desired introspection response | ||||
content key encryption algorithm (alg value)</dd> | ||||
<dt>Change Controller:</dt> | ||||
<dd>IETF</dd> | ||||
<dt>Reference:</dt> | ||||
<dd><xref target="client_metadata" format="default"/> of RFC 9701</dd | ||||
> | ||||
</dl> | ||||
<dl newline="false" spacing="compact"> | ||||
<dt>Client Metadata Name:</dt> | ||||
<dd><tt>introspection_encrypted_response_enc</tt></dd> | ||||
<dt>Client Metadata Description:</dt> | ||||
<dd>String value specifying the desired introspection response | ||||
content encryption algorithm (enc value)</dd> | ||||
<dt>Change Controller:</dt> | ||||
<dd>IETF</dd> | ||||
<dt>Reference:</dt> | ||||
<dd><xref target="client_metadata" format="default"/> of RFC 9701</dd | ||||
> | ||||
</dl> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="ietf-oauth-discoveryIANA" numbered="true" toc="default"> | ||||
<section anchor="ietf-oauth-discoveryIANA" title="OAuth Authorization Serv | <name>OAuth Authorization Server Metadata Registration</name> | |||
er Metadata Registration"> | <t> | |||
<t> | The following values have been registered in | |||
This specification requests registration of the following values | the IANA "OAuth Authorization Server Metadata" registry | |||
in the IANA "OAuth Authorization Server Metadata" registry | <xref target="IANA.OAuth.Parameters" format="default"/> established by < | |||
<xref target="IANA.OAuth.Parameters"/> established by <xref target="RFC8 | xref target="RFC8414" format="default"/>. | |||
414"/>. | </t> | |||
</t> | <section numbered="true" toc="default"> | |||
<section title="Registry Contents"> | <name>Registry Contents</name> | |||
<t> | <dl newline="false" spacing="compact"> | |||
<list style='symbols'> | <dt>Metadata Name:</dt> | |||
<t>Metadata Name: <spanx style="verb">introspection_signing_alg_va | <dd><tt>introspection_signing_alg_values_supported</tt></dd> | |||
lues_supported</spanx></t> | <dt>Metadata Description:</dt> | |||
<t>Metadata Description: JSON array containing a list of algorithm | <dd>JSON array containing a list of algorithms supported | |||
s supported | by the authorization server for introspection response signing</dd> | |||
by the authorization server for introspection response signing.</t | <dt>Change Controller:</dt> | |||
> | <dd>IETF</dd> | |||
<t>Change Controller: IESG</t> | <dt>Reference:</dt> | |||
<t>Specification Document(s): <xref target="server_metadata"/> of | <dd><xref target="server_metadata" format="default"/> of RFC 9701</dd | |||
[[ this specification ]]</t> | > | |||
</list> | </dl> | |||
</t> | <dl newline="false" spacing="compact"> | |||
<t> | <dt>Metadata Name:</dt> | |||
<list style='symbols'> | <dd><tt>introspection_encryption_alg_values_supported</tt></dd> | |||
<t>Metadata Name: <spanx style="verb">introspection_encryption_alg | <dt>Metadata Description:</dt> | |||
_values_supported</spanx></t> | <dd>JSON array containing a list of algorithms supported | |||
<t>Metadata Description: JSON array containing a list of algorithm | by the authorization server for introspection response content key | |||
s supported | encryption (alg value)</dd> | |||
by the authorization server for introspection response content key | <dt>Change Controller:</dt> | |||
encryption (alg value).</t> | <dd>IETF</dd> | |||
<t>Change Controller: IESG</t> | <dt>Reference:</dt> | |||
<t>Specification Document(s): <xref target="server_metadata"/> of | <dd><xref target="server_metadata" format="default"/> of RFC 9701</dd | |||
[[ this specification ]]</t> | > | |||
</list> | </dl> | |||
</t> | <dl newline="false" spacing="compact"> | |||
<t> | <dt>Metadata Name:</dt> | |||
<list style='symbols'> | <dd><tt>introspection_encryption_enc_values_supported</tt></dd> | |||
<t>Metadata Name: <spanx style="verb">introspection_encryption_enc | <dt>Metadata Description:</dt> | |||
_values_supported</spanx></t> | <dd>JSON array containing a list of algorithms supported | |||
<t>Metadata Description: JSON array containing a list of algorithm | by the authorization server for introspection response content | |||
s supported | encryption (enc value)</dd> | |||
by the authorization server for introspection response content enc | <dt>Change Controller:</dt> | |||
ryption (enc value).</t> | <dd>IETF</dd> | |||
<t>Change Controller: IESG</t> | <dt>Reference:</dt> | |||
<t>Specification Document(s): <xref target="server_metadata"/> of | <dd><xref target="server_metadata" format="default"/> of RFC 9701</dd | |||
[[ this specification ]]</t> | > | |||
</list> | </dl> | |||
</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="ietf-media-typeIANA" numbered="true" toc="default"> | ||||
<section anchor="ietf-media-typeIANA" title="Media Type Registration"> | <name>Media Type Registration</name> | |||
<t>This section registers the "application/token-introspection+jwt" media | <t>The "application/token-introspection+jwt" media type has been registe | |||
type | red | |||
in the "Media Types" registry <xref target="IANA.MediaTypes"/> in the | in the "Media Types" registry <xref target="IANA.MediaTypes" | |||
manner described in <xref target="RFC6838"/>, which can be used to indicate t | format="default"/> in the manner described in <xref target="RFC6838" | |||
hat the | format="default"/>. It can be used to indicate that the | |||
content is a token introspection response in JWT format.</t> | content is a token introspection response in JWT format.</t> | |||
<section title="Registry Contents"> | <section numbered="true" toc="default"> | |||
<t> | <name>Registry Contents</name> | |||
<list style='symbols'> | <dl newline="false" spacing="normal"> | |||
<t>Type name: application</t> | <dt>Type name:</dt> | |||
<t>Subtype name: token-introspection+jwt</t> | <dd>application</dd> | |||
<t>Required parameters: N/A</t> | <dt>Subtype name:</dt> | |||
<t>Optional parameters: N/A</t> | <dd>token-introspection+jwt</dd> | |||
<t>Encoding considerations: binary; A token introspection response | <dt>Required parameters:</dt> | |||
is a JWT; JWT values are | <dd>N/A</dd> | |||
encoded as a series of base64url-encoded values (with trailing | <dt>Optional parameters:</dt> | |||
'=' | <dd>N/A</dd> | |||
characters removed), some of which may be the empty string, | <dt>Encoding considerations:</dt> | |||
separated by period ('.') characters.</t> | <dd>binary. A token introspection response is a JWT; JWT values are | |||
<t>Security considerations: See Section 7 of this specification</t | encoded as a series of base64url-encoded values (with trailing '=' | |||
> | characters removed), some of which may be the empty string, | |||
<t>Interoperability considerations: N/A</t> | separated by period ('.') characters.</dd> | |||
<t>Published specification: Section 4 of this specification</t> | <dt>Security considerations:</dt> | |||
<t>Applications that use this media type: Applications that produc | <dd>see <xref target="Security" format="default"/> of | |||
e and consume | RFC 9701</dd> | |||
OAuth Token Introspection Responses in JWT format</t> | <dt>Interoperability considerations:</dt> | |||
<t>Fragment identifier considerations: N/A</t> | <dd>N/A</dd> | |||
<t>Additional information: | <dt>Published specification:</dt> | |||
<list style='symbols'> | <dd><xref target="jwt_request" format="default"/> of RFC 9701</dd> | |||
<t>Magic number(s): N/A</t> | <dt>Applications that use this media type:</dt> | |||
<t>File extension(s): N/A</t> | <dd>applications that produce and consume | |||
<t>Macintosh file type code(s): N/A</t> | OAuth Token Introspection Responses in JWT format</dd> | |||
</list> | <dt>Fragment identifier considerations:</dt> | |||
</t> | <dd>N/A</dd> | |||
<t>Person & email address to contact for further information: | </dl> | |||
Torsten Lodderstedt, | <dl newline="true" spacing="normal"> | |||
torsten@lodderstedt.net</t> | <dt >Additional information:</dt> | |||
<t>Intended usage: COMMON</t> | <dd> | |||
<t>Restrictions on usage: none</t> | <dl newline="false" spacing="compact"> | |||
<t>Author: Torsten Lodderstedt, torsten@lodderstedt.net</t> | <dt>Magic number(s):</dt> | |||
<t>Change controller: IESG</t> | <dd>N/A</dd> | |||
<t>Provisional registration? No</t> | <dt>File extension(s):</dt> | |||
</list> | <dd>N/A</dd> | |||
</t> | <dt>Macintosh file type code(s):</dt> | |||
<dd>N/A</dd> | ||||
</dl> | ||||
</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="normal"> | ||||
<dt>Person & email address to contact for further information:</ | ||||
dt> | ||||
<dd><br/>Torsten Lodderstedt (torsten@lodderstedt.net)</dd> | ||||
<dt>Intended usage:</dt> | ||||
<dd>COMMON</dd> | ||||
<dt>Restrictions on usage:</dt> | ||||
<dd>none</dd> | ||||
<dt>Author:</dt> | ||||
<dd>Torsten Lodderstedt (torsten@lodderstedt.net)</dd> | ||||
<dt>Change controller:</dt> | ||||
<dd>IETF</dd> | ||||
<dt>Provisional registration?</dt> | ||||
<dd>No</dd> | ||||
</dl> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="ietf-jwt-IANA" numbered="true" toc="default"> | ||||
<section anchor="ietf-jwt-IANA" title="JWT Claim Registration"> | <name>JWT Claim Registration</name> | |||
<t>This section registers the "token_introspection" claim in the JSON Web | <t>The "token_introspection" claim has been registered in the "JSON Web | |||
Token (JWT) IANA registry <xref target="IANA.JWT"/> in the manner describe | Token (JWT)" registry <xref target="IANA.JWT" format="default"/> in the ma | |||
d in | nner described in | |||
<xref target="RFC7519"/>.</t> | <xref target="RFC7519" format="default"/>.</t> | |||
<section title="Registry Contents"> | <section numbered="true" toc="default"> | |||
<t> | <name>Registry Contents</name> | |||
<list style='symbols'> | <dl newline="false" spacing="compact"> | |||
<t>Claim name: token_introspection</t> | <dt>Claim Name:</dt> | |||
<t>Claim description: Token introspection response</t> | <dd>token_introspection</dd> | |||
<t>Change Controller: IESG</t> | <dt>Claim Description:</dt> | |||
<t>Specification Document(s): <xref target="jwt_response"/> of [[t | <dd>Token introspection response</dd> | |||
his specification]]</t> | <dt>Change Controller:</dt> | |||
</list> | <dd>IETF</dd> | |||
</t> | <dt>Reference:</dt> | |||
<dd><xref target="jwt_response" format="default"/> of RFC 9701</dd> | ||||
</dl> | ||||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
</middle> | </middle> | |||
<!-- *****BACK MATTER ***** --> | ||||
<back> | <back> | |||
<references title="Normative References"> | ||||
<?rfc include="reference.RFC.2119"?> | ||||
<?rfc include="reference.RFC.6838"?> | ||||
<?rfc include="reference.RFC.7519"?> | ||||
<?rfc include="reference.RFC.7525"?> | ||||
<?rfc include="reference.RFC.7591"?> | ||||
<?rfc include="reference.RFC.7662"?> | ||||
<?rfc include="reference.RFC.7518"?> | ||||
<?rfc include="reference.RFC.7515"?> | ||||
<?rfc include="reference.RFC.7516"?> | ||||
<?rfc include="reference.RFC.8174"?> | ||||
<?rfc include="reference.RFC.8414"?> | ||||
<?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference. | ||||
I-D.draft-ietf-oauth-jwt-bcp-06.xml'?> | ||||
<?rfc include='http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference. | ||||
I-D.draft-ietf-oauth-security-topics-13.xml'?> | ||||
<reference anchor="OpenID.Registration" target="https://openid.net/specs/ | <references> | |||
openid-connect-registration-1_0.html"> | <name>References</name> | |||
<front> | <references> | |||
<title>OpenID Connect Dynamic Client Registration 1.0 incorporating er | <name>Normative References</name> | |||
rata set 1</title> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2 | |||
119.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6 | ||||
838.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
519.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
525.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
591.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
662.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
518.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
515.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
516.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
174.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
414.xml"/> | ||||
<author fullname="Nat Sakimura"> | <!-- [I-D.ietf-oauth-jwt-bcp] Published as RFC 8725--> | |||
<organization>NRI</organization> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | |||
</author> | 725.xml"/> | |||
<author fullname="John Bradley"> | ||||
<organization>Ping Identity</organization> | ||||
</author> | ||||
<author fullname="Mike Jones"> | ||||
<organization>Microsoft</organization> | ||||
</author> | ||||
<date day="8" month="Nov" year="2014"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="IANA.MediaTypes" target="http://www.iana.org/assignments/medi | <!-- [I-D.ietf-oauth-security-topics] companion document 9700 --> | |||
a-types"> | <reference anchor="RFC9700" target="https://www.rfc-editor.org/info/rfc9700"> | |||
<front> | <front> | |||
<title>Media Types</title> | <title>OAuth 2.0 Security Best Current Practice</title> | |||
<author fullname="IANA"> | <author initials='T' surname='Lodderstedt' fullname='Torsten Lodderstedt'> | |||
<organization abbrev="ISO">IANA</organization> | <organization>yes.com</organization> | |||
</author> | </author> | |||
<date/> | <author initials='J' surname='Bradley' fullname='John Bradley'> | |||
</front> | <organization>Yubico</organization> | |||
</author> | ||||
<author initials='A' surname='Labunets' fullname='Andrey Labunets'> | ||||
<organization>Independent Researcher</organization> | ||||
</author> | ||||
<author initials='D' surname='Fett' fullname='Daniel Fett'> | ||||
<organization>yes.com</organization> | ||||
</author> | ||||
<date month='November' year='2024'/> | ||||
</front> | ||||
<seriesInfo name="BCP" value="240"/> | ||||
<seriesInfo name="RFC" value="9700"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC9700"/> | ||||
</reference> | </reference> | |||
<reference anchor="IANA.JWT" target="https://www.iana.org/assignments/jwt/jwt.xh | <reference anchor="OpenID.Registration" target="https://openid.net/specs/openid- | |||
tml#claims"> | connect-registration-1_0.html"> | |||
<front> | <front> | |||
<title>JSON Web Token (JWT) claims registry</title> | <title>OpenID Connect Dynamic Client Registration 1.0 incorporating | |||
<author fullname="IANA"> | errata set 1</title> | |||
<organization abbrev="ISO">IANA</organization> | <author fullname="Nat Sakimura"> | |||
</author> | <organization>NRI</organization> | |||
<date/> | </author> | |||
</front> | <author fullname="John Bradley"> | |||
</reference> | <organization>Ping Identity</organization> | |||
</author> | ||||
<author fullname="Mike Jones"> | ||||
<organization>Microsoft</organization> | ||||
</author> | ||||
<date month="November" year="2014"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="IANA.OAuth.Token.Introspection" target="https://www.iana. | <reference anchor="IANA.MediaTypes" target="http://www.iana.org/assignme | |||
org/assignments/oauth-parameters/oauth-parameters.xhtml#token-introspection-resp | nts/media-types"> | |||
onse"> | <front> | |||
<front> | <title>Media Types</title> | |||
<title>OAuth Token Introspection Response registry</title> | <author> | |||
<author> | <organization>IANA</organization> | |||
<organization>IANA</organization> | </author> | |||
</author> | <date/> | |||
<date/> | </front> | |||
</front> | </reference> | |||
</reference> | ||||
</references> | <reference anchor="IANA.JWT" target="https://www.iana.org/assignments/jw | |||
t"> | ||||
<front> | ||||
<title>JSON Web Token (JWT) Claims</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
<date/> | ||||
</front> | ||||
</reference> | ||||
<references title="Informative References"> | <reference anchor="IANA.OAuth.Token.Introspection" target="https://www.i | |||
<reference anchor="IANA.OAuth.Parameters" target="http://www.iana.org/ | ana.org/assignments/oauth-parameters"> | |||
assignments/oauth-parameters"> | <front> | |||
<front> | <title>OAuth Token Introspection Response</title> | |||
<title>OAuth Parameters</title> | <author> | |||
<author> | <organization>IANA</organization> | |||
<organization>IANA</organization> | </author> | |||
</author> | <date/> | |||
<date/> | </front> | |||
</front> | </reference> | |||
</reference> | </references> | |||
<references> | ||||
<name>Informative References</name> | ||||
<reference anchor="IANA.OAuth.Parameters" target="http://www.iana.org/assignment | ||||
s/oauth-parameters"> | ||||
<front> | ||||
<title>OAuth Parameters</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
<date/> | ||||
</front> | ||||
</reference> | ||||
</references> | ||||
</references> | </references> | |||
<section anchor="Acknowledgements" numbered="false" toc="default"> | ||||
<name>Acknowledgements</name> | ||||
<t>We would like to thank <contact fullname="Petteri Stenius"/>, <contact | ||||
fullname="Neil Madden"/>, <contact fullname="Filip Skokan"/>, <contact | ||||
fullname="Tony Nadalin"/>, <contact fullname="Remco Schaar"/>, <contact | ||||
fullname="Justin Richer"/>, <contact fullname="Takahiko Kawasaki"/>, <cont | ||||
act | ||||
fullname="Benjamin Kaduk"/>, <contact fullname=" Robert Wilton"/>, and | ||||
<contact fullname="Roman Danyliw"/> for their valuable feedback.</t> | ||||
</section> | ||||
<section anchor="History" title="Document History"> | <!-- [rfced] For sourcecode elements, please consider whether the | |||
<t>[[ To be removed from the final specification ]]</t> | "type" attribute should be set and/or has been set correctly. | |||
<t>-12<list style="symbols"> | ||||
<t>made registration of response parameters intended for cross domain | ||||
use a MUST ( in RFC 7662)</t> | ||||
</list> | ||||
</t> | ||||
<t>-11<list style="symbols"> | ||||
<t>consistent normative language that the AS must authenticate all cal | ||||
lers | ||||
to the token introspection endpoint when complying with this speci | ||||
fication</t> | ||||
<t>removes text that claims from the JSON Web Token Claims registry ma | ||||
y be included | ||||
in the token_introspection claim</t> | ||||
<t>updates the privacy considerations section</t> | ||||
<t>fixes the example BASE64URL encoded JWT payload</t> | ||||
</list> | ||||
</t> | ||||
<t>-10<list style="symbols"> | ||||
<t>added requirement to authenticate RS if privacy sensitive data is r | ||||
eleased</t> | ||||
<t>reworked text on claims from different registries</t> | ||||
<t>added forward reference to privacy considerations to section 5</t> | ||||
<t>added text in privacy considerations regarding client/user tracking | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t>-09<list style="symbols"> | ||||
<t>changes the Accept and Content-Type HTTP headers from | ||||
"application/json" to "application/token-introspection+jwt" so they | ||||
match the registered media type</t> | ||||
<t>moves the token introspection response members into a JSON object | ||||
claim named "token_introspection" to provide isolation from the top-le | ||||
vel | ||||
JWT-specific claims</t> | ||||
<t>"iss", "aud" and "iat" MUST be present as top-level JWT claims</t> | ||||
<t>the "sub" and "exp" claims SHOULD NOT be used as top-level JWT | ||||
claims as additional prevention against JWT access token substitution | ||||
attacks</t> | ||||
</list> | ||||
</t> | ||||
<t>-08<list style="symbols"> | ||||
<t>made difference between introspected access token and | ||||
introspection response clearer</t> | ||||
<t>defined semantics of JWT claims overlapping between | ||||
introspected access token and introspection response as JWT</t> | ||||
<t>added section about RS management</t> | ||||
<t>added text about user claims including a privacy considerations sec | ||||
tion</t> | ||||
<t>removed registration of OpenID Connect claims to "Token | ||||
Introspection Response" registry and refer to "JWT Claims" registry in | ||||
stead</t> | ||||
<t>added registration of "application/token-introspection+jwt" media t | ||||
ype as | ||||
type identifier of token introspection responses in JWT format</t> | ||||
<t>more changed to incorporate IESG review feedback</t> | ||||
</list> | ||||
</t> | ||||
<t>-07<list style="symbols"> | ||||
<t>fixed wrong description of "locale"</t> | ||||
<t>added references for ISO and ITU specifications</t> | ||||
</list> | ||||
</t> | ||||
<t>-06<list style="symbols"> | ||||
<t>replaced reference to RFC 7159 with reference to RFC 8259</t> | ||||
</list> | ||||
</t> | ||||
<t>-05<list style="symbols"> | ||||
<t>improved wording for TLS requirement</t> | ||||
<t>added RFC 2119 boilerplate</t> | ||||
<t>fixed and updated some references</t> | ||||
</list> | ||||
</t> | ||||
<t>-04<list style="symbols"> | The current list of preferred values for "type" is available at | |||
<t>reworked definition of parameters in section 4</t> | <https://www.rfc-editor.org/rpc/wiki/doku.php?id=sourcecode-types>. | |||
<t>added text on data minimization to security considerations section< | If the current list does not contain an applicable type, feel free to | |||
/t> | suggest additions for consideration. Note that it is also acceptable | |||
<t>added statement regarding TLS to security considerations section</t | to leave the "type" attribute not set. | |||
> | --> | |||
</list> | ||||
</t> | ||||
<t>-03<list style="symbols"> | <!-- [rfced] Please review the "Inclusive Language" portion of the online | |||
<t>added registration for OpenID Connect Standard Claims to | Style Guide <https://www.rfc-editor.org/styleguide/part2/#inclusive_language> | |||
OAuth Token Introspection Response registry</t> | and let us know if any changes are needed. Updates of this nature typically | |||
</list> | result in more precise language, which is helpful for readers. | |||
</t> | ||||
<t>-02<list style="symbols"> | ||||
<t>updated references</t> | ||||
</list> | ||||
</t> | ||||
<t>-01<list style="symbols"> | ||||
<t>adapted wording to preclude any accept header except "application/j | ||||
wt" if | ||||
encrypted responses are required</t> | ||||
<t>use registered alg value RS256 for default signing algorithm</t> | ||||
<t>added text on claims in the token introspection response</t> | ||||
</list> | ||||
</t> | ||||
<t>-00<list style="symbols"> | ||||
<t>initial version of the WG draft</t> | ||||
<t>defined default signing algorithm</t> | ||||
<t>changed behavior in case resource server is set up for encryption</ | ||||
t> | ||||
<t>Added text on token data leakage prevention to the security conside | ||||
rations</t> | ||||
<t>moved Security Considerations section forward</t> | ||||
</list> | ||||
</t> | ||||
<t>WG draft</t> | ||||
<t>-01<list style="symbols"> | ||||
<t>fixed typos in client meta data field names</t> | ||||
<t>added OAuth Server Metadata parameters to publish algorithms support | ||||
ed | ||||
for signing and encrypting the introspection response</t> | ||||
<t>added registration of new parameters for OAuth Server Metadata | ||||
and Client Registration</t> | ||||
<t>added explicit request for JWT introspection response</t> | ||||
<t>made iss and aud claims mandatory in introspection response</t> | ||||
<t>Stylistic and clarifying edits, updates references</t> | ||||
</list></t> | ||||
<t>-00<list style="symbols"> | ||||
<t>initial version</t> | ||||
</list></t> | ||||
</section> | Note that our script did not flag any words in particular, but this should | |||
</back> | still be reviewed as a best practice. | |||
</rfc> | --> | |||
</back> </rfc> | ||||
End of changes. 106 change blocks. | ||||
829 lines changed or deleted | 757 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |