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:

Du kan teste token exchange med online web app sample (sample docs) ved å klikke Log in og logge inn med en valgfri IdP. Klikk deretter Call API1 which call API2 eller Token Exchange + Call Api2 for å kalle et API ved bruk av token exchange.
Se sample konfigurasjonen i FoxIDs Control: https://control.foxids.com/test-corp
Få read access med brukeren reader@foxids.com og passord gEh#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.

OAuth 2.0 client config

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.

Token exchange, Access token til Access token i web applikasjon

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.

OpenID Connect client client - resource scopes

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.

Token exchange, Access token til Access token i API

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.

OAuth 2.0 client på første resource

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.

OAuth 2.0 trust config

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.

Token exchange, Access token til Access token ved trust

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ø.

OAuth 2.0 autentiseringsmetode trust

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.

OAuth 2.0 applikasjonsregistrering klient for OIDC applikasjon

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.

Token exchange, SAML 2.0 til Access token ved trust

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.

SAML 2.0 autentiseringsmetode trust

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.

OAuth 2.0 applikasjonsregistrering klient for SAML 2.0 applikasjon

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
}

Ditt personvern

Vi bruker cookies for å gjøre opplevelsen av nettstedene våre bedre. Klikk på 'Godta alle cookies' for å samtykke til bruk av cookies. For å reservere deg mot ikke-nødvendige cookies, klikk på 'Kun nødvendige cookies'.

Besøk vår personvernerklæring for mer