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.
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:
- Tokenutfärdare: utfärdar ämnestoken till klientapplikationen.
- 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.
grant_type
: KRAV. Värdet på denna parameter måste varaurn:ietf:params:oauth:grant-type:token-exchange
vilket indikerar att ett tokenutbyte utförs.subject_token
: KRAV. Användarens PAT.subject_token_type
: KRAV. Typen av säkerhetstoken som tillhandahålls isubject_token
-parametern. Ett vanligt värde för denna parameter ärurn:ietf:params:oauth:token-type:access_token
, men det kan variera beroende på token som byts.resource
: VALFRI. Resursindikatorn, hjälper att specificera målresursen för åtkomsttokenet.audience
: VALFRI. Målgruppen för åtkomsttokenet, som indikerar de avsedda mottagarna av tokenet, auktoriseringsservern kan använda värdet avresource
omaudience
inte är specificerat.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.