Verständnis von Zugriffstoken, Aktualisierungstoken und ID-Token im OpenID Connect (OIDC) Protokoll
Das OpenID Connect (OIDC) Protokoll hat sich als weit verbreiteter Standard für Identitätsmanagement etabliert. Aber verstehst du wirklich die Rollen und Attribute dieser Token?
OIDC, OAuth 2.0 und Tokens
Das OpenID Connect Protokoll, auch bekannt als OIDC, hat sich als weit verbreiteter Standard etabliert, um einen grundlegenden Rahmen für das Identitätsmanagement bereitzustellen. Es ist eine Authentifizierungsschicht, die auf dem bekannten OAuth 2.0 Protokoll aufgebaut ist. Während OAuth 2.0 lediglich für die Ressourcenautorisierung gedacht ist, standardisiert und stärkt OIDC die Clientauthentifizierung mit Hilfe des neu eingeführten ID-Tokens.
Moment mal... Du hast vielleicht schon von Zugriffstoken und Aktualisierungstoken in der OAuth-Ära gehört, und jetzt kommt das neue Konzept in OIDC? Verstehst du wirklich die Unterschiede zwischen diesen Token?
Was sind die Zugriffstoken, Aktualisierungstoken und ein ID-Token in OIDC?
Lass uns mit einem praktischen Szenario beginnen.
Stell dir vor, du entwickelst eine typische Client-Server-Anwendung, und sie kommunizieren miteinander über RESTful APIs. Du möchtest die meisten deiner APIs privat halten und nur autorisierte Clients darauf zugreifen lassen. Du brauchst einen Mechanismus, um den Client zu authentifizieren und die API-Anfragen an deinen Server zu autorisieren.
Idealerweise sollten deine RESTful APIs zustandslos sein, was bedeutet, dass der Server keine Client-Sitzungsinformationen speichern sollte. Wann immer eine gültige Anfrage eingeht, sollte der Server einfach mit den angeforderten Daten antworten. Hier kommen Token ins Spiel. Welche Art von Token solltest du in einem solchen Fall verwenden?
Zugriffstoken werden verwendet, um deine APIs zu schützen
In OAuth 2.0 und OIDC wird jede geschützte API als Ressource behandelt. Das Zugriffstoken ist genau das Token, das der Client an den Server überträgt, wenn er eine API-Ressource anfordert, typischerweise über den Anforderungsheader und im JWT-Format.
Auf der Serverseite muss der Server bei jeder eingehenden Anfrage nur überprüfen, ob die Anfrage ein gültiges Zugriffstoken trägt. Der Validierungsprozess umfasst in der Regel das Dekodieren des JWT-Tokens, das Überprüfen der Signatur und der Ablaufzeit sowie des Scope-Claims, um sicherzustellen, dass der Client die erforderlichen Berechtigungen hat.
Du könntest dich jedoch fragen: Wenn meine Client-Anwendung ein gültiges Zugriffstoken nach einer erfolgreichen Anmeldung haben kann und das Zugriffstoken verwenden kann, um Server-APIs anzufordern, ist das nicht ausreichend? Warum brauche ich die anderen Token?
In der Tat eine berechtigte Frage, und lass uns das Schritt für Schritt erklären.
Warum brauchen wir Aktualisierungstoken?
Obwohl Zugriffstoken technisch die Mindestanforderungen erfüllen, damit das System funktioniert, ist aufgrund von Sicherheitsbedenken die Gültigkeit der Zugriffstoken in der Regel sehr kurz (typischerweise eine Stunde). Stell dir vor, wir hätten nur Zugriffstoken, die Endbenutzer müssten sich jedes Mal neu authentifizieren, wenn das Zugriffstoken abläuft. Für moderne Single-Page-Webanwendungen (SPAs) und insbesondere mobile Anwendungen ist das häufige Ausloggen eine ziemlich schmerzhafte Benutzererfahrung, auch wenn wir nur versuchen, ihre Benutzersicherheit zu schützen.
Daher brauchen wir eine Balance zwischen Token-Sicherheit und Benutzerfreundlichkeit. Deshalb werden Aktualisierungstoken eingeführt.
Warum können Aktualisierungstoken eine längere Lebensdauer haben?
Zugriffstoken werden verwendet, um API-Ressourcen zuzugreifen, daher hilft ihre kurzlebige Natur, das Risiko einer Leckage oder Kompromittierung zu verringern. Andererseits werden Aktualisierungstoken nur verwendet, um neue Zugriffstoken zu erhalten, sie werden nicht so oft verwendet wie Zugriffstoken und das Risiko einer Gefährdung ist geringer. Daher wird eine längere Gültigkeitsdauer für Aktualisierungstoken als akzeptabel angesehen.
Sicherstellung der Sicherheit von Aktualisierungstoken
Da das Aktualisierungstoken ebenfalls auf der Clientseite gespeichert ist, ist die Sicherstellung ihrer Nichtkompromittierung herausfordernd, insbesondere für öffentliche Clients wie Single-Page-Webanwendungen (SPA) und mobile Apps.
In Logto haben Aktualisierungstoken standardmäßig einen automatischen Rotationsmechanismus aktiviert, was bedeutet, dass der Autorisierungsserver ein neues Aktualisierungstoken ausstellt, sobald es die Kriterien erfüllt:
- Single-Page-Anwendungen: Als nicht-geberbeschränkte Clients anerkannt, erfordern diese Apps die Aktualisierungstoken-Rotation. Die Lebensdauer (TTL) des Aktualisierungstokens kann nicht angegeben werden.
- Native Apps und traditionelle Web-Apps: Die Rotation des Aktualisierungstokens ist von Haus aus aktiviert und erneuert sich automatisch bei Erreichen von 70 % seiner TTL. Erfahre mehr
Während du weiterhin die Möglichkeit hast, die Rotation des Aktualisierungstokens auf der Anwendungsdetailseite in der Verwaltungskonsole zu deaktivieren, wird dringend empfohlen, diese Schutzmaßnahme beizubehalten.
Was ist ein ID-Token und warum ist es wichtig?
Das ID-Token ist eine einzigartige Funktion von OIDC, die Identitätsinformationen über den authentifizierten Benutzer bereitstellt.
Während Zugriffstoken verwendet werden, um auf geschützte Ressourcen zuzugreifen, und Aktualisierungstoken verwendet werden, um neue Zugriffstoken zu erhalten, werden ID-Token typischerweise verwendet, um Benutzerinformationen auf der Clientseite zwischenzuspeichern, um die Notwendigkeit zusätzlicher Anfragen an den Autorisierungsserver für Benutzerdaten zu verringern. In den meisten Fällen kann man sogar sagen, dass das Vorhandensein des ID-Tokens gleichbedeutend mit der Authentifizierung des Benutzers ist.
Best Practices für den Umgang mit Tokens
- Verwende HTTPS: Verwende immer HTTPS, um die Kommunikation zwischen dem Client und dem Autorisierungsserver zu sichern. Dies verhindert, dass unbefugte Parteien Token abfangen und stehlen.
- Setze eine angemessene Token-Ablaufzeit: Zugriffstoken sollten eine kurze Lebensdauer haben, um das Risiko einer Gefährdung zu minimieren. Aktualisierungstoken können eine längere Gültigkeitsdauer haben.
- Aktiviere die Rotation von Aktualisierungstoken: Implementiere die Rotation von Aktualisierungstoken, um das Risiko eines Aktualisierungstoken-Lecks zu verringern.
- Verwende fein abgestufte Zugriffskontrollen: Verwende fein abgestufte Scopes, um die Berechtigungen von Zugriffstoken zu begrenzen. Fordere nur die für die Clientanwendung erforderlichen Berechtigungen an. Vermeide es, "all" oder "admin"-Scopes zu verwenden, um die meisten Berechtigungsprüfungen zu umgehen, es sei denn, es ist unbedingt erforderlich.
Zusammenfassung: Wichtige Unterschiede von Zugriffstoken, Aktualisierungstoken und ID-Token in OIDC
Im OIDC-Protokoll arbeiten Aktualisierungstoken, Zugriffstoken und ID-Token zusammen, um eine sichere und nahtlose Benutzerauthentifizierung zu bieten.
- Zugriffstoken bieten die Autorisierung für den Zugriff auf geschützte Ressourcen.
- Aktualisierungstoken eliminieren Benutzereingriffe für neue Zugriffstoken.
- ID-Token bieten zwischengespeicherte Benutzerinformationen auf dem Client, was die Leistung verbessert.
Das Verständnis der Rolle und Bedeutung dieser Token ist entscheidend für Entwickler, die OIDC-Authentifizierung in ihren Anwendungen implementieren.