Wie kann ich ein Google-Authentifizierungszugriffstoken überprüfen?
Ich muss Google irgendwie abfragen und fragen: Ist [Zugriffstoken gegeben] für das Google-Konto [[email protected]] gültig?
Kurzversion :
Es ist klar, wie ein über die Google Authentication Api :: OAuth-Authentifizierung für Webanwendungen bereitgestelltes Zugriffstoken verwendet werden kann, um dann Daten von einer Reihe von Google-Diensten anzufordern. Es ist nicht klar, wie überprüft werden soll, ob ein bestimmtes Zugriffstoken für ein bestimmtes Google-Konto gültig ist. Ich würde gerne wissen wie.
Lange Version :
Ich entwickle eine API, die eine tokenbasierte Authentifizierung verwendet. Ein Token wird nach Angabe eines gültigen Benutzernamens + Passworts oder nach Bereitstellung eines Tokens eines Drittanbieters von einem der N überprüfbaren Dienste zurückgegeben.
Einer der Dienste von Drittanbietern ist Google, mit dem sich ein Nutzer mit seinem Google-Konto bei meinem Dienst authentifizieren kann. Dies wird später um Yahoo-Konten, vertrauenswürdige OpenID-Anbieter usw. erweitert.
Schematisches Beispiel für einen Google-basierten Zugriff:
Alternativtext http://webignition.net/images/figures/auth_figure002.png
Die 'API'-Entität steht unter meiner vollen Kontrolle. Die Entität "öffentliche Schnittstelle" ist eine web- oder desktopbasierte App. Einige öffentliche Schnittstellen sind unter meiner Kontrolle, andere nicht und andere, von denen ich vielleicht noch nie etwas weiß.
Daher kann ich dem in Schritt 3 an die API übermittelten Token nicht vertrauen. Dieses wird zusammen mit der entsprechenden E-Mail-Adresse des Google-Kontos bereitgestellt.
Ich muss Google irgendwie abfragen und fragen: Ist dieses Zugriffstoken für [email protected] gültig ?
In diesem Fall ist [email protected] die eindeutige Kennung des Google-Kontos - die E-Mail-Adresse, mit der sich jemand bei seinem Google-Konto anmeldet. Es kann nicht davon ausgegangen werden, dass es sich um eine Google Mail-Adresse handelt. Jemand kann ein Google-Konto ohne ein Google Mail-Konto haben.
In der Google-Dokumentation wird klar angegeben, wie mit einem Zugriffstoken Daten von einer Reihe von Google-Diensten abgerufen werden können. Nichts scheint zu sagen, wie Sie überprüfen können, ob ein bestimmtes Zugriffstoken überhaupt gültig ist.
Update Das Token ist für N Google-Dienste gültig. Ich kann kein Token für einen Google-Dienst versuchen, um es zu überprüfen, da ich nicht weiß, welche Teilmenge aller Google-Dienste ein bestimmter Nutzer tatsächlich verwendet.
Darüber hinaus werde ich das Google-Authentifizierungszugriffstoken niemals für den Zugriff auf Google-Dienste verwenden, sondern lediglich, um zu überprüfen, ob ein vermeintlicher Google-Nutzer tatsächlich der ist, für den er sich ausgibt. Wenn es einen anderen Weg gibt, versuche ich es gerne.
Antworten:
Für die Benutzerprüfung senden Sie einfach das Zugriffstoken als accessToken und veröffentlichen Sie es und erhalten Sie die Antwort
Sie können es auch in Browsern in der Adressleiste versuchen, httppost und Antwort auch in Java verwenden
Antwort wird wie sein
Der Bereich ist die angegebene Berechtigung des accessToken. Sie können die Bereichs-IDs in diesem Link überprüfen
Update: Neuer API-Beitrag wie unten
Die Antwort lautet wie folgt
Weitere Informationen finden Sie unter https://developers.google.com/identity/sign-in/android/backend-auth
quelle
Sie können ein Google-Authentifizierungszugriffstoken mithilfe dieses Endpunkts überprüfen:
Dies ist der OAuth AccessToken-Endpunkt von Google V3, auf den Sie im folgenden Google-Dokument verweisen können: (In
OAUTH 2.0 ENDPOINTS
Tab)https://developers.google.com/identity/protocols/OAuth2UserAgent#validate-access-token
quelle
Ok, die meisten Antworten sind gültig, aber nicht ganz richtig. Die Idee von JWT ist, dass Sie das Token validieren können, ohne den Aussteller jedes Mal kontaktieren zu müssen. Sie müssen die ID und die Signatur des Tokens mit dem bekannten öffentlichen Schlüssel des Zertifikats überprüfen, mit dem Google das Token signiert hat.
Siehe den nächsten Beitrag warum und wie das geht.
http://ncona.com/2015/02/consuming-a-google-id-token-from-a-server/
quelle
The idea of JWT is that you can validate the token without the need to contact the issuer everytime.
quelle
Die Antwort auf den Codefluss von Google enthält zusätzlich zu den
access_token
Rückgabenid_token
auch nützliche Informationen zur Validierung in verschlüsselter Form.Der Link https://developers.google.com/identity/protocols/OpenIDConnect#validatinganidtoken enthält Codebeispiele zur Validierung von ID-Token.
Siehe auch /security/37818/why-use-openid-connect-instead-of-plain-oauth .
quelle
Nein. Sie müssen lediglich eine Standardanmeldung mit Verbundanmeldung für Google-Kontonutzer von Ihrer API-Domain anfordern . Und erst danach können Sie die "persistente Benutzer-ID" mit einer über die "öffentliche Schnittstelle" vergleichen.
Sie müssen also aus derselben Domäne stammen wie die 'öffentliche Schnittstelle'.
Und vergessen Sie nicht, dass der Nutzer sicher sein muss, dass Ihre API vertrauenswürdig ist;) Google wird den Nutzer also fragen, ob Sie damit seine Identität überprüfen können.
quelle
Hier ist ein Beispiel mit Guzzle :
quelle
Versuchen Sie, eine OAuth-authentifizierte Anfrage mit Ihrem Token an https://www.google.com/accounts/AuthSubTokenInfo zu stellen . Dies funktioniert nur für AuthSub, aber auch für OAuth. Es wird Ihnen nicht mitgeteilt, für welchen Benutzer das Token bestimmt ist, aber es wird Ihnen mitgeteilt, für welche Dienste es gültig ist, und die Anforderung schlägt fehl, wenn das Token ungültig ist oder widerrufen wurde.
quelle
Ein beliebiges OAuth-Zugriffstoken kann nicht zur Authentifizierung verwendet werden, da die Bedeutung des Tokens außerhalb der OAuth Core-Spezifikation liegt. Es kann für eine einmalige Verwendung oder ein enges Ablauffenster vorgesehen sein oder einen Zugriff bieten, den der Benutzer nicht gewähren möchte. Es ist auch undurchsichtig, und der OAuth-Verbraucher, der es erhalten hat, hat möglicherweise nie eine Art von Benutzer-ID gesehen.
Ein OAuth-Dienstanbieter und ein oder mehrere Verbraucher könnten OAuth problemlos verwenden, um ein überprüfbares Authentifizierungstoken bereitzustellen, und es gibt Vorschläge und Ideen, dies zu tun, aber ein beliebiger Dienstanbieter, der nur OAuth Core spricht, kann dies nicht ohne andere Co-Anbieter bereitstellen Ordination mit einem Verbraucher. Die Google-spezifische AuthSubTokenInfo-REST-Methode ist zusammen mit der Kennung des Benutzers eng, aber auch nicht geeignet, da sie das Token ungültig machen oder abgelaufen sein könnte.
Wenn Ihre Google ID eine OpenId-ID ist und Ihre "öffentliche Oberfläche" entweder eine Web-App ist oder den Browser des Benutzers aufrufen kann, sollten Sie wahrscheinlich das OpenID OP von Google verwenden.
OpenID besteht darin, den Benutzer nur an das OP zu senden und eine signierte Zusicherung zurückzugewinnen. Die Interaktion dient ausschließlich dem RP. Es gibt kein langlebiges Token oder anderes benutzerspezifisches Handle, mit dem angegeben werden könnte, dass ein RP einen Benutzer erfolgreich bei einem OP authentifiziert hat.
Eine Möglichkeit, eine vorherige Authentifizierung anhand einer OpenID-Kennung zu überprüfen, besteht darin, die Authentifizierung erneut durchzuführen, sofern derselbe Benutzeragent verwendet wird. Das OP sollte in der Lage sein, eine positive Behauptung ohne Benutzerinteraktion zurückzugeben (z. B. durch Überprüfen eines Cookies oder eines Client-Zertifikats). Es steht dem OP frei, eine weitere Benutzerinteraktion zu erfordern, und dies ist wahrscheinlich der Fall, wenn die Authentifizierungsanforderung von einer anderen Domäne stammt (mein OP bietet mir die Möglichkeit, diesen bestimmten RP erneut zu authentifizieren, ohne in Zukunft zu interagieren). In Googles Fall verwendet die Benutzeroberfläche, die der Benutzer zum Abrufen des OAuth-Tokens durchlaufen hat, möglicherweise nicht dieselbe Sitzungskennung, sodass sich der Benutzer erneut authentifizieren muss. In jedem Fall können Sie jedoch die Identität bestätigen.
quelle