rfc9470.original | rfc9470.txt | |||
---|---|---|---|---|
Web Authorization Protocol V. Bertocci | Internet Engineering Task Force (IETF) V. Bertocci | |||
Internet-Draft Auth0/Okta | Request for Comments: 9470 Auth0/Okta | |||
Intended status: Standards Track B. Campbell | Category: Standards Track B. Campbell | |||
Expires: 28 December 2023 Ping Identity | ISSN: 2070-1721 Ping Identity | |||
26 June 2023 | August 2023 | |||
OAuth 2.0 Step-up Authentication Challenge Protocol | OAuth 2.0 Step Up Authentication Challenge Protocol | |||
draft-ietf-oauth-step-up-authn-challenge-17 | ||||
Abstract | Abstract | |||
It is not uncommon for resource servers to require different | It is not uncommon for resource servers to require different | |||
authentication strengths or recentness according to the | authentication strengths or recentness according to the | |||
characteristics of a request. This document introduces a mechanism | characteristics of a request. This document introduces a mechanism | |||
for a resource server to signal to a client that the authentication | that resource servers can use to signal to a client that the | |||
event associated with the access token of the current request does | authentication event associated with the access token of the current | |||
not meet its authentication requirements and specify how to meet | request does not meet its authentication requirements and, further, | |||
them. This document also codifies a mechanism for a client to | how to meet them. This document also codifies a mechanism for a | |||
request that an authorization server achieve a specific | client to request that an authorization server achieve a specific | |||
authentication strength or recentness when processing an | authentication strength or recentness when processing an | |||
authorization request. | authorization request. | |||
Discussion Venues | ||||
This note is to be removed before publishing as an RFC. | ||||
Discussion of this document takes place on the Web Authorization | ||||
Protocol Working Group mailing list (oauth@ietf.org), which is | ||||
archived at https://mailarchive.ietf.org/arch/browse/oauth/. | ||||
Source for this draft can be found at https://github.com/oauth-wg/ | ||||
oauth-step-up-authn-challenge. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | This document is a product of the Internet Engineering Task Force | |||
Task Force (IETF). Note that other groups may also distribute | (IETF). It represents the consensus of the IETF community. It has | |||
working documents as Internet-Drafts. The list of current Internet- | received public review and has been approved for publication by the | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | Information about the current status of this document, any errata, | |||
and may be updated, replaced, or obsoleted by other documents at any | and how to provide feedback on it may be obtained at | |||
time. It is inappropriate to use Internet-Drafts as reference | https://www.rfc-editor.org/info/rfc9470. | |||
material or to cite them other than as "work in progress." | ||||
This Internet-Draft will expire on 28 December 2023. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2023 IETF Trust and the persons identified as the | Copyright (c) 2023 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
1.1. Conventions and Terminology . . . . . . . . . . . . . . . 3 | 1.1. Conventions and Terminology | |||
2. Protocol Overview . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Protocol Overview | |||
3. Authentication Requirements Challenge . . . . . . . . . . . . 6 | 3. Authentication Requirements Challenge | |||
4. Authorization Request . . . . . . . . . . . . . . . . . . . . 8 | 4. Authorization Request | |||
5. Authorization Response . . . . . . . . . . . . . . . . . . . 8 | 5. Authorization Response | |||
6. Authentication Information Conveyed via Access Token . . . . 9 | 6. Authentication Information Conveyed via Access Token | |||
6.1. JWT Access Tokens . . . . . . . . . . . . . . . . . . . . 9 | 6.1. JWT Access Tokens | |||
6.2. OAuth 2.0 Token Introspection . . . . . . . . . . . . . . 10 | 6.2. OAuth 2.0 Token Introspection | |||
7. Authorization Server Metadata . . . . . . . . . . . . . . . . 11 | 7. Authorization Server Metadata | |||
8. Deployment Considerations . . . . . . . . . . . . . . . . . . 11 | 8. Deployment Considerations | |||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | 9. Security Considerations | |||
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 12 | 10. IANA Considerations | |||
10.1. OAuth Extensions Error Registration . . . . . . . . . . 13 | 10.1. OAuth Extensions Error Registration | |||
10.2. OAuth Token Introspection Response Registration . . . . 13 | 10.2. OAuth Token Introspection Response Registration | |||
11. Normative References . . . . . . . . . . . . . . . . . . . . 13 | 11. References | |||
12. Informative References . . . . . . . . . . . . . . . . . . . 14 | 11.1. Normative References | |||
Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 15 | 11.2. Informative References | |||
Appendix B. Document History . . . . . . . . . . . . . . . . . . 15 | Acknowledgements | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 18 | Authors' Addresses | |||
1. Introduction | 1. Introduction | |||
In simple API authorization scenarios, an authorization server will | In simple API authorization scenarios, an authorization server will | |||
determine what authentication technique to use to handle a given | determine what authentication technique to use to handle a given | |||
request on the basis of aspects such as the scopes requested, the | request on the basis of aspects such as the scopes requested, the | |||
resource, the identity of the client and other characteristics known | resource, the identity of the client, and other characteristics known | |||
at provisioning time. Although the approach is viable in many | at provisioning time. Although that approach is viable in many | |||
situations, it falls short in several important circumstances. | situations, it falls short in several important circumstances. | |||
Consider, for instance, an eCommerce API requiring different | Consider, for instance, an eCommerce API requiring different | |||
authentication strengths depending on whether the item being | authentication strengths depending on whether the item being | |||
purchased exceeds a certain threshold, dynamically estimated by the | purchased exceeds a certain threshold, dynamically estimated by the | |||
API itself using a logic that is opaque to the authorization server. | API itself using a logic that is opaque to the authorization server. | |||
An API might also determine that a more recent user authentication is | An API might also determine that a more recent user authentication is | |||
required based on its own risk evaluation of the API request. | required based on its own risk evaluation of the API request. | |||
This document extends the error codes collection defined by [RFC6750] | This document extends the collection of error codes defined by | |||
with a new value, insufficient_user_authentication, which can be used | [RFC6750] with a new value, insufficient_user_authentication, which | |||
by resource servers to signal to the client that the authentication | can be used by resource servers to signal to the client that the | |||
event associated with the access token presented with the request | authentication event associated with the access token presented with | |||
does not meet the authentication requirements of the resource server. | the request does not meet the authentication requirements of the | |||
This document also introduces acr_values and max_age parameters for | resource server. This document also introduces acr_values and | |||
the Bearer authentication scheme challenge defined by [RFC6750], | max_age parameters for the Bearer authentication scheme challenge | |||
which the resource server can use to explicitly communicate to the | defined by [RFC6750]. The resource server can use these parameters | |||
client the required authentication strength or recentness. | to explicitly communicate to the client the required authentication | |||
strength or recentness. | ||||
The client can use that information to reach back to the | The client can use that information to reach back to the | |||
authorization server with an authorization request specifying the | authorization server with an authorization request that specifies the | |||
authentication requirements indicated by protected resource, by | authentication requirements indicated by the protected resource. | |||
including the acr_values or max_age authorization request parameters | This is accomplished by including the acr_values or max_age | |||
as defined in [OIDC]. | authorization request parameters as defined in [OIDC]. | |||
Those extensions will make it possible to implement interoperable | Those extensions will make it possible to implement interoperable | |||
step up authentication with minimal work from resource servers, | step up authentication with minimal work from resource servers, | |||
clients and authorization servers. | clients, and authorization servers. | |||
1.1. Conventions and Terminology | 1.1. Conventions and Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
This specification uses the terms "access token", "authorization | This specification uses the terms "access token", "authorization | |||
server", "authorization endpoint", "authorization request", "client", | server", "authorization endpoint", "authorization request", "client", | |||
"protected resource", and "resource server" defined by The OAuth 2.0 | "protected resource", and "resource server" defined by "The OAuth 2.0 | |||
Authorization Framework [RFC6749]. | Authorization Framework" [RFC6749]. | |||
2. Protocol Overview | 2. Protocol Overview | |||
The following is an end-to-end sequence of a typical step-up | The following is an end-to-end sequence of a typical step up | |||
authentication scenario implemented according to this specification. | authentication scenario implemented according to this specification. | |||
The scenario assumes that, before the sequence described below takes | The scenario assumes that, before the sequence described below takes | |||
place, the client already obtained an access token for the protected | place, the client already obtained an access token for the protected | |||
resource. | resource. | |||
+----------+ +--------------+ | +----------+ +--------------+ | |||
| | | | | | | | | | |||
| |-----------(1) request ------------------>| | | | |-----------(1) request ------------------>| | | |||
| | | | | | | | | | |||
| |<---------(2) challenge ------------------| Resource | | | |<---------(2) challenge ------------------| Resource | | |||
skipping to change at page 4, line 31 ¶ | skipping to change at line 158 ¶ | |||
| | | User | | | | | | | User | | | | |||
| | | Agent |<-----------[...]------------>| Authorization | | | | | Agent |<-----------[...]------------>| Authorization | | |||
| | | | | Server | | | | | | | Server | | |||
| |<-| | | | | | |<-| | | | | |||
| | +-------+ | | | | | +-------+ | | | |||
| | | | | | | | | | |||
| |<-------- (4) access token --------------| | | | |<-------- (4) access token --------------| | | |||
| | | | | | | | | | |||
+----------+ +---------------+ | +----------+ +---------------+ | |||
Figure 1: Abstract protocol flow | Figure 1: Abstract Protocol Flow | |||
1. The client requests a protected resource, presenting an access | 1. The client requests a protected resource, presenting an access | |||
token. | token. | |||
2. The resource server determines that the circumstances in which | 2. The resource server determines that the circumstances in which | |||
the presented access token was obtained offer insufficient | the presented access token was obtained offer insufficient | |||
authentication strength and/or recentness, hence it denies the | authentication strength and/or recentness; hence, it denies the | |||
request and returns a challenge describing (using a combination | request and returns a challenge describing (using a combination | |||
of acr_values and max_age) what authentication requirements must | of acr_values and max_age) what authentication requirements must | |||
be met for the resource server to authorize a request. | be met for the resource server to authorize a request. | |||
3. The client directs the user agent to the authorization server | 3. The client directs the user agent to the authorization server | |||
with an authorization request that includes the acr_values and/or | with an authorization request that includes the acr_values and/or | |||
max_age indicated by the resource server in the previous step. | max_age indicated by the resource server in the previous step. | |||
4. After whatever sequence required by the grant of choice plays | 4. Whatever sequence required by the grant of choice plays out; this | |||
out, which will include the necessary steps to authenticate the | will include the necessary steps to authenticate the user in | |||
user in accordance with the acr_values and/or max_age values of | accordance with the acr_values and/or max_age values of the | |||
the authorization request, the authorization server returns a new | authorization request. Then, the authorization server returns a | |||
access token to the client. The access token contains or | new access token to the client. The new access token contains or | |||
references information about the authentication event. | references information about the authentication event. | |||
5. The client repeats the request from step 1, presenting the newly | 5. The client repeats the request from step 1, presenting the newly | |||
obtained access token. | obtained access token. | |||
6. The resource server finds that the user authentication performed | 6. The resource server finds that the user authentication performed | |||
during the acquisition of the new access token complies with its | during the acquisition of the new access token complies with its | |||
requirements, and returns the representation of the requested | requirements and returns the representation of the requested | |||
protected resource. | protected resource. | |||
The validation operations mentioned in step 2 and 6 imply that the | The validation operations mentioned in steps 2 and 6 imply that the | |||
resource server has a way of evaluating the authentication that | resource server has a way of evaluating the authentication that | |||
occurred during the process by which the access token was obtained. | occurred during the process by which the access token was obtained. | |||
In the context of this document, the assessment by the resource | In the context of this document, the assessment by the resource | |||
server of the specific authentication method used to obtain a token | server of the specific authentication method used to obtain a token | |||
for the requested resource is called an "authentication level." This | for the requested resource is called an "authentication level". This | |||
document will describe how the resource server can perform this | document will describe how the resource server can perform this | |||
assessment of an "authentication level" when the access token is a | assessment of an authentication level when the access token is a JSON | |||
JWT Access token [RFC9068] or is validated via introspection | Web Token (JWT) [RFC9068] or is validated via introspection | |||
[RFC7662]. Other methods of determining the authentication level by | [RFC7662]. Other methods of determining the authentication level by | |||
which the access token was obtained are possible, per agreement by | which the access token was obtained are possible, per agreement by | |||
the authorization server and the protected resource, but are beyond | the authorization server and the protected resource, but they are | |||
the scope of this specification. Given an authentication level of a | beyond the scope of this specification. Given an authentication | |||
token, the resource server determines whether it meets the security | level of a token, the resource server determines whether it meets the | |||
criteria for the requested resource. | security criteria for the requested resource. | |||
"Authentication level" and "step-up" are metaphors in this | The terms "authentication level" and "step up" are metaphors in this | |||
specification. These metaphors do not suggest that there is an | specification. These metaphors do not suggest that there is an | |||
absolute hierarchy of authentication methods expressed in | absolute hierarchy of authentication methods expressed in | |||
interoperable fashion. The notion of a level emerges from the fact | interoperable fashion. The notion of a level emerges from the fact | |||
that the resource server may only want to accept certain | that the resource server may only want to accept certain | |||
authentication methods. When presented with a token derived from a | authentication methods. When presented with a token derived from a | |||
particular authentication method (i.e., a given authentication level) | particular authentication method (i.e., a given authentication level) | |||
that it does not want to accept (i.e., below the threshold or level | that it does not want to accept (i.e., below the threshold or level | |||
it will accept), the resource server seeks to "step-up" (i.e., | it will accept), the resource server seeks to step up (i.e., | |||
renegotiate) from the current authentication level to one that it may | renegotiate) from the current authentication level to one that it may | |||
accept. The "step-up" metaphor is intended to convey a shift from | accept. The "step up" metaphor is intended to convey a shift from | |||
the original authentication level to one that is acceptable to the | the original authentication level to one that is acceptable to the | |||
resource server. | resource server. | |||
Although the case in which the new access token supersedes old tokens | Although the case in which the new access token supersedes old tokens | |||
by virtue of a higher authentication level is common, in line with | by virtue of a higher authentication level is common, in line with | |||
the intuition the term "step-up authentication" suggests, it is | the connotation of the term "step up authentication", it is important | |||
important to keep in mind that this might not necessarily hold true | to keep in mind that this might not necessarily hold true in the | |||
in the general case. For example: a resource server might require | general case. For example, for a particular request, a resource | |||
for a particular request a higher authentication level and a shorter | server might require a higher authentication level and a shorter | |||
validity, resulting in a token suitable for one-off calls but leading | validity, resulting in a token suitable for one-off calls but leading | |||
to frequent prompts, hence a suboptimal user experience, if reused | to frequent prompts: hence, offering a suboptimal user experience if | |||
for routine operations. In those scenarios, the client would be | the token is reused for routine operations. In such a scenario, the | |||
better served by keeping both the old tokens, associated with a lower | client would be better served by keeping both the old tokens, which | |||
authentication level, and the new one - selecting the appropriate | are associated with a lower authentication level, and the new one: | |||
token for each API call. This is not a new requirement for clients, | selecting the appropriate token for each API call. This is not a new | |||
as incremental consent and least privilege principles will require | requirement for clients, as incremental consent and least-privilege | |||
similar heuristics for managing access tokens associated to different | principles will require similar heuristics for managing access tokens | |||
scopes and permission levels. This document does not recommend any | associated with different scopes and permission levels. This | |||
specific token caching strategy, as that will be dependent on the | document does not recommend any specific token-caching strategy: that | |||
characteristics of every particular scenario and remains application- | choice will be dependent on the characteristics of every particular | |||
dependent as in the core OAuth cases. Also recall that OAuth 2.0 | scenario and remains application-dependent as in the core OAuth | |||
[RFC6749] assumes access tokens are treated as opaque by clients. | cases. Also recall that OAuth 2.0 [RFC6749] assumes access tokens | |||
The token format might be unreadable to the client or might change at | are treated as opaque by clients. The token format might be | |||
any time to become unreadable. So, during the course of any token | unreadable to the client or might change at any time to become | |||
caching strategy, a client must not attempt to inspect the content of | unreadable. So, during the course of any token-caching strategy, a | |||
the access token to determine the associated authentication | client must not attempt to inspect the content of the access token to | |||
information or other details (see Section 6 of [RFC9068] for a more | determine the associated authentication information or other details | |||
detailed discussion). | (see Section 6 of [RFC9068] for a more detailed discussion). | |||
3. Authentication Requirements Challenge | 3. Authentication Requirements Challenge | |||
This specification introduces a new error code value for the error | This specification introduces a new error code value for the | |||
parameter of the challenge of the Bearer authentication scheme from | challenge of the Bearer authentication scheme's error parameter (from | |||
[RFC6750] and other OAuth authentication schemes, such as | [RFC6750]) and other OAuth authentication schemes, such as those seen | |||
[I-D.ietf-oauth-dpop], which use the same error parameter: | in [RFC9449], which use the same error parameter: | |||
insufficient_user_authentication The authentication event associated | insufficient_user_authentication: The authentication event | |||
with the access token presented with the request does not meet the | associated with the access token presented with the request does | |||
authentication requirements of the protected resource. | not meet the authentication requirements of the protected | |||
resource. | ||||
Note: the logic through which the resource server determines that the | Note: the logic through which the resource server determines that the | |||
current request does not meet the authentication requirements of the | current request does not meet the authentication requirements of the | |||
protected resource, and associated functionality (such as expressing, | protected resource, and associated functionality (such as expressing, | |||
deploying and publishing such requirements) is out of scope for this | deploying and publishing such requirements), is out of scope for this | |||
document. | document. | |||
Furthermore, this specification defines the following WWW- | Furthermore, this specification defines the following WWW- | |||
Authenticate auth-param values for those OAuth authentication schemes | Authenticate auth-param values for those OAuth authentication schemes | |||
to convey the authentication requirements back to the client. | to convey the authentication requirements back to the client. | |||
acr_values A space-separated string listing the authentication | acr_values: A space-separated string listing the authentication | |||
context class reference values, in order of preference, one of | context class reference values in order of preference. The | |||
which the protected resource requires for the authentication event | protected resource requires one of these values for the | |||
associated with the access token. The authentication context, as | authentication event associated with the access token. As defined | |||
defined in section 1.2 of [OIDC] conveys information about how | in Section 1.2 of [OIDC], the authentication context conveys | |||
authentication takes place (e.g., what authentication method(s) or | information about how authentication takes place (e.g., what | |||
assurance level to meet). | authentication method(s) or assurance level to meet). | |||
max_age Indicates the allowable elapsed time in seconds since the | max_age: This value indicates the allowable elapsed time in seconds | |||
last active authentication event associated with the access token. | since the last active authentication event associated with the | |||
An active authentication event entails a user interacting with the | access token. An active authentication event entails a user | |||
authorization server in response to an authentication prompt. | interacting with the authorization server in response to an | |||
Note that while the auth-param value can be conveyed as a token or | authentication prompt. Note that, while the auth-param value can | |||
quoted-string (see section 11.2 of [RFC9110]), it has to represent | be conveyed as a token or quoted-string (see Section 11.2 of | |||
a non-negative integer. | [RFC9110]), it has to represent a non-negative integer. | |||
Figure 2 below is an example of a Bearer authentication scheme | Figure 2 is an example of a Bearer authentication scheme challenge | |||
challenge with the WWW-Authenticate header using the | with the WWW-Authenticate header using: | |||
insufficient_user_authentication error code value to inform the | ||||
client that the access token presented is not sufficient to gain | * the insufficient_user_authentication error code value to inform | |||
access to the protected resource, and the acr_values parameter to let | the client that the access token presented is not sufficient to | |||
the client know that the expected authentication level corresponds to | gain access to the protected resource, and | |||
the authentication context class reference identified by myACR. | ||||
* the acr_values parameter to let the client know that the expected | ||||
authentication level corresponds to the authentication context | ||||
class reference identified by myACR. | ||||
Note that while this specification only defines usage of the above | Note that while this specification only defines usage of the above | |||
auth-params with the insufficient_user_authentication error code, it | auth-params with the insufficient_user_authentication error code, it | |||
does not preclude future specifications or profiles from defining | does not preclude future specifications or profiles from defining | |||
their usage with other error codes. | their usage with other error codes. | |||
HTTP/1.1 401 Unauthorized | HTTP/1.1 401 Unauthorized | |||
WWW-Authenticate: Bearer error="insufficient_user_authentication", | WWW-Authenticate: Bearer error="insufficient_user_authentication", | |||
error_description="A different authentication level is required", | error_description="A different authentication level is required", | |||
acr_values="myACR" | acr_values="myACR" | |||
Figure 2: Authentication Requirements Challenge indicating acr_values | Figure 2: Authentication Requirements Challenge Indicating acr_values | |||
The following example in Figure 3 shows a challenge informing the | The example in Figure 3 shows a challenge informing the client that | |||
client that last active authentication event associated with the | the last active authentication event associated with the presented | |||
presented access token is too old and a more recent authentication is | access token is too old and a more recent authentication is needed. | |||
needed. | ||||
HTTP/1.1 401 Unauthorized | HTTP/1.1 401 Unauthorized | |||
WWW-Authenticate: Bearer error="insufficient_user_authentication", | WWW-Authenticate: Bearer error="insufficient_user_authentication", | |||
error_description="More recent authentication is required", | error_description="More recent authentication is required", | |||
max_age="5" | max_age="5" | |||
Figure 3: Authentication Requirements Challenge indicating max_age | Figure 3: Authentication Requirements Challenge Indicating max_age | |||
The auth-params max_age and acr_values MAY both occur in the same | The auth-params max_age and acr_values MAY both occur in the same | |||
challenge if the resource server needs to express requirements both | challenge if the resource server needs to express requirements about | |||
about recency and authentication levels. If the resource server | both recency and authentication level. If the resource server | |||
determines that the request is also lacking the scopes required by | determines that the request is also lacking the scopes required by | |||
the requested resource, it MAY include the scope attribute with the | the requested resource, it MAY include the scope attribute with the | |||
scope necessary to access the protected resource, as described in | value necessary to access the protected resource, as described in | |||
section 3.1 of [RFC6750]. | Section 3.1 of [RFC6750]. | |||
4. Authorization Request | 4. Authorization Request | |||
A client receiving a challenge from the resource server carrying the | A client receiving a challenge from the resource server carrying the | |||
error code insufficient_user_authentication SHOULD parse the WWW- | insufficient_user_authentication error code SHOULD parse the WWW- | |||
Authenticate header for acr_values and max_age and use them, if | Authenticate header for acr_values and max_age and use them, if | |||
present, in constructing an authorization request, which is then | present, in constructing an authorization request. This request is | |||
conveyed to the authorization server's authorization endpoint via the | then conveyed to the authorization server's authorization endpoint | |||
user agent in order to obtain a new access token complying with the | via the user agent in order to obtain a new access token complying | |||
corresponding requirements. Both acr_values and max_age | with the corresponding requirements. The acr_values and max_age | |||
authorization request parameters are OPTIONAL parameters defined in | authorization request parameters are both OPTIONAL parameters defined | |||
Section 3.1.2.1. of [OIDC]. This document does not introduce any | in Section 3.1.2.1. of [OIDC]. This document does not introduce any | |||
changes in the authorization server behavior defined in [OIDC] for | changes in the authorization server behavior defined in [OIDC] for | |||
processing those parameters, hence any authorization server | processing those parameters; hence, any authorization server | |||
implementing OpenID Connect will be able to participate in the flow | implementing OpenID Connect will be able to participate in the flow | |||
described here with little or no changes. See Section 5 for more | described here with little or no changes. See Section 5 for more | |||
details. | details. | |||
The example authorization request URI below, which might be used | The example authorization request URI below, which might be used | |||
after receiving the challenge in Figure 2, indicates to the | after receiving the challenge in Figure 2, indicates to the | |||
authorization server that the client would like the authentication to | authorization server that the client would like the authentication to | |||
occur according to the authentication context class reference | occur according to the authentication context class reference | |||
identified by myACR. | identified by myACR. | |||
https://as.example.net/authorize?client_id=s6BhdRkqt3 | https://as.example.net/authorize?client_id=s6BhdRkqt3 | |||
&response_type=code&scope=purchase&acr_values=myACR | &response_type=code&scope=purchase&acr_values=myACR | |||
Figure 4: Authorization Request indicating acr_values | Figure 4: Authorization Request Indicating acr_values | |||
After the challenge in Figure 3, a client might direct the user agent | After the challenge in Figure 3, a client might direct the user agent | |||
to the following example authorization request URI where the max_age | to the following example authorization request URI where the max_age | |||
parameter indicates to the authorization server that the user | parameter indicates to the authorization server that the user- | |||
authentication event needs to have occurred no more than five seconds | authentication event needs to have occurred no more than five seconds | |||
prior. | prior. | |||
https://as.example.net/authorize?client_id=s6BhdRkqt3 | https://as.example.net/authorize?client_id=s6BhdRkqt3 | |||
&response_type=code&scope=purchase&max_age=5 | &response_type=code&scope=purchase&max_age=5 | |||
Figure 5: Authorization Request indicating max_age | Figure 5: Authorization Request Indicating max_age | |||
5. Authorization Response | 5. Authorization Response | |||
Section 5.5.1.1 of [OIDC] establishes that an authorization server | Section 5.5.1.1 of [OIDC] establishes that an authorization server | |||
receiving a request containing the acr_values parameter MAY attempt | receiving a request containing the acr_values parameter MAY attempt | |||
to authenticate the user in a manner that satisfies the requested | to authenticate the user in a manner that satisfies the requested | |||
Authentication Context Class Reference, and include the corresponding | authentication context class reference and include the corresponding | |||
value in the acr claim in the resulting ID Token. The same section | value in the acr claim in the resulting ID Token. The same section | |||
also establishes that in case the desired authentication level cannot | also establishes that, in case the desired authentication level | |||
be met, the authorization server SHOULD include in the acr claim a | cannot be met, the authorization server SHOULD include a value | |||
value reflecting the authentication level of the current session (if | reflecting the authentication level of the current session (if any) | |||
any). Furthermore, Section 3.1.2.1 [OIDC] states that if a request | in the acr claim. Furthermore, Section 3.1.2.1 [OIDC] states that if | |||
includes the max_age parameter, the authorization server MUST include | a request includes the max_age parameter, the authorization server | |||
the auth_time claim in the issued ID Token. An authorization server | MUST include the auth_time claim in the issued ID Token. An | |||
complying with this specification will react to the presence of the | authorization server complying with this specification will react to | |||
acr_values and max_age parameters by including acr and auth_time in | the presence of the acr_values and max_age parameters by including | |||
the access token (see Section 6 for details). Although [OIDC] leaves | acr and auth_time in the access token (see Section 6 for details). | |||
the authorization server free to decide how to handle the inclusion | Although [OIDC] leaves the authorization server free to decide how to | |||
of acr in the ID Token when requested via acr_values, when it comes | handle the inclusion of acr in the ID Token when requested via | |||
to access tokens in this specification, the authorization server | acr_values, when it comes to access tokens in this specification, the | |||
SHOULD consider the requested acr value as necessary for successfully | authorization server SHOULD consider the requested acr value as | |||
fulfilling the request. That is, the requested acr value is included | necessary for successfully fulfilling the request. That is, the | |||
in the access token if the authentication operation successfully met | requested acr value is included in the access token if the | |||
its requirements, or that the authorization request fails in all | authentication operation successfully met its requirements; | |||
other cases, returning unmet_authentication_requirements as defined | otherwise, the authorization request fails and returns an | |||
in [OIDCUAR]. The recommended behavior will help prevent clients | unmet_authentication_requirements error as defined in [OIDCUAR]. The | |||
getting stuck in a loop where the authorization server keeps | recommended behavior will help prevent clients getting stuck in a | |||
returning tokens that the resource server already identified as not | loop where the authorization server keeps returning tokens that the | |||
meeting its requirements hence known to be rejected as well. | resource server already identified as not meeting its requirements. | |||
6. Authentication Information Conveyed via Access Token | 6. Authentication Information Conveyed via Access Token | |||
To evaluate whether an access token meets the protected resource's | To evaluate whether an access token meets the protected resource's | |||
requirements, the resource server needs a way of accessing | requirements, the resource server needs a way of accessing | |||
information about the authentication event by which that access token | information about the authentication event by which that access token | |||
was obtained. This specification provides guidance on how to convey | was obtained. This specification provides guidance on how to convey | |||
that information in conjunction with two common access token | that information in conjunction with two common access-token- | |||
validation methods: the one described in [RFC9068], where the access | validation methods: | |||
token is encoded in JWT format and verified via a set of validation | ||||
rules, and the one described in [RFC7662], where the token is | * the one described in [RFC9068], where the access token is encoded | |||
validated and decoded by sending it to an introspection endpoint. | in JWT format and verified via a set of validation rules, and | |||
* the one described in [RFC7662], where the token is validated and | ||||
decoded by sending it to an introspection endpoint. | ||||
Authorization servers and resource servers MAY elect to use other | Authorization servers and resource servers MAY elect to use other | |||
encoding and validation methods, however those are out of scope for | encoding and validation methods; however, those are out of scope for | |||
this document. | this document. | |||
6.1. JWT Access Tokens | 6.1. JWT Access Tokens | |||
When access tokens are represented as JSON Web Tokens (JWT) | When access tokens are represented as JSON Web Tokens (JWTs) | |||
[RFC7519], the auth_time and acr claims (per Section 2.2.1 of | [RFC7519], the auth_time and acr claims (per Section 2.2.1 of | |||
[RFC9068]) are used to convey the time and context of the user | [RFC9068]) are used to convey the time and context of the user- | |||
authentication event that the authentication server performed during | authentication event that the authentication server performed during | |||
the course of obtaining the access token. It is useful to bear in | the course of obtaining the access token. It is useful to bear in | |||
mind that the values of those two parameters are established at user | mind that the values of those two parameters are established at user- | |||
authentication time and will not change in the event of access token | authentication time and will not change in the event of access token | |||
renewals. See the aforementioned Section 2.2.1 of [RFC9068] for | renewals. See the aforementioned Section 2.2.1 of [RFC9068] for | |||
details. The following is a conceptual example showing the decoded | details. The following is a conceptual example showing the decoded | |||
content of such a JWT access token. | content of such a JWT access token. | |||
Header: | Header: | |||
{"typ":"at+JWT","alg":"ES256","kid":"LTacESbw"} | {"typ":"at+JWT","alg":"ES256","kid":"LTacESbw"} | |||
Claims: | Claims: | |||
skipping to change at page 10, line 24 ¶ | skipping to change at line 444 ¶ | |||
"aud": "https://rs.example.com", | "aud": "https://rs.example.com", | |||
"exp": 1646343000, | "exp": 1646343000, | |||
"iat": 1646340200, | "iat": 1646340200, | |||
"jti" : "e1j3V_bKic8-LAEB_lccD0G", | "jti" : "e1j3V_bKic8-LAEB_lccD0G", | |||
"client_id": "s6BhdRkqt3", | "client_id": "s6BhdRkqt3", | |||
"scope": "purchase", | "scope": "purchase", | |||
"auth_time": 1646340198, | "auth_time": 1646340198, | |||
"acr": "myACR" | "acr": "myACR" | |||
} | } | |||
Figure 6 | Figure 6: Decoded JWT Access Token | |||
6.2. OAuth 2.0 Token Introspection | 6.2. OAuth 2.0 Token Introspection | |||
OAuth 2.0 Token Introspection [RFC7662] defines a method for a | "OAuth 2.0 Token Introspection" [RFC7662] defines a method for a | |||
protected resource to query an authorization server about the active | protected resource to query an authorization server about the active | |||
state of an access token as well as to determine metainformation | state of an access token as well as to determine metainformation | |||
about the token. The following two top-level introspection response | about the token. The following two top-level introspection response | |||
members are defined to convey information about the user | members are defined to convey information about the user- | |||
authentication event that the authentication server performed during | authentication event that the authentication server performed during | |||
the course of obtaining the access token. | the course of obtaining the access token. | |||
acr Authentication Context Class Reference. String specifying an | acr: String specifying an authentication context class reference | |||
Authentication Context Class Reference value that identifies the | value that identifies the authentication context class that was | |||
Authentication Context Class that the user authentication | satisfied by the user-authentication event performed. | |||
performed satisfied. | ||||
auth_time Time when the user authentication occurred. A JSON | auth_time: Time when the user authentication occurred. A JSON | |||
numeric value representing the number of seconds from | numeric value representing the number of seconds from | |||
1970-01-01T00:00:00Z UTC until the time of date/time of the | 1970-01-01T00:00:00Z UTC until the date/time of the authentication | |||
authentication event. | event. | |||
The following example shows an introspection response with | The following example shows an introspection response with | |||
information about the user authentication event by which the access | information about the user-authentication event by which the access | |||
token was obtained. | token was obtained. | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Type: application/json | Content-Type: application/json | |||
{ | { | |||
"active": true, | "active": true, | |||
"client_id": "s6BhdRkqt3", | "client_id": "s6BhdRkqt3", | |||
"scope": "purchase", | "scope": "purchase", | |||
"sub": "someone@example.net", | "sub": "someone@example.net", | |||
"aud": "https://rs.example.com", | "aud": "https://rs.example.com", | |||
"iss": "https://as.example.net", | "iss": "https://as.example.net", | |||
"exp": 1639528912, | "exp": 1639528912, | |||
"iat": 1618354090, | "iat": 1618354090, | |||
"auth_time": 1646340198, | "auth_time": 1646340198, | |||
"acr": "myACR" | "acr": "myACR" | |||
} | } | |||
Figure 7 | Figure 7: Introspection Response | |||
7. Authorization Server Metadata | 7. Authorization Server Metadata | |||
Authorization Servers can advertise their support of this | Authorization servers can advertise their support of this | |||
specification by including in their metadata document (as defined in | specification by including in their metadata document, as defined in | |||
[RFC8414]) the value acr_values_supported as defined in section 3 of | [RFC8414], the value acr_values_supported, as defined in Section 3 of | |||
[OIDCDISC]. The presence of acr_values_supported in the | [OIDCDISC]. The presence of acr_values_supported in the | |||
authorization server metadata document signals that the authorization | authorization server metadata document signals that the authorization | |||
server will understand and honor the acr_values and max_age | server will understand and honor the acr_values and max_age | |||
parameters in incoming authorization requests. | parameters in incoming authorization requests. | |||
8. Deployment Considerations | 8. Deployment Considerations | |||
This specification facilitates the communication of requirements from | This specification facilitates the communication of requirements from | |||
a resource server to a client, which in turn can enable a smooth | a resource server to a client, which, in turn, can enable a smooth | |||
step-up authentication experience. However, it is important to | step up authentication experience. However, it is important to | |||
realize that the user experience achievable in every specific | realize that the user experience achievable in every specific | |||
deployment is a function of the policies each resource server and | deployment is a function of the policies each resource server and | |||
authorization server pairs establish. Imposing constraints on those | authorization server pair establishes. Imposing constraints on those | |||
policies is out of scope for this specification, hence it is | policies is out of scope for this specification; hence, it is | |||
perfectly possible for resource servers and authorization servers to | perfectly possible for resource servers and authorization servers to | |||
impose requirements that are impossible for users to comply with, or | impose requirements that are impossible for users to comply with or | |||
leading to an undesirable user experience outcome. The | that lead to an undesirable user-experience outcome. The | |||
authentication prompts presented by the authorization server as a | authentication prompts presented by the authorization server as a | |||
result of the method of propagating authentication requirements | result of the method of propagating authentication requirements | |||
described here might require the user to perform some specific | described here might require the user to perform some specific | |||
actions such as using multiple devices, having access to devices | actions such as using multiple devices, having access to devices | |||
complying with specific security requirements, and so on. Those | complying with specific security requirements, and so on. Those | |||
extra requirements, concerning more about how to comply with a | extra requirements, that are more concerned with how to comply with a | |||
particular requirement rather than indicating the identifier of the | particular requirement rather than indicating the identifier of the | |||
requirement itself, are out of scope for this specification. | requirement itself, are out of scope for this specification. | |||
9. Security Considerations | 9. Security Considerations | |||
This specification adds to previously defined OAuth mechanisms. | This specification adds to previously defined OAuth mechanisms. | |||
Their respective Security Considerations apply - OAuth 2.0 [RFC6749], | Their respective security considerations apply: | |||
JWT access tokens [RFC9068], Bearer WWW-Authentication [RFC6750], | ||||
token introspection [RFC7662], and authorization server metadata | * OAuth 2.0 [RFC6749], | |||
[RFC8414]. | ||||
* JWT access tokens [RFC9068], | ||||
* Bearer WWW-Authenticate [RFC6750], | ||||
* token introspection [RFC7662], and | ||||
* authorization server metadata [RFC8414]. | ||||
This document MUST NOT be used to position OAuth as an authentication | This document MUST NOT be used to position OAuth as an authentication | |||
protocol. For the purposes of this specification, the way in which a | protocol. For the purposes of this specification, the way in which a | |||
user authenticated with the authorization server to obtain an access | user authenticated with the authorization server to obtain an access | |||
token is salient information, as a resource server might decide | token is salient information, as a resource server might decide | |||
whether to grant access on the basis of how that authentication | whether to grant access on the basis of how that authentication | |||
operation was performed. Nonetheless, this specification does not | operation was performed. Nonetheless, this specification does not | |||
attempt to define the mechanics by which authentication takes place, | attempt to define the mechanics by which authentication takes place, | |||
relying on a separate authentication layer to take care of the | relying on a separate authentication layer to take care of the | |||
details. In line with other specifications of the OAuth family, this | details. In line with other specifications of the OAuth family, this | |||
document assumes the existence of a session without going into the | document assumes the existence of a session without going into the | |||
details of how it is established or maintained, what protocols are | details of how it is established or maintained, what protocols are | |||
used to implement that layer (e.g., OpenID Connect), and so forth. | used to implement that layer (e.g., OpenID Connect), and so forth. | |||
Depending on the policies adopted by the resource server, the | Depending on the policies adopted by the resource server, the | |||
acr_values parameter introduced in Section 3 might unintentionally | acr_values parameter introduced in Section 3 might unintentionally | |||
disclose information about the authenticated user, the resource | disclose information about the authenticated user, the resource | |||
itself, the authorization server, and any other context-specific data | itself, the authorization server, and any other context-specific data | |||
that an attacker might use to gain knowledge about their target. For | that an attacker might use to gain knowledge about their target. For | |||
example, a resource server requesting an acr value corresponding to a | example, a resource server requesting an acr value corresponding to a | |||
high level of assurance for some users but not others might identify | high level of assurance for some users but not others might identify | |||
possible high privilege users to target with spearhead phishing | possible high-privilege users to target with spearhead phishing | |||
attacks. Implementers should use care in determining what to | attacks. Implementers should use care in determining what to | |||
disclose in the challenge and in what circumstances. The logic | disclose in the challenge and in what circumstances. The logic | |||
examining the incoming access token to determine whether a challenge | examining the incoming access token to determine whether or not a | |||
should be returned can execute either before or after the | challenge should be returned can be executed either before or after | |||
conventional token validation logic, be it based on JWT token | the conventional token-validation logic, be it based on JWT | |||
validation, introspection, or any other method. The resource server | validation, introspection, or any other method. The resource server | |||
MAY return a challenge without verifying the client presented a valid | MAY return a challenge without verifying the client presented a valid | |||
token. However, this approach will leak the required properties of | token. However, this approach will leak the required properties of | |||
an authorization token to an actor who has not proven they can obtain | an authorization token to an actor who has not proven they can obtain | |||
a token for this resource server. | a token for this resource server. | |||
As this specification provides a mechanism for the resource server to | As this specification provides a mechanism for the resource server to | |||
trigger user interaction, it's important for the authorization server | trigger user interaction, it's important for the authorization server | |||
and clients to consider that a malicious resource server might abuse | and clients to consider that a malicious resource server might abuse | |||
of that feature. | that feature. | |||
10. IANA Considerations | 10. IANA Considerations | |||
10.1. OAuth Extensions Error Registration | ||||
This specification requests registration of the following error value | ||||
in the "OAuth Extensions Error" registry [IANA.OAuth.Params] | ||||
established by [RFC6749]. | ||||
* Name: insufficient_user_authentication | 10.1. OAuth Extensions Error Registration | |||
* Usage Location: resource access error response | This specification registers the following error value in the "OAuth | |||
Extensions Error Registry" [IANA.OAuth.Params] established by | ||||
[RFC6749]. | ||||
* Protocol Extension: OAuth 2.0 Step-up Authentication Challenge | Name: insufficient_user_authentication | |||
Usage Location: resource access error response | ||||
Protocol Extension: OAuth 2.0 Step Up Authentication Challenge | ||||
Protocol | Protocol | |||
Change controller: IETF | ||||
* Change controller: IETF | Specification document(s): Section 3 of RFC 9470 | |||
* Specification document(s): Section 3 of [[ this specification ]] | ||||
10.2. OAuth Token Introspection Response Registration | 10.2. OAuth Token Introspection Response Registration | |||
This specification requests registration of the following values in | This specification registers the following values in the "OAuth Token | |||
the "OAuth Token Introspection Response" registry [IANA.OAuth.Params] | Introspection Response" registry [IANA.OAuth.Params] established by | |||
established by [RFC7662]. | [RFC7662]. | |||
Authentication Context Class Reference: | Authentication Context Class Reference: | |||
* Name: acr | Name: acr | |||
Description: Authentication Context Class Reference | ||||
* Description: Authentication Context Class Reference | Change Controller: IETF | |||
Specification Document(s): Section 6.2 of RFC 9470 | ||||
* Change Controller: IETF | ||||
* Specification Document(s): Section 6.2 of [[ this specification ]] | ||||
Authentication Time: | Authentication Time: | |||
* Name: auth_time | Name: auth_time | |||
Description: Time when the user authentication occurred | ||||
* Description: Time when the user authentication occurred | Change Controller: IETF | |||
Specification Document(s): Section 6.2 of RFC 9470 | ||||
* Change Controller: IETF | ||||
* Specification Document(s): Section 6.2 of [[ this specification ]] | 11. References | |||
11. Normative References | 11.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC6749] Hardt, D., Ed., "The OAuth 2.0 Authorization Framework", | [RFC6749] Hardt, D., Ed., "The OAuth 2.0 Authorization Framework", | |||
RFC 6749, DOI 10.17487/RFC6749, October 2012, | RFC 6749, DOI 10.17487/RFC6749, October 2012, | |||
<https://www.rfc-editor.org/info/rfc6749>. | <https://www.rfc-editor.org/info/rfc6749>. | |||
[RFC6750] Jones, M. and D. Hardt, "The OAuth 2.0 Authorization | [RFC6750] Jones, M. and D. Hardt, "The OAuth 2.0 Authorization | |||
Framework: Bearer Token Usage", RFC 6750, | Framework: Bearer Token Usage", RFC 6750, | |||
DOI 10.17487/RFC6750, October 2012, | DOI 10.17487/RFC6750, October 2012, | |||
<https://www.rfc-editor.org/info/rfc6750>. | <https://www.rfc-editor.org/info/rfc6750>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
12. Informative References | 11.2. Informative References | |||
[I-D.ietf-oauth-dpop] | ||||
Fett, D., Campbell, B., Bradley, J., Lodderstedt, T., | ||||
Jones, M. B., and D. Waite, "OAuth 2.0 Demonstrating | ||||
Proof-of-Possession at the Application Layer (DPoP)", Work | ||||
in Progress, Internet-Draft, draft-ietf-oauth-dpop-16, 13 | ||||
April 2023, <https://datatracker.ietf.org/doc/html/draft- | ||||
ietf-oauth-dpop-16>. | ||||
[IANA.OAuth.Params] | [IANA.OAuth.Params] | |||
IANA, "OAuth Parameters", | IANA, "OAuth Parameters", | |||
<https://www.iana.org/assignments/oauth-parameters>. | <https://www.iana.org/assignments/oauth-parameters>. | |||
[OIDC] Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and | [OIDC] Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and | |||
C. Mortimore, "OpenID Connect Core 1.0 incorporating | C. Mortimore, "OpenID Connect Core 1.0 incorporating | |||
errata set 1", 8 November 2014, | errata set 1", 8 November 2014, | |||
<https://openid.net/specs/openid-connect-core-1_0.html>. | <https://openid.net/specs/openid-connect-core-1_0.html>. | |||
[OIDCDISC] Sakimura, N., Bradley, J., Jones, M., and E. Jay, "OpenID | [OIDCDISC] Sakimura, N., Bradley, J., Jones, M., and E. Jay, "OpenID | |||
Connect Core 1.0 incorporating errata set 1", 8 November | Connect Discovery 1.0 incorporating errata set 1", 8 | |||
2014, <https://openid.net/specs/openid-connect-discovery- | November 2014, <https://openid.net/specs/openid-connect- | |||
1_0.html>. | discovery-1_0.html>. | |||
[OIDCUAR] Lodderstedt, T., "OpenID Connect Core Error Code | [OIDCUAR] Lodderstedt, T., "OpenID Connect Core Error Code | |||
unmet_authentication_requirements", 8 May 2019, | unmet_authentication_requirements", 8 May 2019, | |||
<https://openid.net/specs/openid-connect-unmet- | <https://openid.net/specs/openid-connect-unmet- | |||
authentication-requirements-1_0.html>. | authentication-requirements-1_0.html>. | |||
[RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | [RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | |||
(JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | |||
<https://www.rfc-editor.org/info/rfc7519>. | <https://www.rfc-editor.org/info/rfc7519>. | |||
skipping to change at page 15, line 27 ¶ | skipping to change at line 669 ¶ | |||
[RFC9068] Bertocci, V., "JSON Web Token (JWT) Profile for OAuth 2.0 | [RFC9068] Bertocci, V., "JSON Web Token (JWT) Profile for OAuth 2.0 | |||
Access Tokens", RFC 9068, DOI 10.17487/RFC9068, October | Access Tokens", RFC 9068, DOI 10.17487/RFC9068, October | |||
2021, <https://www.rfc-editor.org/info/rfc9068>. | 2021, <https://www.rfc-editor.org/info/rfc9068>. | |||
[RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
Ed., "HTTP Semantics", STD 97, RFC 9110, | Ed., "HTTP Semantics", STD 97, RFC 9110, | |||
DOI 10.17487/RFC9110, June 2022, | DOI 10.17487/RFC9110, June 2022, | |||
<https://www.rfc-editor.org/info/rfc9110>. | <https://www.rfc-editor.org/info/rfc9110>. | |||
Appendix A. Acknowledgements | [RFC9449] Fett, D., Campbell, B., Bradley, J., Lodderstedt, T., | |||
Jones, M., and D. Waite, "OAuth 2.0 Demonstrating Proof of | ||||
Possession at the Application Layer (DPoP)", RFC 9449, | ||||
DOI 10.17487/RFC9449, August 2023, | ||||
<https://www.rfc-editor.org/info/rfc9449>. | ||||
Acknowledgements | ||||
I wanted to thank the Academy, the viewers at home, the shampoo | I wanted to thank the Academy, the viewers at home, the shampoo | |||
manufacturers, etc.. | manufacturers, etc. | |||
This specification was developed within the OAuth Working Group under | This specification was developed within the OAuth Working Group under | |||
the chairpersonship of Rifaat Shekh-Yusef and Hannes Tschofenig with | the chairpersonship of Rifaat Shekh-Yusef and Hannes Tschofenig with | |||
Paul Wouters, and Roman Danyliw serving as Security Area Directors. | Paul Wouters and Roman Danyliw serving as Security Area Directors. | |||
Additionally, the following individuals contributed ideas, feedback, | Additionally, the following individuals contributed ideas, feedback, | |||
corrections, and wording that helped shape this specification: Caleb | corrections, and wording that helped shape this specification: Caleb | |||
Baker, Ivan Kanakarakis, Pieter Kasselman, Aaron Parecki, Denis | Baker, Ivan Kanakarakis, Pieter Kasselman, Aaron Parecki, Denis | |||
Pinkas, Dima Postnikov, and Filip Skokan. | Pinkas, Dima Postnikov, and Filip Skokan. | |||
Some early discussion of the motivations and concepts that | Some early discussion of the motivations and concepts that | |||
precipitated the initial version of this document occurred at the | precipitated the initial draft version of this document occurred at | |||
2021 OAuth Security Workshop. The authors thank the organizers of | the 2021 OAuth Security Workshop. The authors thank the organizers | |||
the workshop (Guido Schmitz, Steinar Noem, and Daniel Fett) for | of the workshop (Guido Schmitz, Steinar Noem, and Daniel Fett) for | |||
hosting an event that is conducive to collaboration and community | hosting an event that is conducive to collaboration and community | |||
input. | input. | |||
Appendix B. Document History | ||||
[[ To be removed from the final specification ]] | ||||
-17 | ||||
* Fix mistake in -16 update | ||||
-16 | ||||
* AD suggested editorial updates | ||||
-15 | ||||
* Editorial updates from IESG review/ballot | ||||
-14 | ||||
* Updates from Httpdir telechat review | ||||
-13 | ||||
* Make IETF the Change Controller for all registration requests per | ||||
IANA suggestion | ||||
* More updates from Genart review | ||||
* Updates from Artart review | ||||
* Updates from Secdir review | ||||
-12 | ||||
* Updates from Genart Last Call review | ||||
-11 | ||||
* Updates in the Protocol Overview section clarifying the nature of | ||||
"authentication levels" and caching strategies, addressing AD | ||||
review comments | ||||
-10 | ||||
* Fix two references where the section numbers got lost presumably | ||||
due to tooling issues | ||||
-09 | ||||
* Updates addressing AD review comments | ||||
-07/-08 | ||||
* Editorial updates addressing Shepherd Review comments | ||||
-06 | ||||
* Update examples/figures to be clear that the authorization request | ||||
is sent by the client via directing the user agent (not directly | ||||
from client to AS) | ||||
-05 | ||||
* Forgotten Acknowledgements | ||||
* Minor updates to the updates in -04 | ||||
-04 | ||||
* Editorial updates/notes from WGLC feedback | ||||
-03 | ||||
* Clarified that acr_values and max_age can co-occur in the | ||||
challenge when necessary | ||||
* fleshed out deployment and security considerations | ||||
* fleshed out IANA considerations | ||||
* Attempt to clarify that while acr_values can request more than one | ||||
value, only one of them is used and ends up in the token | ||||
-02 | ||||
* Fix typos introduced in -01 | ||||
* Begin to fill out the Acknowledgements | ||||
-01 | ||||
* Added AS Metadata section with pointer to acr_values_supported | ||||
* Mention that it's not necessarily the case that a new 'stepped-up' | ||||
token always supersedes older tokens | ||||
* Add examples with max_age | ||||
-00 (Working Group Draft) | ||||
* Initial WG revision (content unchanged from draft-bertocci-oauth- | ||||
step-up-authn-challenge-01) | ||||
-01 draft-bertocci-oauth-step-up-authn-challenge | ||||
* Fixed example | ||||
* Clarified/noted that scope can also be in the WWW-Authenticate/401 | ||||
-00 draft-bertocci-oauth-step-up-authn-challenge | ||||
* Initial Individual Draft (with all the authority thereby bestowed | ||||
https://datatracker.ietf.org/doc/html/draft-abr-twitter-reply | ||||
(https://datatracker.ietf.org/doc/html/draft-abr-twitter-reply)). | ||||
Authors' Addresses | Authors' Addresses | |||
Vittorio Bertocci | Vittorio Bertocci | |||
Auth0/Okta | Auth0/Okta | |||
Email: vittorio@auth0.com | Email: vittorio@auth0.com | |||
Brian Campbell | Brian Campbell | |||
Ping Identity | Ping Identity | |||
Email: bcampbell@pingidentity.com | Email: bcampbell@pingidentity.com | |||
End of changes. 87 change blocks. | ||||
394 lines changed or deleted | 274 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |