Token exchange

FoxIDs admite dos escenarios diferentes de intercambio de tokens: intercambio de tokens en el mismo entorno y intercambio de tokens por confianza.

En el mismo entorno, es posible hacer intercambio de tokens de access tokens en una aplicación web o API/recurso hacia otro recurso.

Por confianza externa, es posible intercambiar access tokens externos y tokens SAML 2.0 por access tokens internos.

Samples

El intercambio de tokens se implementa en los siguientes ejemplos:

Puedes probar el intercambio de tokens con el ejemplo de aplicación web en línea (docs del ejemplo) haciendo clic en Log in e iniciando sesión con un IdP opcional. Luego haz clic en Call API1 which call API2 o Token Exchange + Call Api2 para llamar a una API usando intercambio de tokens.
Echa un vistazo a la configuración del ejemplo en FoxIDs Control: https://control.foxids.com/test-corp
Obtén acceso de lectura con el usuario reader@foxids.com y la contraseña gEh#V6kSw

Configuración de registro de aplicación

Es posible configurar si se permite el intercambio de tokens en el registro de aplicación OAuth 2.0 o el cliente OpenID Connect. Asimismo, es posible configurar si se permite el client credentials grant. Por defecto, tanto el client credentials grant como el intercambio de tokens están permitidos en los registros de aplicación OAuth 2.0 y clientes OpenID Connect.
Por defecto, el cliente se agrega como actor del intercambio de tokens; este comportamiento puede deshabilitarse.

OAuth 2.0 client config

Intercambio de tokens en el mismo entorno

Es posible intercambiar un access token emitido para un recurso y obtener un access token para otro recurso en el entorno.
Un cliente de registro de aplicación se configura para manejar el intercambio de tokens y para listar en blanco los recursos del entorno para los que se permite realizar intercambio de tokens.

Access Token a Access Token en aplicación web

Una aplicación web intercambia un access token JWT por un access token JWT' en el mismo entorno.

En este escenario, un cliente OpenID Connect ha obtenido un access token tras la autenticación del usuario.
El cliente también podría ser un cliente OAuth 2.0 usando el client credentials grant.

Token exchange, Access token to Access token in web application

El entorno incluye dos recursos y el cliente OpenID Connect está autorizado a llamar directamente tanto al primer como al segundo recurso. Para lograr el menor privilegio, el cliente OpenID Connect solo obtiene un access token para el primer recurso tras la autenticación del usuario. Luego obtiene un access token para el segundo recurso cuando se necesita.

OpenID Connect client client - resource scopes

El primer access token se emite con un scope/audience para el cliente OpenID Connect y el cliente queda autorizado a intercambiar los access tokens por un access token' válido para el segundo recurso.
El cliente OpenID Connect se configura con un secreto como client credentials, usado tanto en la comunicación OpenID Connect como en el intercambio de tokens.

Durante la secuencia de intercambio de tokens, las transformaciones y limitaciones de claims se ejecutan en el registro de aplicación OpenID Connect.

El cliente OpenID Connect realiza una llamada de intercambio de tokens a FoxIDs autenticando al cliente y pasando el access token mientras solicita (con un scope) un access token' para el segundo recurso. Si es exitoso, el cliente de recurso recibe un access token' y ahora puede llamar al segundo recurso con el access token'.

Ejemplo de solicitud POST de intercambio de tokens al endpoint token:

POST https://foxids.com/test-corp/-/aspnet_oidc_allup_online_sample(*)/oauth/token HTTP/1.1
Host: foxids.com
Content-Type: application/x-www-form-urlencoded

client_id=aspnet_oidc_allup_sample
&client_secret=IxIruKswG4sQxzOrKlXR58strgZtoyZPG18J3FhzEXI
&grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&scope=aspnetcore_api2_sample%3Asome_2_access
&subject_token=accVkjcJyb4...UC5PbRDqceLTC
&subject_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Aaccess_token

Ejemplo de respuesta JSON de intercambio de tokens:

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store

{
    "access_token":"eyJhGcjlc...nNjb3IIWvmDCM",
    "issued_token_type": "urn:ietf:params:oauth:token-type:access_token",
    "token_type":"Bearer",
    "expires_in":600
}

Ejemplo de cuerpo de access token JWT':

{
    "sub": "2f18c344-1204-4629-b992-215913b85c2b",
    "auth_time": "1699955593",
    "amr": "pwd",
    "email": "test1@foxids.com",
    "role": ["role1","role2"],
    "name": "Test 1 user",
    "act": "{\"sub\":\"c_aspnet_oidc_allup_sample\"}",
    "scope": "aspnetcore_api2_sample:some_2_access",
    "client_id": "aspnet_oidc_allup_sample",
    "nbf": 1699955534,
    "exp": 1699956194,
    "iat": 1699955594,
    "iss": "https://foxids.com/test-corp/-/",
    "aud": "aspnetcore_api2_sample"
}

