Förstå åtkomsttoken, uppfriskningstoken och ID-token i OpenID Connect (OIDC) protokoll
OpenID Connect (OIDC) protokollet har blivit en allmänt antagen standard för identitetshantering. Men förstår du verkligen rollerna och attributen hos dessa token?
OIDC, OAuth 2.0 och token
OpenID Connect Protokollet, även känt som OIDC, har blivit en allmänt antagen standard för att tillhandahålla en grundläggande ram för identitetshantering. Det är ett autentiseringslager byggt ovanpå det välkända OAuth 2.0 protokollet. Medan OAuth 2.0 endast är för resursauktorisering, är OIDC protokollet som standardiserar och stärker klientautentisering, med hjälp av den nyintroducerade ID-token.
Vänta... Du kanske har hört talas om åtkomsttoken och uppfriskningstoken i OAuth-eran, och nu kommer ett nytt koncept i OIDC? Förstår du verkligen skillnaderna mellan dessa token?
Vad är åtkomsttoken, uppfriskningstoken och ID-token i OIDC?
Låt oss börja med ett praktiskt scenario.
Föreställ dig att du utvecklar en typisk klient-serverapplikation, och de kommunicerar med varandra genom RESTful API:er. Du vill hålla de flesta av dina API:er privata, vilket bara tillåter auktoriserade klienter att få tillgång. Du behöver en mekanism för att autentisera klienten och auktorisera API-förfrågningar till din server.
Idealiskt sett borde dina RESTful API:er vara tillståndslösa, vilket betyder att servern inte ska lagra någon klientsession information. Varje gång en giltig begäran kommer in, ska servern bara svara med den begärda datan. Det är här token kommer in i bilden. Så, vilken typ av token ska du använda i ett sådant fall?
Åtkomsttoken används för att skydda dina API:er
I OAuth 2.0 och OIDC behandlas varje skyddat API som en resurs. Åtkomsttoken är den token som klienten överför till servern när den begär en API-resurs, vanligtvis via begäranshuvudet och i JWT format.
På serversidan, varje gång en begäran kommer in, behöver servern endast validera om den inkommande begäran bär en giltig åtkomsttoken. Valideringsprocessen innefattar oftast avkodning av JWT-token, verifiering av signatur och förfallotid, såväl som nekranscope för att säkerställa att klienten har nödvändiga behörigheter.
Du kanske undrar: Om min klientapplikation kan ha en giltig åtkomsttoken efter en lyckad inloggning, och använda åtkomsttoken för att begära serverns API:er, räcker inte det? Varför behöver jag de andra token?
Verkligen en berättigad fråga, och låt oss förklara det steg för steg.
Varför behöver vi uppfriskningstoken?
Även om tekniskt sett åtkomsttoken uppfyller minimikraven för att få systemet att fungera, på grund av säkerhetsbekymmer har åtkomsttoken vanligtvis mycket kort giltighet (vanligtvis en timme). Så föreställ dig om vi bara har åtkomsttoken, slutanvändarna måste autentisera om sig varje gång åtkomsttoken går ut. För moderna enskilda sidors webbapplikationer (SPA) och särskilt mobila applikationer är det en ganska smärtsam användarupplevelse att ofta logga ut, även om vi bara försöker skydda deras användarsäkerhet.
Därför behöver vi en balans mellan tokensäkerhet och användarvänlighet. Det är därför uppfriskningstoken införs.
Varför kan uppfriskningstoken ha längre livslängd?
Åtkomsttoken används för att få tillgång till API-resurser, så deras kortlivade natur hjälper till att minska risken för att de läcker eller komprometteras. Å andra sidan, eftersom uppfriskningstoken endast används för att bytas mot nya åtkomsttoken, används de inte lika ofta som åtkomsttoken och därmed minskas risken för exponering. Därför anses det vara acceptabelt med längre giltighetstid för uppfriskningstoken.
Säkerställa uppfriskningstokens säkerhet
Eftersom uppfriskningstoken också lagras på klientsidan, är det en utmaning att säkerställa att de inte komprometteras, särskilt för publika klienter som enskilda sidors webbapplikationer (SPA) och mobila appar.
I Logto har uppfriskningstoken en automatisk rotationsmekanism aktiverad som standard, vilket betyder att auktoriseringsservern utfärdar en ny uppfriskningstoken när den möter kriterierna:
- Enkelsidiga applikationer: Känns igen som icke-sändarbegränsade klienter, dessa appar kräver uppfriskningstoken-rotation. Uppfriskningstokens time-to-live (TTL) kan inte specificeras.
- Inhemska appar och traditionella webbappar: Rotation av uppfriskningstoken är inbyggt aktiverad, automatiskt förnyande vid uppnåendet av 70% av dess TTL. Läs mer
Även om du fortfarande har möjligheten att inaktivera uppfriskningstokens rotation på applikationens detaljsida i admin-konsolen, är det starkt rekommenderat att behålla denna skyddsåtgärd.
Vad är en ID-token och varför är den viktig?
ID-token är en unik funktion i OIDC som tillhandahåller identitetsinformation om den autentiserade användaren.
Medan åtkomsttoken används för att få tillgång till skyddade resurser och uppfriskningstoken används för att erhålla nya åtkomsttoken, används ID-token vanligtvis för att cacha användarinformation på klientsidan, vilket minskar behovet av att göra ytterligare förfrågningar till auktoriseringsservern för användardata. I de flesta fall är det faktiskt säkert att säga att ha ID-token är lika med att användaren är autentiserad.
Bästa metoderna för att hantera token
- Använd HTTPS: Använd alltid HTTPS för att säkra kommunikationen mellan klienten och auktoriseringsservern. Detta förhindrar obehöriga parter från att avlyssna och stjäla token.
- Ställ in korrekt sintoken utgångstid: Åtkomsttoken bör ha kort livslängd för att minimera risken för exponering. Uppfriskningstoken kan ha en längre giltighetstid.
- Aktivera uppfriskningstoken-rotation: Implementera uppfriskningstoken-rotation för att minska risken för uppfriskningstoken-läckage.
- Använd detaljerad åtkomstkontroll: Använd detaljerade scopes för att begränsa åtkomsttokenens behörigheter. Begär endast de behörigheter som är nödvändiga för klientapplikationen. Undvik att använda "all" eller "admin" scopes för att kringgå de flesta behörighetskontroller om det inte är absolut nödvändigt.
Sammanfattning: Nyckelskillnader mellan åtkomsttoken, uppfriskningstoken och ID-token i OIDC
I OIDC-protokollet arbetar uppfriskningstoken, åtkomsttoken och ID-token tillsammans för att erbjuda säker och smidig användarautentisering.
- Åtkomsttoken ger behörighet att få tillgång till skyddade resurser.
- Uppfriskningstoken eliminerar användarinblandning för nya åtkomsttoken.
- ID-token ger cachad användarinformation på klienten, förbättrar prestanda.
Att förstå rollen och betydelsen av dessa token är avgörande för utvecklare som implementerar OIDC-autentisering i sina applikationer.