Token exchange

FoxIDs supporta due scenari differenti di token exchange: token exchange nello stesso ambiente e token exchange tramite trust verso IdP/OP esterni.

Nello stesso ambiente e possibile eseguire token exchange di access token in una applicazione web o API/risorsa verso un'altra risorsa.

Tramite trust esterna e possibile eseguire token exchange di access token esterni e token SAML 2.0 verso access token interni.

Samples

Il token exchange e implementato nei seguenti sample:

Puoi testare il token exchange con il sample online web app (documentazione sample) facendo clic su Log in e autenticandoti con un IdP facoltativo. Poi fai clic su Call API1 which call API2 oppure Token Exchange + Call Api2 per chiamare un'API usando token exchange.
Consulta la configurazione del sample in FoxIDs Control: https://control.foxids.com/test-corp
Ottieni accesso in lettura con l'utente reader@foxids.com e la password gEh#V6kSw

Configurazione della registrazione applicativa

E possibile configurare se il token exchange e consentito sulla registrazione applicativa OAuth 2.0 o sul client OpenID Connect. Allo stesso modo, e possibile configurare se il client credentials grant deve essere consentito. Per impostazione predefinita sia client credentials grant sia token exchange sono consentiti sulle registrazioni applicative OAuth 2.0 e sui client OpenID Connect.
Per impostazione predefinita il client viene aggiunto come attore del token exchange; questo comportamento puo essere disabilitato.

OAuth 2.0 client config

Token exchange nello stesso ambiente

E possibile eseguire token exchange di un access token emesso per una risorsa e ottenere cosi un access token per un'altra risorsa nell'ambiente.
Un client di registrazione applicativa viene configurato per gestire il token exchange e per autorizzare tramite whitelist per quali risorse nell'ambiente e consentito eseguire token exchange.

Access Token verso Access Token in applicazione web

Un'applicazione web esegue token exchange da JWT access token a JWT access token' nello stesso ambiente.

In questo scenario, un client OpenID Connect ha ottenuto un access token dopo l'autenticazione dell'utente.
Il client potrebbe anche essere un client OAuth 2.0 che usa client credentials grant.

Token exchange, Access token to Access token in web application

L'ambiente include due risorse e il client OpenID Connect e autorizzato a chiamare direttamente sia la prima sia la seconda risorsa. Per ottenere least privileges, il client OpenID Connect riceve solo un access token per la prima risorsa dopo l'autenticazione dell'utente. Successivamente ottiene un access token per la seconda risorsa quando necessario.

OpenID Connect client client - resource scopes

Il primo access token viene emesso con uno scope/audience per il client OpenID Connect e il client e quindi autorizzato a scambiare l'access token con un access token' valido per la seconda risorsa.
Il client OpenID Connect e configurato con un secret come credenziali client, usate sia nella comunicazione OpenID Connect sia nel token exchange.

Durante la sequenza di token exchange, le trasformazioni e le limitazioni dei claim vengono eseguite sulla registrazione applicativa OpenID Connect.

Il client OpenID Connect effettua una chiamata di token exchange a FoxIDs autenticando il client e passando l'access token, mentre richiede (con uno scope) un access token' per la seconda risorsa. In caso di successo, il client della risorsa riceve un access token' e puo quindi chiamare la seconda risorsa con quell'access token'.

Sample token exchange POST request to the token endpoint:

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

Sample token exchange JSON response:

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
}

Sample JWT access token' body:

{
    "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 verso Access Token in API

Un'API esegue token exchange da JWT access token a JWT access token' nello stesso ambiente.

In questo scenario, un client OpenID Connect ha ottenuto un access token dopo l'autenticazione dell'utente.
Il client potrebbe anche essere un client OAuth 2.0 che usa client credentials grant.

Token exchange, Access token to Access token in API

L'ambiente include due risorse e il client OpenID Connect e autorizzato a chiamare direttamente la prima risorsa. Il client OpenID Connect NON e autorizzato a chiamare direttamente la seconda risorsa. Sulla prima risorsa e configurato un client che consente di scambiare access token con audience client/risorsa in un access token' valido per la seconda risorsa.
Il client seguente sulla prima risorsa e configurato con un certificato come credenziale client.

OAuth 2.0 client on the first resource

Durante la sequenza di token exchange, le trasformazioni e le limitazioni dei claim vengono eseguite sulla registrazione applicativa.

Il client OpenID Connect chiama la prima risorsa con l'access token ottenuto. Il client della risorsa effettua una chiamata di token exchange a FoxIDs autenticando il client e passando l'access token mentre richiede (con uno scope) un access token' per la seconda risorsa. In caso di successo, il client della risorsa riceve un access token' e puo quindi chiamare la seconda risorsa con quell'access token'.

Sample token exchange POST request to the token endpoint:

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

Sample token exchange JSON response:

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
}

Sample JWT access token' body:

{
    "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"
}

Token exchange tramite trust

