Wie validiere ich ein OAuth 2.0-Zugriffstoken für einen Ressourcenserver?
147
Wie überprüft dieser Server das Token, wenn ein Client einen Ressourcenserver auffordert, eine geschützte Ressource mit einem OAuth 2.0-Zugriffstoken abzurufen? Das OAuth 2.0-Aktualisierungstokenprotokoll?
Der Server soll in der Lage sein, das zuvor selbst ausgegebene Token zu validieren. In der Regel handelt es sich dabei um eine Datenbanksuche oder eine Krypto (selbstsignierte Token).
Thilo
Aha. Wie wäre es in diesem Fall, wenn sich der Ressourcenbesitzer WS und der Client WS auf unterschiedlichen Geräten befinden?
Ack
5
Sie meinen den Authentifizierungsdienst und den Ressourcendienst? (Der Client / Consumer befindet sich immer auf einem anderen Gerät und kann Token nicht selbst validieren.) In diesem Fall können Sie Aktualisierungstoken verwenden, deren Überprüfung "teuer" ist (nur der Authentifizierungsserver kann dies tun), aber langlebig und Zugriffstoken, die häufig ablaufen und offline überprüft werden können.
Update Nov. 2015: Gemäß Hans Z. unten - dies ist nun tatsächlich als Teil von RFC 7662 definiert .
Ursprüngliche Antwort: Die OAuth 2.0-Spezifikation ( RFC 6749 ) definiert die Interaktion zwischen einem Ressourcenserver (RS) und einem Autorisierungsserver (AS) für die Validierung des Zugriffstokens (AT) nicht klar. Dies hängt wirklich vom Token-Format / der Token-Strategie des AS ab. Einige Token sind in sich geschlossen (wie JSON-Web-Token ), während andere einem Sitzungscookie ähneln können, da sie nur auf Informationen verweisen, die serverseitig auf dem AS gespeichert sind .
Scott T, Gibt es eine Möglichkeit, ein Codebeispiel zur Verwendung der Funktion in Ping Federate anzuzeigen?
JavaHead
2
@JavaHead Auf unserer Entwickler-Website finden Sie weitere Protokolldetails: developer.pingidentity.com/en/resources/… , der PingFederate OAuth Playground wird als eine Reihe von JSPs ausgeliefert, auf die als Quellcode für die Validierung von Token verwiesen werden kann. Es (und andere Open Source-Bibliotheken und Beispiele) können hier heruntergeladen werden: developer.pingidentity.com/de/code.html
Scott T.
Scott, ich suche nach einem Beispiel, das die Gewährung von Clientanmeldeinformationen mit Rest-API demonstriert, die durch einen lokalen Ressourcenserver und PingFederate als Auth-Server geschützt ist. Der lokale Ressourcenserver ruft dann den Validierungsendpunkt auf. Sind Sie auf so etwas gestoßen?
JavaHead
@JavaHead wieder, das ist etwas, für das Sie auf den PingFederate OAuth-Spielplatz verweisen können sollten. Es zeigt sowohl den Client Credentials Grant-Typ als auch die Validierung eines Zugriffstokens durch einen Ressourcenserver.
Scott T.
Im Fall eines JWT-Zugriffstokens würde ich davon ausgehen, dass Sie normalerweise nicht bei jeder eingehenden Anforderung an den RS den AS-Introspektionsendpunkt erreichen möchten. In welchem Fall reicht eine RS-Überprüfung der Tokensignatur und des Gültigkeitsbereichs aus? Oder könnte der RS die Introspektionsantworten des AS für einige Zeit zwischenspeichern?
@gustavodiazjaimes Es wird überhaupt nicht erklärt, wie die Serverseite die zugewiesene Benutzer-ID anhand eines Tokens erkennt.
user2284570
22
Ich verstehe nicht alle Stimmen. Dies scheint die Frage nicht zu beantworten.
Duncan Jones
Weiß jemand, ob Azure Active Directory über einen ähnlichen Endpunkt verfügt, um zu überprüfen, ob ein ausgestelltes Token gültig ist?
user180940
2
Mit anderen Worten, rollen Sie Ihre eigenen.
AndroidDev
51
Ein Update zur Antwort von @Scott T.: Die Schnittstelle zwischen Resource Server und Authorization Server für die Token-Validierung wurde im Oktober 2015 in IETF RFC 7662 standardisiert, siehe: https://tools.ietf.org/html/rfc7662 . Ein Beispiel für einen Validierungsaufruf würde folgendermaßen aussehen:
Wenn Sie OoenId Connect verwenden, sollten wir nicht die offene Methode zur Verwendung des ID-Tokens zur Validierung des Zugriffstokens bevorzugen: openid.net/specs/…
adnan kamili
1
@ Renan: um mit der Art und Weise übereinzustimmen, wie Bereiche in einer Autorisierungsanforderung angefordert werden, die einen scopeAbfrageparameter enthält, dessen Wert eine durch Leerzeichen getrennte Liste von Bereichen enthält
Hans Z.
4
Bitte verwenden Sie das Wort "standardisiert" nicht, wenn etwas von einem Leitungsgremium nicht offiziell akzeptiert wurde. Der IETF RFC 7662 vom Februar 2018 zeigt deutlich, dass es sich um einen "Vorschlag" handelt.
AndroidDev
1
@adnankamili Es gibt keinen "Vorschlag". Wenn ein Dokument zu einem RFC wird, ist es bereits ein "vorgeschlagener Standard", der ein erhebliches Gewicht hat. OAuth 2.0 selbst ist immer noch ein "vorgeschlagener Standard", daher bin ich mir nicht sicher, welchen Punkt Sie anstreben.
Tempo
15
Die OAuth 2.0-Spezifikation definiert das Teil nicht. Es kann jedoch mehrere Optionen geben:
Wenn der Ressourcenserver das Token im Authz-Header erhält, ruft er die Validate / Introspect-API auf dem Authz-Server auf, um das Token zu validieren. Hier kann der Authz-Server die Validierung entweder anhand des DB Store oder anhand der Signatur und bestimmter Attribute überprüfen. Als Teil der Antwort dekodiert es das Token und sendet die tatsächlichen Daten des Tokens zusammen mit der verbleibenden Ablaufzeit.
Authz Server kann das Token mit einem privaten Schlüssel verschlüsseln / signieren, und dann kann publickey / cert an Resource Server übergeben werden. Wenn der Ressourcenserver das Token erhält, entschlüsselt / überprüft er die Signatur, um das Token zu überprüfen. Nimmt den Inhalt heraus und verarbeitet das Token. Es kann dann entweder Zugriff gewähren oder ablehnen.
Zugriffstokenattribute und die Methoden für den Zugriff auf geschützte Ressourcen gehen über den Rahmen dieser Spezifikation hinaus und werden durch Begleitspezifikationen definiert.
Mein Autorisierungsserver verfügt über einen SOAP-Endpunkt (Webservice), mit dem der Ressourcenserver feststellen kann, ob das access_token gültig ist.
Antworten:
Update Nov. 2015: Gemäß Hans Z. unten - dies ist nun tatsächlich als Teil von RFC 7662 definiert .
Ursprüngliche Antwort: Die OAuth 2.0-Spezifikation ( RFC 6749 ) definiert die Interaktion zwischen einem Ressourcenserver (RS) und einem Autorisierungsserver (AS) für die Validierung des Zugriffstokens (AT) nicht klar. Dies hängt wirklich vom Token-Format / der Token-Strategie des AS ab. Einige Token sind in sich geschlossen (wie JSON-Web-Token ), während andere einem Sitzungscookie ähneln können, da sie nur auf Informationen verweisen, die serverseitig auf dem AS gespeichert sind .
In der OAuth-Arbeitsgruppe gab es einige Diskussionen über die Schaffung einer Standardmethode für die Kommunikation eines RS mit dem AS zur AT-Validierung. Mein Unternehmen (Ping Identity) hat einen solchen Ansatz für unseren kommerziellen OAuth AS (PingFederate) entwickelt: https://support.pingidentity.com/s/document-item?bundleId=pingfederate-93&topicId=lzn1564003025072.html#lzn156400302501_N . Hierfür wird eine REST-basierte Interaktion verwendet, die OAuth 2.0 sehr ergänzt.
quelle
Google Weg
Google Oauth2-Token-Validierung
Anfrage:
Reagieren:
Microsoft Weg
Microsoft - Oauth2 prüft eine Autorisierung
Github Weg
Github - Oauth2 prüft eine Autorisierung
Anfrage:
Reagieren:
Amazon Weg
Mit Amazon anmelden - Entwicklerhandbuch (Dez. 2015, Seite 21)
Anfrage :
Antwort :
quelle
Ein Update zur Antwort von @Scott T.: Die Schnittstelle zwischen Resource Server und Authorization Server für die Token-Validierung wurde im Oktober 2015 in IETF RFC 7662 standardisiert, siehe: https://tools.ietf.org/html/rfc7662 . Ein Beispiel für einen Validierungsaufruf würde folgendermaßen aussehen:
und eine Beispielantwort:
Natürlich muss die Übernahme durch Anbieter und Produkte im Laufe der Zeit erfolgen.
quelle
scope
Abfrageparameter enthält, dessen Wert eine durch Leerzeichen getrennte Liste von Bereichen enthältDie OAuth 2.0-Spezifikation definiert das Teil nicht. Es kann jedoch mehrere Optionen geben:
Wenn der Ressourcenserver das Token im Authz-Header erhält, ruft er die Validate / Introspect-API auf dem Authz-Server auf, um das Token zu validieren. Hier kann der Authz-Server die Validierung entweder anhand des DB Store oder anhand der Signatur und bestimmter Attribute überprüfen. Als Teil der Antwort dekodiert es das Token und sendet die tatsächlichen Daten des Tokens zusammen mit der verbleibenden Ablaufzeit.
Authz Server kann das Token mit einem privaten Schlüssel verschlüsseln / signieren, und dann kann publickey / cert an Resource Server übergeben werden. Wenn der Ressourcenserver das Token erhält, entschlüsselt / überprüft er die Signatur, um das Token zu überprüfen. Nimmt den Inhalt heraus und verarbeitet das Token. Es kann dann entweder Zugriff gewähren oder ablehnen.
quelle
OAuth v2-Spezifikationen geben Folgendes an:
Mein Autorisierungsserver verfügt über einen SOAP-Endpunkt (Webservice), mit dem der Ressourcenserver feststellen kann, ob das access_token gültig ist.
quelle