| draft-ietf-oauth-identity-assertion-authz-grant-05.txt | draft-ietf-oauth-identity-assertion-authz-grant-06.txt | |||
|---|---|---|---|---|
| Web Authorization Protocol A. Parecki | Web Authorization Protocol A. Parecki | |||
| Internet-Draft Okta | Internet-Draft Okta | |||
| Intended status: Standards Track K. McGuinness | Intended status: Standards Track K. McGuinness | |||
| Expires: 3 May 2027 Independent | Expires: 4 May 2027 Independent | |||
| B. Campbell | B. Campbell | |||
| Ping Identity | Ping Identity | |||
| 30 October 2026 | 31 October 2026 | |||
| Identity Assertion JWT Authorization Grant | Identity Assertion JWT Authorization Grant | |||
| draft-ietf-oauth-identity-assertion-authz-grant-05 | draft-ietf-oauth-identity-assertion-authz-grant-06 | |||
| Abstract | Abstract | |||
| This specification provides a mechanism for an application to use an | This specification provides a mechanism for an application to use an | |||
| identity assertion to obtain an access token for a third-party API by | identity assertion to obtain an access token for a third-party API by | |||
| coordinating through an identity provider that the downstream | coordinating through an identity provider that the downstream | |||
| Resource Authorization Server already trusts for single sign-on | Resource Authorization Server already trusts for single sign-on | |||
| (SSO), using OAuth 2.0 Token Exchange (RFC 8693) and the JWT Profile | (SSO), using OAuth 2.0 Token Exchange (RFC 8693) and the JWT Profile | |||
| for OAuth 2.0 Authorization Grants (RFC 7523). This pattern is | for OAuth 2.0 Authorization Grants (RFC 7523). This pattern is | |||
| informally referred to as Cross-App Access (XAA). | informally referred to as Cross-App Access (XAA). | |||
| skipping to change at page 2, line 15 ¶ | skipping to change at page 2, line 15 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on 3 May 2027. | This Internet-Draft will expire on 4 May 2027. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2026 IETF Trust and the persons identified as the | Copyright (c) 2026 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 (https://trustee.ietf.org/ | |||
| license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
| Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
| skipping to change at page 4, line 10 ¶ | skipping to change at page 4, line 10 ¶ | |||
| A.2. Customer Identity for Developer SaaS Components . . . . . 65 | A.2. Customer Identity for Developer SaaS Components . . . . . 65 | |||
| A.2.1. Preconditions . . . . . . . . . . . . . . . . . . . . 65 | A.2.1. Preconditions . . . . . . . . . . . . . . . . . . . . 65 | |||
| A.3. Email and Calendaring Applications . . . . . . . . . . . 66 | A.3. Email and Calendaring Applications . . . . . . . . . . . 66 | |||
| A.3.1. Preconditions . . . . . . . . . . . . . . . . . . . . 67 | A.3.1. Preconditions . . . . . . . . . . . . . . . . . . . . 67 | |||
| A.4. AI Agent using External Tools . . . . . . . . . . . . . . 67 | A.4. AI Agent using External Tools . . . . . . . . . . . . . . 67 | |||
| A.4.1. Preconditions . . . . . . . . . . . . . . . . . . . . 67 | A.4.1. Preconditions . . . . . . . . . . . . . . . . . . . . 67 | |||
| A.4.2. Example Sequence . . . . . . . . . . . . . . . . . . 68 | A.4.2. Example Sequence . . . . . . . . . . . . . . . . . . 68 | |||
| Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 76 | Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 76 | |||
| Document History . . . . . . . . . . . . . . . . . . . . . . . . 76 | Document History . . . . . . . . . . . . . . . . . . . . . . . . 76 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 79 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 80 | |||
| 1. Introduction | 1. Introduction | |||
| In many deployments, applications are configured for single sign-on | In many deployments, applications are configured for single sign-on | |||
| to a common identity provider (IdP) using OpenID Connect or SAML. | to a common identity provider (IdP) using OpenID Connect or SAML. | |||
| This enables users to access multiple applications using a single | This enables users to access multiple applications using a single | |||
| account at the IdP, and enables the operator of that IdP to manage | account at the IdP, and enables the operator of that IdP to manage | |||
| which users can access which applications and enforce policy for | which users can access which applications and enforce policy for | |||
| access to those applications. Enterprise workforce identity | access to those applications. Enterprise workforce identity | |||
| providers are one common example, but the same trust pattern can also | providers are one common example, but the same trust pattern can also | |||
| skipping to change at page 30, line 35 ¶ | skipping to change at page 30, line 35 ¶ | |||
| ] | ] | |||
| } | } | |||
| 4.3.4.3. Error Response | 4.3.4.3. Error Response | |||
| On error, the IdP Authorization Server returns an OAuth 2.0 Token | On error, the IdP Authorization Server returns an OAuth 2.0 Token | |||
| Error response as defined in Section 5.2 of [RFC6749]. Any OAuth | Error response as defined in Section 5.2 of [RFC6749]. Any OAuth | |||
| error code MAY be returned; this specification profiles the following | error code MAY be returned; this specification profiles the following | |||
| codes for interoperability: | codes for interoperability: | |||
| * invalid_grant: the subject token failed validation (for example | * invalid_request: the subject token failed validation (for example | |||
| expired, malformed, audience mismatch, or a Refresh Token is | expired, malformed, audience mismatch, or a Refresh Token is | |||
| expired or revoked). A re-issued subject token may resolve the | expired or revoked), as required by Section 2.2.2 of [RFC8693]. A | |||
| error. | Client that receives invalid_request for a request that previously | |||
| succeeded can obtain a new subject token and retry. | ||||
| { | { | |||
| "error": "invalid_grant", | "error": "invalid_request", | |||
| "error_description": "Audience validation failed" | "error_description": "Audience validation failed" | |||
| } | } | |||
| * access_denied: the subject token is valid but the Client or End- | * access_denied: the subject token is valid but the Client or End- | |||
| User is not authorized to obtain an ID-JAG for the target Resource | User is not authorized to obtain an ID-JAG for the target Resource | |||
| Authorization Server. A re-issued subject token will not resolve | Authorization Server. A re-issued subject token will not resolve | |||
| the error. Remediation is defined by the IdP Authorization Server | the error. Remediation is defined by the IdP Authorization Server | |||
| operator's app assignment, access-request, or entitlement process, | operator's app assignment, access-request, or entitlement process, | |||
| such as an Identity Governance and Administration (IGA) workflow. | such as an Identity Governance and Administration (IGA) workflow. | |||
| This profile uses access_denied here rather than invalid_target | ||||
| (Section 2.2.2 of [RFC8693]), so that the Client can tell a target | ||||
| it is not allowed to use from one the IdP Authorization Server | ||||
| does not recognize. | ||||
| { | { | |||
| "error": "access_denied", | "error": "access_denied", | |||
| "error_description": "Client is not authorized to access the target Resource Authorization Server" | "error_description": "Client is not authorized to access the target Resource Authorization Server" | |||
| } | } | |||
| * invalid_target: the audience does not identify a Resource | * invalid_target: the audience does not identify a Resource | |||
| Authorization Server with which the IdP Authorization Server has a | Authorization Server with which the IdP Authorization Server has a | |||
| trust relationship, or a requested resource is not governed by | trust relationship, or a requested resource is not governed by | |||
| that Resource Authorization Server (Section 4.3). A re-issued | that Resource Authorization Server (Section 4.3). A re-issued | |||
| skipping to change at page 76, line 46 ¶ | skipping to change at page 76, line 46 ¶ | |||
| contributions and reviews of this specification: Kamron | contributions and reviews of this specification: Kamron | |||
| Batmanghelich, Paul Carleton, Sofia Desenberg, Meghna Dubey, George | Batmanghelich, Paul Carleton, Sofia Desenberg, Meghna Dubey, George | |||
| Fletcher, Bingrong He, Pieter Kasselman, Aaron Jeongwoo Kim, Kai | Fletcher, Bingrong He, Pieter Kasselman, Aaron Jeongwoo Kim, Kai | |||
| Lehmann, David Lozano, Kaixuan Luo, Ken McCracken, Anuj Mistry, Dean | Lehmann, David Lozano, Kaixuan Luo, Ken McCracken, Anuj Mistry, Dean | |||
| H. Saxe, Kenneth Sinder, Filip Skokan, Phil Whipps. | H. Saxe, Kenneth Sinder, Filip Skokan, Phil Whipps. | |||
| Document History | Document History | |||
| [[ To be removed from the final specification ]] | [[ To be removed from the final specification ]] | |||
| -06 | ||||
| * Changed the IdP Authorization Server error for a subject token | ||||
| that fails validation from invalid_grant to invalid_request, as | ||||
| required by Section 2.2.2 of RFC 8693 | ||||
| * Explained why access_denied is used rather than invalid_target | ||||
| when the Client or End-User is not authorized for the target | ||||
| -05 | -05 | |||
| * Added invalid_target handling and resource governance checks for | * Added invalid_target handling and resource governance checks for | |||
| the resource parameter and claim | the resource parameter and claim | |||
| * Added security considerations on Authorization Server and | * Added security considerations on Authorization Server and | |||
| Protected Resource Metadata validation | Protected Resource Metadata validation | |||
| * Added mTLS certificate binding as an alternative sender- | * Added mTLS certificate binding as an alternative sender- | |||
| constraining mechanism for the ID-JAG, alongside DPoP | constraining mechanism for the ID-JAG, alongside DPoP | |||
| skipping to change at page 77, line 40 ¶ | skipping to change at page 77, line 48 ¶ | |||
| Server, and added a Subject Identifier Mapping section | Server, and added a Subject Identifier Mapping section | |||
| * Clarified that Token Exchange scope values are not OpenID Connect | * Clarified that Token Exchange scope values are not OpenID Connect | |||
| scopes | scopes | |||
| * Specified how the Resource Authorization Server finds and | * Specified how the Resource Authorization Server finds and | |||
| validates ID-JAG signing keys | validates ID-JAG signing keys | |||
| * Added id_jag_signing_alg_values_supported IdP metadata parameter | * Added id_jag_signing_alg_values_supported IdP metadata parameter | |||
| * Specified that IdP metadata is located per RFC 8414 | ||||
| * Clarified ID-JAG reuse limits and when the Client should request a | * Clarified ID-JAG reuse limits and when the Client should request a | |||
| new ID-JAG | new ID-JAG | |||
| * Required the IdP to authenticate the Client in the Token Exchange | ||||
| request | ||||
| * Limited the Token Exchange request to a single audience value, and | * Limited the Token Exchange request to a single audience value, and | |||
| profiled invalid_target for an unrecognized audience or a resource | profiled invalid_target for an unrecognized audience or a resource | |||
| not governed by it | not governed by it | |||
| * Defined resource identifier comparison, made the IdP resource | * Defined resource identifier comparison, made the IdP resource | |||
| governance check a SHOULD, and required the access token to be | governance check a SHOULD, and required the access token to be | |||
| restricted to the resources in the ID-JAG resource claim | restricted to the resources in the ID-JAG resource claim | |||
| * Moved RFC 9728 to normative references | * Moved RFC 9728 to normative references | |||
| * Clarified how the IdP validates a Refresh Token used as the | * Clarified how the IdP validates a Refresh Token used as the | |||
| subject token, and when the RFC 6749 scope comparison applies | subject token, and when the RFC 6749 scope comparison applies | |||
| * Required the jwt-dpop grant type for DPoP-bound ID-JAGs, and | * Required the jwt-dpop grant type for DPoP-bound ID-JAGs, and | |||
| required the Resource Authorization Server to reject an ID-JAG | required the Resource Authorization Server to reject an ID-JAG | |||
| with an unsupported cnf confirmation method | with an unsupported cnf confirmation method | |||
| * Allowed a key-bound ID-JAG to be used in place of client | ||||
| authentication at the Resource Authorization Server | ||||
| * Fixed the tenant claims used in the client ID and subject | * Fixed the tenant claims used in the client ID and subject | |||
| identifier uniqueness rules | identifier uniqueness rules | |||
| * Added a tenant context check at the Resource Authorization Server | ||||
| * Added Privacy Considerations | ||||
| * Updated the email and calendaring use case to use a Client ID | ||||
| Metadata Document | ||||
| * Fixed examples (RS256 signatures, Cache-Control headers, mTLS | * Fixed examples (RS256 signatures, Cache-Control headers, mTLS | |||
| client_id, consistent iss and exp values) | client_id, consistent iss and exp values) | |||
| * Corrected cited section numbers, removed citations from the | * Corrected cited section numbers, removed citations from the | |||
| abstract, and removed an unused reference | abstract, and removed an unused reference | |||
| * Editorial clarifications and typo fixes | * Editorial clarifications and typo fixes | |||
| -04 | -04 | |||
| End of changes. 15 change blocks. | ||||
| 9 lines changed or deleted | 39 lines changed or added | |||
This html diff was produced by rfcdiff 1.49. The latest version is available from https://github.com/ietf-tools/rfcdiff | ||||