Inzicht in toegangstokens, vernieuwingstokens en ID-tokens in het OpenID Connect (OIDC) protocol
Het OpenID Connect (OIDC) Protocol is uitgegroeid tot een breed geaccepteerde standaard voor identiteitsbeheer. Maar begrijp je echt de rollen en attributen van deze tokens?
OIDC, OAuth 2.0 en tokens
Het OpenID Connect Protocol, ook wel OIDC genoemd, is uitgegroeid tot een breed geaccepteerde standaard voor het bieden van een fundamenteel raamwerk voor identiteitsbeheer. Het is een authenticatielaag gebouwd bovenop het bekende OAuth 2.0 protocol. Terwijl OAuth 2.0 slechts voor hulpbronautorisatie is, is OIDC het protocol dat clientauthenticatie standaardiseert en versterkt, met behulp van het nieuw geïntroduceerde ID-token.
Wacht... Je hebt misschien gehoord van toegangstokens en vernieuwingstokens in het OAuth-tijdperk, en nu komt er een nieuw concept in OIDC? Begrijp je echt de verschillen tussen deze tokens?
Wat zijn de toegangstokens, vernieuwingstokens en een ID-token in OIDC?
Laten we beginnen met een praktisch scenario.
Stel je voor dat je een typische client-serverapplicatie ontwikkelt, en ze communiceren met elkaar via RESTful API's. Je wilt de meeste van je API's privaat houden en alleen geautoriseerde clients toegang geven. Je hebt een mechanisme nodig om de client te authenticeren en de API-verzoeken naar je server te autoriseren.
Idealiter zouden je RESTful API's stateloos moeten zijn, wat betekent dat de server geen client-sessie-informatie zou moeten opslaan. Wanneer er een geldig verzoek binnenkomt, zou de server gewoon moeten antwoorden met de gevraagde gegevens. Dit is waar tokens in het spel komen. Dus, welk type token zou je in zo’n geval moeten gebruiken?
Toegangstokens worden gebruikt voor het beschermen van je API's
In OAuth 2.0 en OIDC wordt elke beschermde API behandeld als een hulpbron. Het toegangstoken is het token dat de client naar de server overbrengt bij het aanvragen van een API-hulpbron, doorgaans via de aanvraagheader en in JWT formaat.
Aan de serverzijde, wanneer er een verzoek binnenkomt, hoeft de server alleen te controleren of het binnenkomende verzoek een geldig toegangstoken heeft. Het validatieproces omvat meestal het decoderen van het JWT-token, het verifiëren van de handtekening en vervaltijd, evenals de scope-claim om te garanderen dat de client de nodige permissies heeft.
Maar je zou je kunnen afvragen: Als mijn client-applicatie een geldig toegangstoken kan hebben na een succesvolle login, en het toegangstoken kan gebruiken om server-API's aan te vragen, is dat dan niet genoeg? Waarom heb ik de andere tokens nodig?
Inderdaad een terechte vraag, en laten we het stap voor stap uitleggen.
Waarom hebben we vernieuwingstokens nodig?
Hoewel toegangstokens technisch gezien voldoen aan de minimale vereisten om het systeem te laten werken, is vanwege beveiligingszorgen de geldigheid van toegangstokens meestal zeer kort (typisch een uur). Dus stel je voor dat we alleen toegangstokens hebben, dan moeten de eindgebruikers zich elke keer als het toegangstoken verloopt opnieuw authenticeren. Voor moderne single-page webapplicaties (SPA's) en vooral mobiele applicaties is frequent uitloggen een vrij pijnlijke gebruikerservaring, ook al proberen we alleen maar hun gebruikersbeveiliging te beschermen.
Daarom hebben we een balans nodig tussen tokenveiligheid en gebruikersgemak. Daarom worden de vernieuwingstokens geïntroduceerd.
Waarom kan een vernieuwingstoken een langere levensduur hebben?
Toegangstokens worden gebruikt om toegang te krijgen tot API-hulpbronnen, dus hun kortlevende aard helpt het risico van lekkage of compromittering te beperken. Aan de andere kant, omdat vernieuwingstokens alleen worden gebruikt om nieuwe toegangstokens te verkrijgen, worden ze niet zo vaak gebruikt als toegangstokens en is het risico op blootstelling dus kleiner. Daarom wordt een langere geldigheidsperiode als acceptabel beschouwd voor vernieuwingstokens.
Veiligheid van vernieuwingstokens waarborgen
Aangezien de vernieuwingstoken ook aan de clientzijde wordt opgeslagen, is het waarborgen van hun niet-compromittering een uitdaging, vooral voor openbare clients zoals single-page webapplicaties (SPA) en mobiele apps.
In Logto hebben vernieuwingstokens een automatische rotatiemechanisme standaard ingeschakeld, wat betekent dat de autorisatieserver een nieuwe vernieuwingstoken uitgeeft zodra deze aan de criteria voldoet:
- Single-page applicaties: Herkend als niet-zend-beperkte clients, vereisen deze apps rotatie van vernieuwingstoken. De time-to-live (TTL) van het vernieuwingstoken kan niet worden gespecificeerd.
- Native apps en traditionele webapps: Rotatie van vernieuwingstoken is inherent ingeschakeld, met automatische vernieuwing bij het bereiken van 70% van de TTL. Leer meer over rotatie van vernieuwingstoken in Logto
Hoewel je nog steeds de optie hebt om rotatie van vernieuwingstoken uit te schakelen op de pagina met toepassingsdetails in het beheerdersconsole, wordt sterk aanbevolen om deze veiligheidsmaatregel te behouden.
Wat is een ID-token en waarom is het belangrijk?
Het ID-token is een uniek kenmerk van OIDC dat identiteitsinformatie over de geauthenticeerde gebruiker verstrekt.
Terwijl toegangstokens worden gebruikt om toegang te krijgen tot beschermde hulpbronnen en vernieuwingstokens worden gebruikt om nieuwe toegangstokens te verkrijgen, worden de ID-tokens doorgaans gebruikt om gebruikersinformatie aan de clientzijde in cache te plaatsen, waardoor de noodzaak om aanvullende verzoeken naar de autorisatieserver voor gebruikersgegevens te sturen, vermindert. In de meeste gevallen is het zelfs veilig om te zeggen dat het hebben van het ID-token gelijk staat aan de authenticatie van de gebruiker.
Best practices voor het omgaan met tokens
- Gebruik HTTPS: Gebruik altijd HTTPS om de communicatie tussen de client en de autorisatieserver te beveiligen. Dit voorkomt dat ongeautoriseerde partijen tokens onderscheppen en stelen.
- Stel een juiste verstrijktijd voor tokens in: Toegangstokens zouden een korte levensduur moeten hebben om het risico van blootstelling te minimaliseren. Vernieuwingstokens kunnen een langere geldigheidsperiode hebben.
- Schakel rotatie van vernieuwingstoken in: Implementeer rotatie van vernieuwingstoken om het risico van het lekken van vernieuwingstokens te verminderen.
- Gebruik gedetailleerde toegangscontrole: Gebruik gedetailleerde scopes om de permissies van toegangstokens te beperken. Vraag alleen de permissies aan die nodig zijn voor de clientapplicatie. Vermijd het gebruik van "alle" of "admin" scopes om het grootste deel van de permissiecontroles te omzeilen, tenzij het absoluut noodzakelijk is.
Samenvatting: Belangrijke verschillen tussen toegangstokens, vernieuwingstokens en ID-tokens in OIDC
In het OIDC-protocol werken vernieuwingstokens, toegangstokens en ID-tokens samen om veilige en naadloze gebruikersauthenticatie te bieden.
- Toegangstokens bieden toestemming om toegang te krijgen tot beschermde bronnen.
- Vernieuwingstokens elimineren gebruikersinterventie voor nieuwe toegangstokens.
- ID-tokens bieden gecachte gebruikersinformatie aan de client, wat de prestaties verbetert.
Het begrijpen van de rol en betekenis van deze tokens is cruciaal voor ontwikkelaars die OIDC-authenticatie in hun applicaties implementeren.