Access Token a Access Token en API

Una API intercambia un access token JWT por un access token JWT' en el mismo entorno.

En este escenario, un cliente OpenID Connect ha obtenido un access token tras la autenticación del usuario.
El cliente también podría ser un cliente OAuth 2.0 usando el client credentials grant.

Token exchange, Access token to Access token in API

El entorno incluye dos recursos y el cliente OpenID Connect está autorizado a llamar directamente al primer recurso. El cliente OpenID Connect NO está autorizado a llamar directamente al segundo recurso. En el primer recurso se configura un cliente que permite que access tokens con la audiencia de cliente/recurso se intercambien por un access token' válido para el segundo recurso.
El cliente «flowing» en el primer recurso está configurado con un certificado como client credential.

OAuth 2.0 client on the first resource

Durante la secuencia de intercambio de tokens, las transformaciones y limitaciones de claims se ejecutan en el registro de aplicación.

El cliente OpenID Connect llama al primer recurso con el access token obtenido. El cliente de recurso realiza una llamada de intercambio de tokens a FoxIDs autenticando al cliente y pasando el access token mientras solicita (con un scope) un access token' para el segundo recurso. Si es exitoso, el cliente de recurso recibe un access token' y ahora puede llamar al segundo recurso con el access token'.

Ejemplo de solicitud POST de intercambio de tokens al endpoint token:

POST https://foxids.com/test-corp/-/aspnet_oidc_allup_online_sample(*)/oauth/token HTTP/1.1
Host: foxids.com
Content-Type: application/x-www-form-urlencoded

client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=eyJhbGciOiI...kyX3NhbXBsZS
&grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&scope=aspnetcore_api2_sample%3Asome_2_access
&subject_token=accVkjcJyb4...C5PbRDqceLTC
&subject_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Aaccess_token

Ejemplo de respuesta JSON de intercambio de tokens:

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store

{
    "access_token":"eyJhGcRwczov...nNjb3BlIjoi",
    "issued_token_type": "urn:ietf:params:oauth:token-type:access_token",
    "token_type":"Bearer",
    "expires_in":600
}

Ejemplo de cuerpo de access token JWT':

{
    "sub": "2f18c344-1204-4629-b992-215913b85c2b",
    "auth_time": "1699955841",
    "amr": "pwd",
    "act": "{\"sub\":\"c_aspnetcore_api1_sample\"}",
    "scope": "aspnetcore_api2_sample:some_2_access",
    "client_id": "aspnetcore_api1_sample",
    "nbf": 1699955786,
    "exp": 1699956446,
    "iat": 1699955846,
    "iss": "https://foxids.com/test-corp/-/",
    "aud": "aspnetcore_api2_sample"
}

Intercambio de tokens por confianza

Por confianza externa hacia un IdP/OP, es posible intercambiar un access token o un token SAML 2.0 emitido por una parte externa (o por otro entorno FoxIDs) y obtener así un access token para un recurso en el entorno.
Se configura una confianza de método de autenticación y un cliente de registro de aplicación se configura para permitir el intercambio de tokens según las confianzas de método de autenticación. El cliente de registro de aplicación además lista en blanco los recursos del entorno para los que se permite el intercambio de tokens.

Es posible configurar si la confianza del método de autenticación debe permitirse para el intercambio de tokens y la autenticación de usuario. Por defecto, ambos están permitidos en las confianzas de método de autenticación OAuth 2.0, OpenID Connect y SAML 2.0.

OAuth 2.0 trust config

Access Token a Access Token por confianza

Intercambio de access token JWT externo por access token JWT interno mediante confianza externa.

En este escenario, un cliente OpenID Connect confía en un OpenID Provider (OP) / Identity Provider (IdP) externo y ha obtenido un access token tras la autenticación del usuario.
El cliente también podría ser un cliente OAuth 2.0 usando el client credentials grant para obtener el access token externo.

Token exchange, Access token to Access token by trust

Hay un recurso en el entorno pero el cliente OpenID Connect externo definido NO está autorizado a llamar directamente al recurso.
Primero, se configura un método de autenticación OAuth 2.0 u OpenID Connect para confiar en el OpenID Provider (OP) / Identity Provider (IdP) externo y el emisor SP se configura para que coincida con la audiencia del cliente OpenID Connect externo.
El siguiente ejemplo de confianza externa es una confianza hacia otro entorno FoxIDs.

OAuth 2.0 authentication method trust

