Verständnis von Zugriffstoken, Aktualisierungstoken und ID-Tokens im OpenID Connect (OIDC) Protokoll
Das OpenID Connect (OIDC) Protokoll hat sich als weit verbreiteter Standard für Identitätsmanagement etabliert. Aber verstehen Sie wirklich die Rollen und Attribute dieser Tokens?
OIDC, OAuth 2.0 und Tokens
Das OpenID Connect Protokoll, auch als OIDC bekannt, hat sich als weit verbreiteter Standard zur Bereitstellung eines grundlegenden Rahmens für das Identitätsmanagement etabliert. Es ist eine Authentifizierungsschicht, die auf dem bekannten OAuth 2.0-Protokoll aufbaut. Während OAuth 2.0 lediglich zur Ressourcengenehmigung dient, ist OIDC das Protokoll, das die Client-Authentifizierung standardisiert und stärkt, mit Hilfe des neu eingeführten ID-Tokens.
Moment mal... Sie haben vielleicht von Zugriffstokens und Aktualisierungstokens in der OAuth-Ära gehört, und jetzt kommt das neue Konzept in OIDC? Verstehen Sie wirklich die Unterschiede zwischen diesen Tokens?
Was sind Zugriffstokens, Aktualisierungstokens und ein ID-Tokens in OIDC?
Beginnen wir mit einem praktischen Szenario.
Stellen Sie sich vor, Sie entwickeln eine typische Client-Server-Anwendung, und diese kommunizieren über RESTful-APIs miteinander. Sie möchten die meisten Ihrer APIs privat halten und nur autorisierten Clients den Zugriff erlauben. Sie benötigen einen Mechanismus, um den Client zu authentifizieren und die API-Anfragen an Ihren Server zu autorisieren.
Idealerweise sollten Ihre RESTful-APIs zustandslos sein, was bedeutet, dass der Server keine Client-Sitzungsinformationen speichern sollte. Jedes Mal, wenn eine gültige Anfrage eingeht, sollte der Server einfach mit den angeforderten Daten antworten. Hier kommen Tokens ins Spiel. Also, welche Art von Token sollten Sie in einem solchen Fall verwenden?
Zugriffstokens werden zum Schutz Ihrer APIs verwendet
In OAuth 2.0 und OIDC wird jede geschützte API als Ressource behandelt. Das Zugriffstoken ist das eigentliche Token, das der Client an den Server überträgt, wenn er eine API-Ressource anfordert, typischerweise über den Anfrage-Header und im JWT-Format.
Auf der Serverseite muss der Server bei jeder eingehenden Anfrage nur validieren, ob die Anfrage ein gültiges Zugriffstoken trägt. Der Validierungsprozess umfasst normalerweise das Dekodieren des JWT-Tokens, die Überprüfung der Signatur und der Ablaufzeit sowie des Berechtigungsumfangs, um sicherzustellen, dass der Client die erforderlichen Berechtigungen besitzt.
Allerdings könnten Sie sich fragen: Wenn meine Client-Anwendung ein gültiges Zugriffstoken nach einer erfolgreichen Anmeldung haben kann und das Zugriffstoken zum Anfordern von Server-APIs verwendet, ist das nicht ausreichend? Warum brauche ich die anderen Tokens?
In der Tat eine berechtigte Frage, und lassen Sie uns das Schritt für Schritt erklären.
Warum brauchen wir Aktualisierungstokens?
Während technisch gesehen Zugriffstokens die Mindestanforderungen erfüllen, um das System funktionsfähig zu machen, sind die Gültigkeitsdauer von Zugriffstokens aus Sicherheitsgründen normalerweise sehr kurz (typischerweise eine Stunde). Stellen Sie sich also vor, wir hätten nur Zugriffstokens, müssten sich die Endbenutzer jedes Mal neu authentifizieren, wenn das Zugriffstoken abläuft. Für moderne Single-Page-Webanwendungen (SPA) und insbesondere mobile Anwendungen ist das häufige Ausloggen eine ziemlich schmerzhafte Benutzererfahrung, auch wenn wir nur versuchen, deren Sicherheit zu schützen.
Deshalb brauchen wir ein Gleichgewicht zwischen Token-Sicherheit und Benutzerfreundlichkeit, und genau hier kommen die Aktualisierungstokens ins Spiel.
Warum können Aktualisierungstokens eine längere Lebensdauer haben?
Zugriffstokens werden verwendet, um auf API-Ressourcen zuzugreifen, sodass ihre kurzlebige Natur hilft, das Risiko zu mindern, dass sie offengelegt oder kompromittiert werden. Andererseits werden Aktualisierungstokens nur verwendet, um neue Zugriffstokens auszutauschen, sie werden nicht so häufig wie Zugriffstokens verwendet und daher wird das Risiko der Exposition reduziert. Daher ist es als akzeptabel angesehen, eine längere Gültigkeitsdauer für Aktualisierungstokens zu haben.
Sicherstellung der Sicherheit von Aktualisierungstokens
Da das Aktualisierungstoken auch auf der Client-Seite gespeichert wird, ist es eine Herausforderung, deren Nichtkompromittierung sicherzustellen, insbesondere bei öffentlichen Clients wie Single-Page-Webanwendungen (SPA) und mobilen Apps.
In Logto haben Aktualisierungstokens einen automatischen Rotationsmechanismus, der standardmäßig aktiviert ist, was bedeutet, dass der Autorisierungsserver ein neues Aktualisierungstoken ausstellt, sobald es die Kriterien erfüllt:
- Single-Page-Anwendungen: Als nicht sender-gebundene Clients anerkannt, erfordern diese Apps die Rotation von Aktualisierungstokens. Die Lebenszeit des Aktualisierungstokens (TTL) kann nicht festgelegt werden.
- Native Apps und traditionelle Webanwendungen: Aktualisierungstoken-Rotation ist inhärent aktiviert und wird automatisch erneuert, wenn 70% seiner TTL erreicht sind. Erfahren Sie mehr über Aktualisierungstoken-Rotation in Logto
Zwar haben Sie die Möglichkeit, die Rotation von Aktualisierungstokens auf der Seite mit den Anwendungsdetails in der Admin-Konsole zu deaktivieren, aber es wird dringend empfohlen, diese Sicherheitsmaß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 Zugriffstokens zum Zugriff auf geschützte Ressourcen verwendet werden und Aktualisierungstokens verwendet werden, um neue Zugriffstokens zu erhalten, werden ID-Tokens typischerweise verwendet, um Benutzerinformationen auf der Client-Seite zu cachen, wodurch die Notwendigkeit reduziert wird, zusätzliche Anfragen an den Autorisierungsserver für Benutzerdaten zu stellen. In den meisten Fällen ist es sogar sicher zu sagen, dass das Vorhandensein des ID-Tokens dem authentifizierten Benutzer entspricht.
Best Practices zum Umgang mit Tokens
- Verwenden Sie HTTPS: Verwenden Sie immer HTTPS, um die Kommunikation zwischen dem Client und dem Autorisierungsserver zu sichern. Dies verhindert, dass unautorisierte Parteien Tokens abfangen und stehlen.
- Setzen Sie ein angemessenes Token-Ablaufdatum: Zugriffstokens sollten eine kurze Lebensdauer haben, um das Risiko der Exposition zu minimieren. Aktualisierungstokens können eine längere Gültigkeitsdauer haben.
- Aktualisierungstoken-Rotation aktivieren: Implementieren Sie die Rotation von Aktualisierungstokens, um das Risiko eines Lecks von Aktualisierungstokens zu verringern.
- Fein abgestimmte Zugriffskontrolle verwenden: Verwenden Sie fein abgestimmte Berechtigungsumfänge, um die Berechtigungen von Zugriffstokens zu beschränken. Fordern Sie nur die Berechtigungen an, die für die Client-Anwendung erforderlich sind. Vermeiden Sie die Verwendung von "all" oder "admin" Berechtigungen, um die meisten Berechtigungsprüfungen zu umgehen, es sei denn, dies ist absolut notwendig.
Zusammenfassung: Wesentliche Unterschiede von Zugriffstokens, Aktualisierungstokens und ID-Tokens in OIDC
Im OIDC-Protokoll arbeiten Zugriffstokens, Aktualisierungstokens und ID-Tokens zusammen, um sichere und nahtlose Benutzer-Authentifizierung zu bieten.
- Zugriffstokens bieten Autorisierung zum Zugriff auf geschützte Ressourcen.
- Aktualisierungstokens eliminieren den Eingriff des Benutzers beim Erhalt neuer Zugriffstokens.
- ID-Tokens bieten gecachte Benutzerinformationen auf dem Client, was die Leistung verbessert.
Das Verständnis der Rolle und Bedeutung dieser Tokens ist entscheidend für Entwickler, die OIDC-Authentifizierung in ihren Anwendungen implementieren.