Token exchange
FoxIDs støtter to forskjellige scenarier for token exchange: token exchange i samme miljø og token exchange ved trust.
I samme miljø er det mulig å gjøre token exchange av access tokens i en web applikasjon eller API/resource til en annen resource.
Ved ekstern trust er det mulig å gjøre token exchange av eksterne access tokens og SAML 2.0 tokens til interne access tokens.
Samples
Token exchange er implementert i følgende samples:
- AspNetCoreOidcAuthCodeAllUpPartiesSample, viser token exchange fra access token til access token inne i en website backend
- AspNetCoreSamlSample, viser token exchange fra SAML 2.0 token til access token
- AspNetCoreApi1Sample, viser token exchange fra access token til access token inne i et API
Du kan teste token exchange med online web app sample (sample docs) ved å klikke
Log inog logge inn med en valgfri IdP. Klikk deretterCall API1 which call API2ellerToken Exchange + Call Api2for å kalle et API ved bruk av token exchange.
Se sample konfigurasjonen i FoxIDs Control: https://control.foxids.com/test-corp
Få read access med brukerenreader@foxids.comog passordgEh#V6kSw
Applikasjonsregistrering konfigurasjon
Det er mulig å konfigurere om token exchange er tillatt på OAuth 2.0 applikasjonsregistrering eller OpenID Connect klient. Det er også mulig å konfigurere om client credentials grant skal være tillatt.
Som standard er både client credentials grant og token exchange tillatt på OAuth 2.0 applikasjonsregistreringer og OpenID Connect klienter.
Som standard legges klienten til som token exchange actor, dette kan deaktiveres.

Token exchange i samme miljø
Det er mulig å token exchange et access token utstedt til en resource og dermed få et access token til en annen resource i miljøet.
En applikasjonsregistrering klient er konfigurert til å håndtere token exchange og til å whitelist hvilke resources i miljøet det er tillatt å gjøre token exchange til.
Access Token til Access Token i web applikasjon
En web applikasjon token exchange JWT access token til JWT access token' i samme miljø.
I dette scenariet har en OpenID Connect klient fått et access token etter bruker autentisering.
Klienten kan også være en OAuth 2.0 klient som bruker client credentials grant.
Miljøet inneholder to resources og OpenID Connect klienten er tillatt å kalle både første og andre resource direkte. For å oppnå least privileges får OpenID Connect klienten bare et access token til første resource etter bruker autentisering. Og får deretter et access token til andre resource når det er nødvendig.

Det første access token utstedes med scope/audience for OpenID Connect klienten og klienten får dermed lov til å exchange access tokens til et access token' gyldig for andre resource.
OpenID Connect klienten er konfigurert med et secret som client credentials brukt både i OpenID Connect kommunikasjon og token exchange.
Under token exchange sekvensen utføres claims transformations og limitations på OpenID Connect applikasjonsregistreringen.
OpenID Connect klienten gjør et token exchange kall til FoxIDs, autentiserer klienten og sender access token mens det bes (med scope) om et access token' til andre resource. Hvis det lykkes, får resource klienten et access token' tilbake og kan nå kalle andre resource med access token'.
Sample token exchange POST request til 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 til Access Token i API
Et API token exchange JWT access token til JWT access token' i samme miljø.
I dette scenariet har en OpenID Connect klient fått et access token etter bruker autentisering.
Klienten kan også være en OAuth 2.0 klient som bruker client credentials grant.
Miljøet inneholder to resources og OpenID Connect klienten er tillatt å kalle første resource direkte. OpenID Connect klienten er IKKE tillatt å kalle andre resource direkte. På første resource er en klient konfigurert som tillater access tokens med client/resource audience å bli exchange til et access token' gyldig for andre resource.
Den følgende klienten på første resource er konfigurert med et sertifikat som client credential.

