Svenska
  • oidc
  • oauth
  • token-exchange
  • openid

Förstå tokenutbyte i OAuth/OIDC

Tokenutbyte är en OAuth-förlängning som gör det möjligt för betrodda klienter att erhålla nya token utan användarinteraktion, användbart för förklädning, automation, systemintegration och tokenmigrering i olika scenarier.

Sijie
Sijie
Developer

Introducerat i RFC 8693, är tokenutbyte en OAuth-förlängning som låter betrodda klienter byta ett befintligt token mot ett nytt med olika attribut eller behörigheter. Denna mekanism är särskilt användbar för en tjänst, en applikation eller en slutanvändare att erhålla ett normalt OAuth-åtkomsttoken via ett förauktoriserat token, utan att behöva genomgå hela OAuth-flödet.

Jämförelse med auktoriseringskodflöde

Låt oss först titta på OAuth auktoriseringskodflödet, som är det vanligaste flödet för att få ett åtkomsttoken.

Och detta är tokenutbytesflödet:

Omdirigering

Den största skillnaden är att i auktoriseringskodflödet omdirigerar klientapplikationen användaren till auktoriseringsservern för att erhålla ett åtkomsttoken. I tokenutbyte kan klientapplikationen byta ett token med auktoriseringsservern utan att involvera användaren för att omdirigera.

Detta beror på att i auktoriseringskodflödet är klientapplikationen inte "betrodd" och behöver känna till användarens inloggningsuppgifter för att erhålla ett åtkomsttoken. I tokenutbyte är klientapplikationen betrodd att redan ha erhållit token från användaren, och auktoriseringsservern kommer att validera token och utfärda ett nytt.

Tokenutfärdare och tokenutbytestjänst

I tokenutbytesflödet är "Auth Server" nu två deltagare:

  1. Tokenutfärdare: utfärdar ämnestoken till klientapplikationen.
  2. Tokenutbytestjänst: validerar ämnestoken och utfärdar ett nytt token till klientapplikationen.

Tokenutbytestjänsten är samma som "Auth Server" i auktoriseringskodflödet, och tokenutfärdaren kan vara en tredje parts identitetsleverantör, eller uppdelad från "Auth Server" som en dedikerad tjänst.

När ska tokenutbyte användas?

Tokenutbytesflöde kan utföras utan användarinteraktion, detta är användbart i följande scenarier:

  • Förklädning: Tillåta tjänster (t.ex. backend-mikrotjänster) eller adminanvändare att utföra åtgärder å en användares vägnar utan att exponera fulla användaruppgifter.
  • Automation: Tillåta betrodda tjänster att utföra åtgärder automatiskt utan manuell inblandning, eller utföra automatiserade tester.
  • Integration med andra IdP:er: Översätta token över olika identitetssystem för att upprätthålla en sömlös användarupplevelse och hantera behörigheter effektivt, ett vanligt scenario är att översätta ett SSO-token till ett token för en nedströms tjänst.
  • Migrering: Migrera token från en auktoriseringsserver till en annan, till exempel från ett äldre system till ett modernt OAuth/OIDC-kompatibelt system.

Tokenutbytesprocess

Byte av ett nytt åtkomsttoken är det vanligaste användningsfallet, vi tar detta som ett exempel. Inte begränsat till åtkomsttoken, kan tokenutbyte även användas för att utfärda andra typer av token som uppfriskningstoken, ID-token, etc.

Klientapplikation

För att utföra tokenutbyte krävs en registrerad klientapplikation med auktoriseringsservern.

Och klientapplikationen måste ha ett subject_token innan den initierar tokenutbytesflödet, detta token beviljas vanligtvis av auktoriseringsservern eller den betrodda tredje parts identitetsleverantören. Genom att ha detta token kan klientapplikationen nu vara "betrodd" att byta token utan behov av användarens inloggningsuppgifter och interaktion.

Tokenutbytesbegäran

Klienten skickar en begäran till auktoriseringsserverns token-endpoint för att byta ett befintligt token. Detta inkluderar subject_token (token som byts) och, valfritt, den önskade målpubliken, räckvidden och tokentypen.

  1. grant_type: KRAV. Värdet på denna parameter måste vara urn:ietf:params:oauth:grant-type:token-exchange vilket indikerar att ett tokenutbyte utförs.
  2. subject_token: KRAV. Användarens PAT.
  3. subject_token_type: KRAV. Typen av säkerhetstoken som tillhandahålls i subject_token-parametern. Ett vanligt värde för denna parameter är urn:ietf:params:oauth:token-type:access_token, men det kan variera beroende på token som byts.
  4. resource: VALFRI. Resursindikatorn, hjälper att specificera målresursen för åtkomsttokenet.
  5. audience: VALFRI. Målgruppen för åtkomsttokenet, som indikerar de avsedda mottagarna av tokenet, auktoriseringsservern kan använda värdet av resource om audience inte är specificerat.
  6. scope: VALFRI. De begärda räckvidderna.

Begäran behöver också inkludera klientinformationen, vilken kan kodas som en Basic Auth-header eller skickas som formulärdata.

Här är ett exempelförfrågan:

Tokenutbyte i Logto

Logto stöder tokenutbyte direkt, inklusive förklädning och personliga åtkomsttoken.