Ich musste mich aus eigenen Gründen damit befassen und es aufschreiben, also werde ich hier posten, was ich gelernt habe ...
Zunächst beantworte ich die Frage mit dem Risiko, das Offensichtliche zu sagen: Dem ID-Token kann nicht vertraut werden, und sein Inhalt muss ignoriert werden, wenn die aktuelle Zeit größer als die abgelaufene Zeit ist. Die Antwort des Fragestellers besagt, dass das ID-Token nach der ersten Authentifizierung des Benutzers nicht mehr verwendet wird. Da das ID-Token jedoch vom Identitätsanbieter signiert ist , kann es durchaus jederzeit nützlich sein , anderen Diensten, die eine App möglicherweise verwendet, zuverlässig zu bestimmen, wer der Benutzer ist. Die Verwendung einer einfachen Benutzer-ID oder E-Mail-Adresse ist nicht zuverlässig da es leicht gefälscht werden kann (jeder kann eine E-Mail-Adresse oder Benutzer-ID senden), aber da ein OIDC-ID-Token vom Autorisierungsserver signiert ist (was normalerweise auch den Vorteil hat, ein Dritter zu sein), kann es nicht gefälscht werden und ist ein viel zuverlässigerer Authentifizierungsmechanismus.
Beispielsweise möchte eine mobile App möglicherweise einem Backend-Dienst mitteilen können, wer der Benutzer ist, der die App verwendet, und dies muss möglicherweise nach dem kurzen Zeitraum nach der Erstauthentifizierung erfolgen. Zu diesem Zeitpunkt ist das ID-Token abgelaufen. und kann daher nicht verwendet werden, um den Benutzer zuverlässig zu authentifizieren.
Können Sie daher genau wie das Zugriffstoken (das für die Autorisierung verwendet wird - Angabe der Berechtigungen des Benutzers) aktualisiert werden können, das ID-Token (für die Authentifizierung verwendet - Angabe, wer der Benutzer ist) aktualisieren ? Gemäß der OIDC-Spezifikation ist die Antwort nicht offensichtlich. In OIDC / OAuth gibt es drei "Flows" zum Abrufen von Token: den Authorization Code-Flow, den impliziten Flow und den Hybrid-Flow (den ich unten überspringen werde, da es sich um eine Variante der beiden anderen handelt).
Für den impliziten Ablauf in OIDC / OAuth fordern Sie das ID-Token am Autorisierungsendpunkt an, indem Sie den Benutzer im Browser zum Autorisierungsendpunkt umleiten und id_token
als Wert des response_type
Anforderungsparameters angeben. Eine implizite Flow Successful Authentication-Antwort ist erforderlich, um die zu enthalten id_token
.
Für den Authentifizierungscode-Fluss gibt der Client code
den Wert des response_type
Anforderungsparameters an, wenn der Benutzer zum Autorisierungsendpunkt umgeleitet wird. Eine erfolgreiche Antwort enthält einen Autorisierungscode. Der Client-Client sendet eine Anforderung an den Token-Endpunkt mit dem Autorisierungscode. Gemäß OIDC Core-Abschnitt 3.1.3.3 Erfolgreiche Token- Antwort MUSS die Antwort ein ID-Token enthalten .
Auf diese Weise erhalten Sie für beide Flows zunächst das ID-Token, aber wie aktualisieren Sie es? OIDC Abschnitt 12: Verwenden von Aktualisierungstoken enthält die folgende Anweisung zur Antwort auf Aktualisierungstoken :
Nach erfolgreicher Validierung des Aktualisierungstokens ist der Antworttext die Tokenantwort von Abschnitt 3.1.3.3, außer dass er möglicherweise kein id_token enthält .
Es enthält möglicherweise kein ID-Token. Da keine Möglichkeit angegeben ist, das ID-Token einzuschließen, müssen Sie davon ausgehen, dass die Antwort das ID-Token nicht enthält. Technisch gesehen gibt es also keine spezifizierte Möglichkeit, ein ID-Token mithilfe eines Aktualisierungstokens zu "aktualisieren". Daher besteht die einzige Möglichkeit, ein neues ID-Token zu erhalten, darin, den Benutzer erneut zu autorisieren / zu authentifizieren, indem der Benutzer zum Autorisierungsendpunkt umgeleitet und der implizite Fluss oder Authentifizierungscodefluss wie oben beschrieben gestartet wird. Die OIDC-Spezifikation fügt prompt
der Autorisierungsanforderung einen Anforderungsparameter hinzu, damit der Client anfordern kann, dass der Autorisierungsserver den Benutzer nicht mit einer Benutzeroberfläche auffordert, die Umleitung jedoch noch erfolgen muss.