Under token exchange sekvensen utføres claims transformations og limitations på applikasjonsregistreringen.
OpenID Connect klienten kaller første resource med det mottatte access token. Resource klienten gjør et token exchange kall til FoxIDs, autentiserer klienten og sender access token mens det bes (med scope) om et access token' til andre resource. Hvis det lykkes, får resource klienten et access token' tilbake og kan nå kalle andre resource med access token'.
Sample token exchange POST request til 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 ved trust
Ved ekstern trust til IdP/OP er det mulig å token exchange et access token eller SAML 2.0 token utstedt av en ekstern part (eller et annet FoxIDs miljø) og dermed få et access token for en resource i miljøet.
En autentiseringsmetode trust konfigureres og en applikasjonsregistrering klient konfigureres til å tillate token exchange basert på autentiseringsmetode trust(s). Applikasjonsregistrering klienten whitelister i tillegg hvilke resources i miljøet det er lov å token exchange til.
Det er mulig å konfigurere om autentiseringsmetode trust skal være tillatt for token exchange og bruker autentisering. Standard er begge tillatt på en OAuth 2.0, OpenID Connect og SAML 2.0 autentiseringsmetode trust.

Access Token til Access Token ved trust
Token exchange ekstern JWT access token til intern JWT access token ved ekstern trust.
I dette scenariet stoler en OpenID Connect klient på en ekstern OpenID Provider (OP) / Identity Provider (IdP) og har fått et access token etter bruker autentisering.
Klienten kan også være en OAuth 2.0 klient som bruker client credentials grant for å få det eksterne access token.
Det finnes en resource i miljøet men den eksternt definerte OpenID Connect klienten er IKKE tillatt å kalle resourcen direkte.
Først konfigureres en OAuth 2.0 eller OpenID Connect autentiseringsmetode til å stole på den eksterne OpenID Provider (OP) / Identity Provider (IdP) og SP issuer konfigureres til å matche den eksterne OpenID Connect klientens audience.
Det følgende eksterne trust eksempelet er en trust til et annet FoxIDs miljø.

Deretter konfigureres en OAuth 2.0 applikasjonsregistrering klient til å akseptere eksterne access tokens via autentiseringsmetode trust. Det er mulig å ha en eller flere autentiseringsmetode trusts.
Den følgende klienten er konfigurert med et secret som client credentials.

Det er dermed mulig å token exchange et eksternt access token til et internt access token gyldig for resourcen.
Under token exchange sekvensen utføres både claims transformations og limitations først på autentiseringsmetoden og deretter på applikasjonsregistreringen.
OpenID Connect klient backend applikasjonen gjør et token exchange kall til FoxIDs. Den autentiserer den interne OAuth 2.0 klienten og sender det eksterne access token mens det bes (med scope) om et access token til resourcen. Hvis det lykkes, får OpenID Connect klient backend applikasjonen et access token tilbake og kan nå kalle resourcen.
Sample token exchange POST request til 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 til Access Token ved trust
Token exchange ekstern SAML 2.0 token til intern JWT access token ved ekstern trust.
I dette scenariet stoler en SAML 2.0 applikasjon på en ekstern Identity Provider (IdP) og har fått et SAML 2.0 token etter bruker autentisering.
Det finnes en resource i miljøet men den eksternt definerte SAML 2.0 applikasjonen er IKKE tillatt å kalle resourcen direkte.
Først konfigureres en SAML 2.0 autentiseringsmetode til å stole på Identity Provider (IdP) og SP issuer konfigureres til å matche den eksterne SAML 2.0 applikasjonens audience.
Det følgende eksterne trust eksempelet er en trust til en FoxIDs SAML 2.0 applikasjonsregistrering.

Deretter konfigureres en OAuth 2.0 applikasjonsregistrering klient til å akseptere eksterne SAML 2.0 tokens via autentiseringsmetode trust. Det er mulig å ha en eller flere autentiseringsmetode trusts.
Den følgende klienten er konfigurert med et sertifikat som client credentials.

Det er dermed mulig å token exchange et eksternt SAML 2.0 token til et internt access token gyldig for resourcen.
Under token exchange sekvensen utføres både claims transformations og limitations først på autentiseringsmetoden og deretter på applikasjonsregistreringen.
SAML 2.0 backend applikasjonen gjør et token exchange kall til FoxIDs. Den autentiserer den interne OAuth 2.0 klienten og sender det eksterne SAML 2.0 token mens det bes (med scope) om et access token til resourcen. Hvis det lykkes, får SAML 2.0 backend applikasjonen et access token tilbake og kan nå kalle resourcen.
Sample token exchange POST request til 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
}