You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: draft-ietf-oauth-identity-assertion-authz-grant.md
+32-29Lines changed: 32 additions & 29 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -97,7 +97,7 @@ This specification enables this kind of "Cross App Access" to be managed by the
97
97
98
98
The draft specification Identity Chaining Across Trust Domains {{I-D.ietf-oauth-identity-chaining}} defines how to request a JWT authorization grant from an Authorization Server and exchange it for an Access Token at another Authorization Server in a different trust domain. The specification combines OAuth 2.0 Token Exchange {{RFC8693}} and JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants {{RFC7523}}. The draft supports multiple different use cases by leaving many details of the token exchange request and JWT authorization grant unspecified.
99
99
100
-
This specification defines the additional details necessary to support interoperable implementations in enterprise scenarios when two applications are configured for single sign-on to the same enterprise identity provider. In particular, this specification uses identity assertions as the input to the token exchange request. This way, the same enterprise identity provider that is trusted by applications for single sign-on can be extended to broker access to APIs.
100
+
This specification defines the additional details necessary to support interoperable implementations in enterprise scenarios when two applications are configured for single sign-on to the same enterprise identity provider. In particular, this specification uses an Identity Assertion as the input to the token exchange request. This way, the same enterprise Identity Provider that is trusted by applications for single sign-on can be extended to broker access to APIs.
101
101
102
102
103
103
# Conventions and Definitions
@@ -110,7 +110,7 @@ Client
110
110
: The application that wants to obtain an OAuth 2.0 access token on behalf of a signed-in user to an external/3rd party application's API (Resource Server below). In {{I-D.ietf-oauth-identity-chaining}}, this is the Client in trust domain A. The application has a direct relationship with the IdP Authorization Server for single sign-on as a Relying Party and another independent OAuth 2.0 client relationship with the Resource Authorization Server in trust domain B.
111
111
112
112
IdP Authorization Server (IdP)
113
-
: A SAML 2.0 Identity Provider or OpenID Connect Provider (OP) {{OpenID.Core}} that issues identity assertions for single sign-on and cross-domain authorization grants {{id-jag}} for a set of trusted applications in an organization's application ecosystem. In {{I-D.ietf-oauth-identity-chaining}}, this is the Authorization Server in trust domain A, which is also trusted by the Resource Authorization Server in trust domain B.
113
+
: A SAML 2.0 Identity Provider or OpenID Connect Provider (OP) {{OpenID.Core}} that issues Identity Assertions for single sign-on and cross-domain authorization grants {{id-jag}} for a set of trusted applications in an organization's application ecosystem. In {{I-D.ietf-oauth-identity-chaining}}, this is the Authorization Server in trust domain A, which is also trusted by the Resource Authorization Server in trust domain B.
114
114
115
115
Resource Authorization Server (AS)
116
116
: Issues OAuth 2.0 access tokens for protected resources provided by the Resource Server. In {{I-D.ietf-oauth-identity-chaining}}, this is the Authorization Server in trust domain B, and trusts cross-domain authorization grants {{id-jag}} from the IdP Authorization Server.
@@ -123,50 +123,56 @@ Resource Server (RS)
123
123
124
124
The Identity Assertion JWT Authorization Grant (ID-JAG) is a profile of the JWT Authorization Grant {{RFC7523}} that grants a client delegated access to a resource in another trust domain on behalf of a user without a direct user-approval step at the authorization server.
125
125
126
-
An Identity Assertion JWT Authorization Grant is issued and signed by an IdP similar to an ID Token {{OpenID.Core}}, and contains claims about an end-user. Instead of being issued for a client (Relying Party in {{OpenID.Core}}) as the intended audience for the assertion, it is instead issued with an audience of an Authorization Server in another trust domain. It replaces the need for the client to obtain an authorization code from the Resource Authorization Server to delegate access to the client, and instead uses the IdP which is trusted by the Authorization Server to delegate access to the client.
126
+
An ID-JAG is issued and signed by an IdP Authorization Server similar to an ID Token {{OpenID.Core}}, and contains claims about an End-User. Instead of being issued for a client (Relying Party in {{OpenID.Core}}) as the intended audience for the assertion, it is instead issued with an audience of an Authorization Server in another trust domain (Resource Authorization Server). It replaces the need for the client to obtain an authorization code from the Resource Authorization Server to delegate access to the client, and instead uses the IdP Authorization Server which is trusted by the Resource Authorization Server to delegate access to the client.
127
127
128
128
As described in {{OpenID.Core}}, ID Tokens are only intended to be processed by the Relying Party (indicated by the ID Token audience) or the Issuer (e.g. for revocation), and not by other actors in a different trust domain such as an Authorization Server.
129
129
130
130
The following claims are used within the Identity Assertion JWT Authorization Grant:
131
131
132
132
`iss`:
133
-
: REQUIRED - The issuer identifier of the IdP authorization server as defined in {{RFC8414}}
133
+
: REQUIRED - The issuer identifier of the IdP Authorization Server as defined in {{RFC8414}}.
134
134
135
135
`sub`:
136
-
: REQUIRED - The subject identifier (e.g. user ID) of the resource owner at the Resource Authorization Server as defined in {{OpenID.Core}}
136
+
: REQUIRED - The subject identifier (e.g. user ID) of the resource owner at the Resource Authorization Server as defined in {{OpenID.Core}}. The identifier MUST be the same as the subject identifier used in an Identity Assertion for the Resource Authorization Server as a Relying Party for SSO. A public subject identifier MUST be unique when scoped with issuer (`iss`+`sub`) for a single-tenant issuer and MUST be unique when scoped with issuer and tenant (`iss`+`tenant`+`sub`) for multi-tenant issuer. See {{client-id-mapping}} for additional considerations.
137
137
138
138
`aud`:
139
-
: REQUIRED - The issuer identifier of the Resource Authorization Server as defined in {{RFC8414}}
139
+
: REQUIRED - The issuer identifier of the Resource Authorization Server as defined in {{RFC8414}}.
140
140
141
141
`client_id`:
142
-
: REQUIRED - An identifier of the client that will act on behalf of the resource owner. It MUST be recognized by the Resource Authorization Server. For interoperability, the client identifier SHOULD be a `client_id` as defined in {{Section 4.3 of RFC8693}}. See {{client-id-mapping}} for additional considerations.
142
+
: REQUIRED - The client identifier of the OAuth 2.0 {{RFC6749}} client at the Resource Authorization Server that will act on behalf of the resource owner (`sub`). This identifier MAY be different that client identifier of the OAuth 2.0 client requesting an ID-JAG from the IdP {{Section 4.3 of RFC8693}} as it represents and independent client relationship to another Authorization Server in a different trust domain. See {{client-id-mapping}} for additional considerations.
143
143
144
144
`jti`:
145
-
: REQUIRED - Unique ID of this JWT as defined in {{Section 4.1.7 of RFC7519}}
145
+
: REQUIRED - Unique ID of this JWT as defined in {{Section 4.1.7 of RFC7519}}.
146
146
147
147
`exp`:
148
-
: REQUIRED - as defined in {{Section 4.1.4 of RFC7519}}
148
+
: REQUIRED - as defined in {{Section 4.1.4 of RFC7519}}.
149
149
150
150
`iat`:
151
-
: REQUIRED - as defined in {{Section 4.1.6 of RFC7519}}
151
+
: REQUIRED - as defined in {{Section 4.1.6 of RFC7519}}.
152
152
153
153
`resource`:
154
-
: OPTIONAL - The Resource Identifier ({{Section 2 of RFC8707}}) of the Resource Server (either a single URI or an array of URIs)
154
+
: OPTIONAL - The Resource Identifier ({{Section 2 of RFC8707}}) of the Resource Server (either a single URI or an array of URIs).
155
155
156
156
`scope`:
157
-
: OPTIONAL - a JSON string containing a space-separated list of scopes associated with the token, in the format described in {{Section 3.3 of RFC6749}}
157
+
: OPTIONAL - a JSON string containing a space-separated list of scopes associated with the token, in the format described in {{Section 3.3 of RFC6749}}.
158
158
159
159
`tenant`:
160
160
: OPTIONAL - JSON string that represents the tenant identifier for a multi-tenant issuer as defined in {{OpenID.Enterprise}}
161
161
162
162
`auth_time`:
163
-
: OPTIONAL - Time when end-user authenticated to the client as defined in {{OpenID.Core}}
163
+
: OPTIONAL - Time when End-User authenticated as defined in {{OpenID.Core}}.
164
164
165
165
`acr`:
166
-
: OPTIONAL - Authentication Context Class Reference that was satisfied when authenticating the end-user as defined in {{OpenID.Core}}
166
+
: OPTIONAL - Authentication Context Class Reference that was satisfied when authenticating the End-User as defined in {{OpenID.Core}}.
167
167
168
168
`amr`:
169
-
: OPTIONAL - Identifiers for authentication methods used when authenticating the end-user as defined in {{OpenID.Core}}
169
+
: OPTIONAL - Identifiers for authentication methods used when authenticating the End-User as defined in {{OpenID.Core}}.
170
+
171
+
`aud_sub`:
172
+
: OPTIONAL - Resource Authorization Server identifier for the subject as defined in {{OpenID.Enterprise}}.
173
+
174
+
`email`:
175
+
:OPTIONAL - End-User's e-mail address as defined in {{Section 5.1 of OpenID.Core}}.
170
176
171
177
The `typ` of the JWT indicated in the JWT header MUST be `oauth-id-jag+jwt`. Using typed JWTs is a recommendation of the JSON Web Token Best Current Practices ({{Section 3.11 of RFC8725}}).
172
178
@@ -197,12 +203,9 @@ A non-normative example JWT with expanded header and payload claims is below:
197
203
.
198
204
signature
199
205
200
-
The Identity Assertion JWT Authorization Grant may contain additional Authentication, Identity, or Authorization claims that are valid for an ID Token as the grant functions as an identity assertion for the Resource App.
201
-
202
-
203
-
Implementation notes:
206
+
The ID-JAG may contain additional authentication, identity, or authorization claims that are valid for an ID Token {{OpenID.Core}} as the grant functions as both an Identity Assertion and authorization delegation for the Resource Authorization Server.
204
207
205
-
* `sub` should be an opaque ID, as `iss`+`sub` is unique. The IdP might want to also include the user's email here, which it should do as a new `email` claim. This would let the app dedupe existing users who may have an account with an email address but have not done SSO yet.
208
+
It is RECOMMENDED that the ID-JAG contain an `email` {{OpenID.Core}} or `aud_sub` {{OpenID.Enterprise}} claim when issued for Resource Authorization Server that hasn't established a prior SSO relationship with the IdP. The Resource Authorization Server MAY use these claims for account resolution or just-in-time (JIT) account creation. Additional Resource Authorization Server specific identity claims MAY be needed for account resolution or JIT account creation.
206
209
207
210
# Cross-Domain Access
208
211
@@ -257,7 +260,7 @@ Sequence Diagram
257
260
| | | |
258
261
| | | |
259
262
260
-
1. User authenticates with the IdP Authorization Server, the Client obtains an Identity Assertion (e.g. OpenID Connect ID Token or SAML 2.0 assertion) for the user and optionally a Refresh Token (when using OpenID Connect) and signs the user in
263
+
1. User authenticates with the IdP Authorization Server, the Client obtains an Identity Assertion (e.g. OpenID Connect ID Token or SAML 2.0 Assertion) for the user and optionally a Refresh Token (when using OpenID Connect) and signs the user in
261
264
2. Client uses the Identity Assertion to request an Identity Assertion JWT Authorization Grant for the Resource Authorization Server from the IdP Authorization Server
262
265
3. Client exchanges the Identity Assertion JWT Authorization Grant for an Access Token at the Resource Authorization Server's token endpoint
263
266
4. Client makes an API request to the Resource Server with the Access Token
@@ -267,7 +270,7 @@ This specification is constrained to deployments where a set of Resource Authori
267
270
268
271
## User Authentication
269
272
270
-
The Client initiates an authentication request with the IdP using OpenID Connect or SAML.
273
+
The Client initiates an authentication request with the IdP Authorization Server using OpenID Connect or SAML.
271
274
272
275
The following is an example using OpenID Connect
273
276
@@ -299,13 +302,13 @@ Note: The IdP Authorization Server may enforce security controls such as multi-f
299
302
300
303
## Token Exchange
301
304
302
-
The Client makes a Token Exchange {{RFC8693}} request to the IdP's Token Endpoint with the following parameters:
305
+
The Client makes a Token Exchange {{RFC8693}} request to the IdP Authorization Server's Token Endpoint with the following parameters:
303
306
304
307
`requested_token_type`:
305
-
: REQUIRED - The value `urn:ietf:params:oauth:token-type:id-jag` indicates that an ID Assertion JWT is being requested.
308
+
: REQUIRED - The value `urn:ietf:params:oauth:token-type:id-jag` indicates that an Identity Assertion JWT Authorization Grant is being requested.
306
309
307
310
`audience`:
308
-
: REQUIRED - The Issuer URL of the Resource Authorization Server as defined in {{Section 2 of RFC8414}}.
311
+
: REQUIRED - The issuer identifier of the Resource Authorization Server as defined in {{Section 2 of RFC8414}}.
309
312
310
313
`resource`:
311
314
: OPTIONAL - The Resource Identifier of the Resource Server as defined in {{Section 2 of RFC8707}}.
@@ -314,14 +317,14 @@ The Client makes a Token Exchange {{RFC8693}} request to the IdP's Token Endpoin
314
317
: OPTIONAL - The space-separated list of scopes at the Resource Server that is being requested.
315
318
316
319
`subject_token`:
317
-
: REQUIRED - The identity assertion (e.g. the OpenID Connect ID Token or SAML assertion) for the target end-user.
320
+
: REQUIRED - The Identity Assertion (e.g. the OpenID Connect ID Token or SAML 2.0 Assertion) for the target resource owner.
318
321
319
322
`subject_token_type`:
320
-
: REQUIRED - An identifier, as described in {{Section 3 of RFC8693}}, that indicates the type of the security token in the `subject_token` parameter. For an OpenID Connect ID Token: `urn:ietf:params:oauth:token-type:id_token`, or for a SAML assertion: `urn:ietf:params:oauth:token-type:saml2`.
323
+
: REQUIRED - An identifier, as described in {{Section 3 of RFC8693}}, that indicates the type of the security token in the `subject_token` parameter. For an OpenID Connect ID Token: `urn:ietf:params:oauth:token-type:id_token`, or for a SAML 2.0 Assertion: `urn:ietf:params:oauth:token-type:saml2`.
321
324
322
325
The additional parameters defined in {{Section 2.1 of RFC8693}} `actor_token` and `actor_token_type` are not used in this specification.
323
326
324
-
Client authentication to the authorization server is done using the standard mechanisms provided by OAuth 2.0. {{Section 2.3.1 of RFC6749}} defines password-based authentication of the client (`client_id` and `client_secret`), however, client authentication is extensible and other mechanisms are possible. For example, {{RFC7523}} defines client authentication using bearer JSON Web Tokens using `client_assertion` and `client_assertion_type`.
327
+
Client authentication to the Resource Authorization Server is done using the standard mechanisms provided by OAuth 2.0. {{Section 2.3.1 of RFC6749}} defines password-based authentication of the client (`client_id` and `client_secret`), however, client authentication is extensible and other mechanisms are possible. For example, {{RFC7523}} defines client authentication using bearer JSON Web Tokens using `client_assertion` and `client_assertion_type`.
325
328
326
329
The example below uses an ID Token as the Identity Assertion, and uses a JWT Bearer Assertion {{RFC7523}} as the client authentication method, (tokens truncated for brevity):
327
330
@@ -596,7 +599,7 @@ Email clients can be used with arbitrary email servers, and cannot require pre-e
596
599
597
600
When the email client needs access to a separate API, such as a third-party calendaring application, traditionally this would require that the email client go through another web-based OAuth redirect flow to obtain authorization and ultimately an access token.
598
601
599
-
To streamline the user experience, this specification can be used to enable the email client to use the identity assertion to obtain an access token for the third-party calendaring application without any user interaction.
602
+
To streamline the user experience, this specification can be used to enable the email client to use the Identity Assertion to obtain an access token for the third-party calendaring application without any user interaction.
0 commit comments