Tramite trust esterna verso IdP/OP e possibile eseguire token exchange di un access token oppure di un token SAML 2.0 emesso da una parte esterna (o da un altro ambiente FoxIDs) e ottenere cosi un access token per una risorsa nell'ambiente.
Viene configurata una trust di metodo di autenticazione e viene configurato un client di registrazione applicativa per consentire il token exchange sulla base di una o piu trust di metodo di autenticazione. Il client di registrazione applicativa mette inoltre in whitelist le risorse nell'ambiente per cui e consentito eseguire token exchange.

E possibile configurare se la trust del metodo di autenticazione deve essere consentita per token exchange e autenticazione utente. Per impostazione predefinita entrambe sono consentite su trust di metodo di autenticazione OAuth 2.0, OpenID Connect e SAML 2.0.

OAuth 2.0 trust config

Access Token verso Access Token tramite trust

Token exchange da JWT access token esterno a JWT access token interno tramite trust esterna.

In questo scenario, un client OpenID Connect si fida di un OpenID Provider (OP) / Identity Provider (IdP) esterno e ha ottenuto un access token dopo l'autenticazione dell'utente.
Il client potrebbe anche essere un client OAuth 2.0 che usa client credentials grant per ottenere l'access token esterno.

Token exchange, Access token to Access token by trust

Esiste una risorsa nell'ambiente, ma il client OpenID Connect definito esternamente NON e autorizzato a chiamare direttamente la risorsa.
Prima viene configurato un metodo di autenticazione OAuth 2.0 oppure OpenID Connect per fidarsi dell'OpenID Provider (OP) / Identity Provider (IdP) esterno e l'SP issuer viene configurato in modo da corrispondere all'audience del client OpenID Connect esterno.
L'esempio seguente di trust esterna e una trust verso un altro ambiente FoxIDs.

OAuth 2.0 authentication method trust

Poi viene configurato un client di registrazione applicativa OAuth 2.0 per accettare access token esterni tramite la trust del metodo di autenticazione. E possibile avere una o piu trust di metodo di autenticazione.
Il client seguente e configurato con un secret come credenziale client.

OAuth 2.0 application registration client for OIDC application

Diventa quindi possibile eseguire token exchange di un access token esterno in un access token interno valido per la risorsa.

Durante la sequenza di token exchange, sia le trasformazioni sia le limitazioni dei claim vengono eseguite prima sul metodo di autenticazione e poi sulla registrazione applicativa.

L'applicazione backend client OpenID Connect effettua una chiamata di token exchange a FoxIDs. Autentica il client OAuth 2.0 interno e passa l'access token esterno mentre richiede (con uno scope) un access token per la risorsa. In caso di successo, l'applicazione backend client OpenID Connect riceve un access token e puo quindi chiamare la risorsa.

Sample token exchange POST request to the token endpoint:

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

Sample token exchange JSON response:

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 verso Access Token tramite trust

Token exchange da token SAML 2.0 esterno a JWT access token interno tramite trust esterna.

In questo scenario, un'applicazione SAML 2.0 si fida di un Identity Provider (IdP) esterno e ha ottenuto un token SAML 2.0 dopo l'autenticazione dell'utente.

Token exchange, SAML 2.0 to Access token by trust

Esiste una risorsa nell'ambiente, ma l'applicazione SAML 2.0 definita esternamente NON e autorizzata a chiamare direttamente la risorsa.
Prima viene configurato un metodo di autenticazione SAML 2.0 per fidarsi dell'Identity Provider (IdP) e l'SP issuer viene configurato in modo da corrispondere all'audience dell'applicazione SAML 2.0 esterna.
L'esempio seguente di trust esterna e una trust verso una registrazione applicativa SAML 2.0 di FoxIDs.

SAML 2.0 authentication method trust

Poi viene configurato un client di registrazione applicativa OAuth 2.0 per accettare token SAML 2.0 esterni tramite la trust del metodo di autenticazione. E possibile avere una o piu trust di metodo di autenticazione.
Il client seguente e configurato con un certificato come credenziale client.

OAuth 2.0 application registration client for SAML 2.0 application

Diventa quindi possibile eseguire token exchange di un token SAML 2.0 esterno in un access token interno valido per la risorsa.

Durante la sequenza di token exchange, sia le trasformazioni sia le limitazioni dei claim vengono eseguite prima sul metodo di autenticazione e poi sulla registrazione applicativa.

L'applicazione backend SAML 2.0 effettua una chiamata di token exchange a FoxIDs. Autentica il client OAuth 2.0 interno e passa il token SAML 2.0 esterno mentre richiede (con uno scope) un access token per la risorsa. In caso di successo, l'applicazione backend SAML 2.0 riceve un access token e puo quindi chiamare la risorsa.

Sample token exchange POST request to the token endpoint:

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

Sample token exchange JSON response:

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
}
La tua privacy

La tua privacy

Usiamo i cookie per migliorare la tua esperienza sui nostri siti. Fai clic sul pulsante 'Accetta tutti i cookie' per acconsentire all'uso dei cookie. Per rifiutare i cookie non essenziali, fai clic su 'Solo cookie necessari'.

Visita la nostra pagina di Informativa sulla privacy per saperne di più