Token-vaihto on OAuth-laajennus, jonka avulla luotetut asiakkaat voivat hankkia uusia tokeneita ilman käyttäjän vuorovaikutusta. Se on hyödyllinen impersonaatioon, automaatioon, järjestelmien väliseen integrointiin ja tokenien migraatioon eri skenaarioissa.
Token-vaihto esiteltiin RFC 8693 -julkaisussa, ja se on OAuth-laajennus, joka sallii luotettujen asiakkaiden vaihtaa olemassa olevan tokenin uuteen, eri ominaisuuksilla tai rajoilla. Tämä mekanismi on erityisesti hyödyllinen palvelulle, sovellukselle tai loppukäyttäjälle, joka haluaa saada normaalin OAuth-pääsytokenin valmiiksi valtuutetun tokenin kautta ilman tarvetta käydä läpi koko OAuth-prosessia.
Suurin ero on, että valtuutuskoodiprosessissa asiakassovellus ohjaa käyttäjän valtuutuspalvelimelle hankkimaan pääsytokenin. Tokenin vaihdossa asiakassovellus voi vaihtaa tokenin valtuutuspalvelimen kanssa ilman, että käyttäjää tarvitaan ohjaamaan uudelleen.
Tämä johtuu siitä, että valtuutuskoodiprosessissa asiakassovellus ei ole "luotettu" ja sen täytyy tietää käyttäjän tunnistetiedot saadakseen pääsytokenin. Tokenin vaihdossa asiakassovelluksen on jo hankittava token käyttäjältä, ja valtuutuspalvelin vahvistaa tokenin ja myöntää uuden.
Tokenin vaihtoprosessissa "Auth Server" on nyt kaksi osallistujaa:
Tokenin myöntäjä: myöntää aihekentän tokenin asiakassovellukselle.
Tokenin vaihtopalvelu: vahvistaa aihekentän tokenin ja myöntää uuden tokenin asiakassovellukselle.
Tokenin vaihtopalvelu on sama kuin "Auth Server" valtuutuskoodiprosessissa, ja tokenin myöntäjä voi olla kolmannen osapuolen identiteetin tarjoaja tai erotettu "Auth Serverista" erillisenä palveluna.
Tokenin vaihtoprosessi voidaan suorittaa ilman käyttäjän vuorovaikutusta, mikä on hyödyllistä seuraavissa tilanteissa:
Impersonaatio: Sallii palveluiden (esim. taustamikropalvelut) tai hallinnon käyttäjien suorittaa toimintoja käyttäjän puolesta paljastamatta koko käyttäjän tunnistetietoja.
Automaatio: Sallii luotettujen palveluiden suorittaa toimenpiteitä automaattisesti ilman manuaalista väliintuloa tai tehdä automatisoitua testausta.
Integraatio muiden identiteetin tarjoajien kanssa: Kääntää tokeneita eri identiteettijärjestelmien välillä ylläpitämään saumaton käyttäjäkokemus ja hallitsemaan oikeuksia tehokkaasti, yksi yleinen skenaario on kääntää SSO-token tokeniksi alavirran palvelulle.
Migraatio: Siirtää tokeneita yhdestä valtuutuspalvelimesta toiseen, esimerkiksi perintöjärjestelmästä moderniin OAuth/OIDC-yhteensopivaan järjestelmään.
Uuden pääsytokenin hankkiminen on yleisin tapaus, otetaan tämä esimerkkinä. Tokenin vaihtoa ei ole rajoitettu vain pääsytokeneihin, vaan sitä voidaan käyttää myös muiden token-tyyppien, kuten uusimistokenin, ID-tokenin, jne., myöntämiseen.
Tokenin vaihdon suorittamiseen tarvitaan rekisteröity asiakassovellus valtuutuspalvelimen kanssa.
Ja asiakassovelluksella pitää olla subject_token ennen tokenin vaihtoprosessin aloittamista, tämä token myönnetään yleensä valtuutuspalvelimen tai luotetun kolmannen osapuolen identiteetin tarjoajan toimesta. Kun tämä token on käytössä, asiakassovellus voi nyt olla "luotettu" vaihtamaan tokeneita ilman käyttäjän tunnistetietoja ja vuorovaikutusta.
Asiakas lähettää pyynnön valtuutuspalvelimen tokenin päätepisteeseen vaihtaakseen olemassa olevan tokenin. Tämä sisältää subject_token (vaihdettava token) ja halutessaan kohdeyleisön, reunaehdon ja token-tyypin.
grant_type: PAKOLLINEN. Tämän parametrin arvo on oltava urn:ietf:params:oauth:grant-type:token-exchange, mikä osoittaa, että tokenin vaihto suoritetaan.
subject_token: PAKOLLINEN. Käyttäjän PAT.
subject_token_type: PAKOLLINEN. Tämän parametrin tyyppi subject_token -parametrissa. Yleinen arvo on urn:ietf:params:oauth:token-type:access_token, mutta se voi vaihdella, riippuen vaihdettavasta tokenista.
resource: VALINNAINEN. Resurssi-indikaattori, joka auttaa määrittämään pääsytokenin kohderesurssin.
audience: VALINNAINEN. Pääsytokenin yleisö, osoittaa tokenin tarkoitetut vastaanottajat, valtuutuspalvelin voi käyttää resource-arvoa, jos audience ei ole määritelty.
scope: VALINNAINEN. Pyydetyt reunaehdot.
Pyyntö myös sisältää asiakastiedot, jotka voidaan enkoodata Basic Auth -otsikkona tai lähettää lomakedatana.