Luego, se configura un cliente de registro de aplicación OAuth 2.0 para aceptar access tokens externos mediante la confianza de método de autenticación. Es posible tener una o más confianzas de método de autenticación.
El cliente «flowing» se configura con un secreto como client credential.

OAuth 2.0 application registration client for OIDC application

De este modo, es posible intercambiar un access token externo por un access token interno válido para el recurso.

Durante la secuencia de intercambio de tokens, las transformaciones y limitaciones de claims se ejecutan primero en el método de autenticación y luego en el registro de aplicación.

La aplicación backend del cliente OpenID Connect realiza una llamada de intercambio de tokens a FoxIDs, autenticando al cliente OAuth 2.0 interno y pasando el access token externo mientras solicita (con un scope) un access token para el recurso. Si tiene éxito, la aplicación backend del cliente OpenID Connect recibe un access token y puede llamar al recurso.

Ejemplo de solicitud POST de intercambio de tokens al endpoint token:

POST https://foxids.com/test-corp/-/aspnet_oidc_allup_online_sample(*)/oauth/token HTTP/1.1
Host: foxids.com
Content-Type: application/x-www-form-urlencoded

client_id=some_external_id
&client_secret=goOxwj8Kz...wUC-3CGs
&grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&scope=aspnetcore_api2_sample%3Asome_2_access
&subject_token=accVkjcJyb4...UC5PbRDqceLTC
&subject_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Aaccess_token

Ejemplo de respuesta JSON de intercambio de tokens:

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store

{
    "access_token":"eyJhGcjlc...nNjb3IIWvmDCM",
    "issued_token_type": "urn:ietf:params:oauth:token-type:access_token",
    "token_type":"Bearer",
    "expires_in":600
}

SAML 2.0 a Access Token por confianza

Intercambio de token SAML 2.0 externo por access token JWT interno mediante confianza externa.

En este escenario, una aplicación SAML 2.0 confía en un Identity Provider (IdP) externo y ha obtenido un token SAML 2.0 tras la autenticación del usuario.

Token exchange, SAML 2.0 to Access token by trust

Hay un recurso en el entorno pero la aplicación SAML 2.0 externa definida NO está autorizada a llamar directamente al recurso.
Primero, se configura un método de autenticación SAML 2.0 para confiar en el Identity Provider (IdP) y el emisor SP se configura para que coincida con la audiencia de la aplicación SAML 2.0 externa.
El siguiente ejemplo de confianza externa es una confianza hacia un registro de aplicación SAML 2.0 de FoxIDs.

SAML 2.0 authentication method trust

Luego, se configura un cliente de registro de aplicación OAuth 2.0 para aceptar tokens SAML 2.0 externos mediante la confianza de método de autenticación. Es posible tener una o más confianzas de método de autenticación.
El cliente «flowing» se configura con un certificado como client credential.

OAuth 2.0 application registration client for SAML 2.0 application

De este modo, es posible intercambiar un token SAML 2.0 externo por un access token interno válido para el recurso.

Durante la secuencia de intercambio de tokens, las transformaciones y limitaciones de claims se ejecutan primero en el método de autenticación y luego en el registro de aplicación.

La aplicación backend SAML 2.0 realiza una llamada de intercambio de tokens a FoxIDs, autenticando al cliente OAuth 2.0 interno y pasando el token SAML 2.0 externo mientras solicita (con un scope) un access token para el recurso. Si tiene éxito, la aplicación backend SAML 2.0 recibe un access token y puede llamar al recurso.

Ejemplo de solicitud POST de intercambio de tokens al endpoint token:

POST https://foxids.com/test-corp/-/aspnet_oidc_allup_online_sample(*)/oauth/token HTTP/1.1
Host: foxids.com
Content-Type: application/x-www-form-urlencoded

client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=eyJhbGciOiI...kyX3NhbXBsZS
&grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&scope=aspnetcore_api2_sample%3Asome_2_access
&subject_token=%3Csaml%3AAssertion%20xmlns%3Asaml...%3AAssertion%3E%0A
&subject_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Asaml2

Ejemplo de respuesta JSON de intercambio de tokens:

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store

{
    "access_token":"eyJhGcRwczov...nNjb3BlIjoi",
    "issued_token_type": "urn:ietf:params:oauth:token-type:access_token",
    "token_type":"Bearer",
    "expires_in":600
}

Tu privacidad

Usamos cookies para mejorar tu experiencia en nuestros sitios web. Haz clic en «Aceptar todas las cookies» para aceptar su uso. Para rechazar cookies no esenciales, haz clic en «Solo cookies necesarias».

Visita nuestra política de privacidad para saber más