2016-05-24 23 views
5

Ich schreibe eine Android-App für Voice-Chat und entschied mich, Google Sign-In für eine einfache Benutzerauthentifizierung mit meinem Backend-Server zu verwenden. Allerdings verstehe ich nicht, wie sich die App mit meinem Backend authentifizieren soll. Wenn sich ein Nutzer mit seinem Google-Konto anmeldet und ich das ID-Token erhalte, kann ich das ID-Token an den Server senden, der dann vom Server überprüft wird. Und was ist dann? Wie werden folgende Anfragen authentifiziert, zum Beispiel wenn der Benutzer eine Sprachnachricht sendet/empfängt und die App die Nachricht zum/vom Server hochladen/herunterladen muss? Der Server muss wissen, welcher Benutzer die Anfrage stellt, aber das ID-Token ist unangemessen, da es bald abläuft und seine Integritätsprüfung ein komplexer und relativ langer Prozess ist.Google Anmeldung Backend-Server-Authentifizierung

+0

hey Salivan, haben Sie jemals eine Lösung oder einen Ansatz für diese Situation gefunden? – rastadrian

+0

Ich denke, dass Utsav Dusads Antwort am passendsten ist. – Salivan

+0

Also jede konsequente Anfrage mit vielleicht einem Autorisierungsheader, der den idToken-Wert enthält? Wenn ja, und da idToken ein JWT ist, vielleicht als Autorisierung: Träger {idToken}? – rastadrian

Antwort

5

Google Log-in API: Folgende Schritte sind beteiligt: ​​

  • Benutzer Zeichen in Google die iOS/Android-Anwendung.
  • Google gibt tokeneid (und einige zusätzliche Informationen. Siehe die link für zusätzliche Informationen) an den Client (iOS/Android App).
  • Der Client sendet die Tokenid an den Backend-Server.
  • Der Server verwendet die Google Client-API (oder ruft den google-Endpunkt auf, indem er eine GET-Anfrage absetzt, aber Vorsicht, es ist mit einer Netzwerkverzögerung verbunden), um die Integrität des Tokens zu überprüfen. In diesem Schritt sollten bestimmte Kriterien erfüllt sein. Siehe Here.
  • GoogleAPI gibt einige Informationen an den Server zurück. Welche Art von Informationen? Etwas wie folgt aus:

{u'picture ': u' https://lh3.googleusercontent.com/-RD4yn7rqIc8/AAAAAAAAAAI/AAAAAAAALQI/9Ab_kR3_CII/s96-c/photo.jpg ' u'sub ': u'10270538098780639-55', u'family_name ': u'Dusad', u' iss ': u' https://accounts.google.com 'u'email_verified ': Stimmt, u'name': u'Utsav Dusad', u'at_hash ': u'BMjN0mWeOMqVVBhjW_W9A', u'given_name ': u'Utsav', u "exp": 1484582338, u'azp ': u'85959433390-npk1ss7juimjqt5hrlhm7v2fj2u7593f.apps.googleusercontent.com', u'iat ': 1484578738, u'locale': u'en-GB ', u'email': u'[email protected] ', u'aud': u'85959433390-npk1ss7juimjqt5hrlhm7v2fj2u7593f.apps.googleusercontent.com '}

sub: Betreff. Benutzeridentifikation. Verwenden Sie die E-Mail-ID nicht als Primärschlüssel, da sie sich ändern kann. Verwenden Sie Benutzer-ID.

Eine Kennung für den Benutzer, einzigartig unter allen Google-Konten und nie wiederverwendet. Ein Google-Konto kann mehrere E-Mails zu verschiedenen Zeitpunkten haben in der Zeit, aber der Unterwert wird nie geändert. Verwenden Sie sub innerhalb Ihrer Anwendung als eindeutigen Schlüssel für den Benutzer.

Für ausführliche Informationen siehe here:

  • Server gibt Erfolg Login an den Client.
  • Client machen nachfolgende (HTTP POST, GET) Anfragen mit TokenID.
  • Der Server bedient die Daten, indem er das IDToken verifiziert und die "Sub" -Informationen überprüft (sub ist die eindeutige Identität eines Benutzers).
1

Es ist wie die Erklärung sieht man braucht ist: https://developers.google.com/identity/sign-in/web/backend-auth#verify-the-integrity-of-the-id-token

Es erklärt:

Nachdem Sie den ID-Token von HTTPS POST erhalten, müssen Sie die Integrität des Tokens überprüfen. Um sicherzustellen, dass das Token gültig ist, sicherzustellen, dass folgenden Kriterien erfüllt sind:

Die ID-Token ein JWT ist die ordnungsgemäß mit einem entsprechenden Google öffentlichen Schlüsseln (erhältlich in JWK oder PEM-Format) signiert ist. Der Wert von aud im ID-Token entspricht einer der Client-IDs Ihrer App. Dieser Check ist erforderlich, um zu verhindern, dass ID-Token, die an eine schädliche App ausgegeben werden, für den Zugriff auf Daten desselben Benutzers auf dem Backend-Server Ihrer App verwendet werden. Der Wert von iss im ID-Token entspricht accounts.google.com oder https://accounts.google.com. Die Ablaufzeit (exp) des ID-Tokens hat nicht bestanden. Wenn Ihre Authentifizierungsanforderung eine gehostete Domain angegeben hat, hat der ID-Token einen HD-Anspruch, der Ihrer von Google Apps gehosteten Domain entspricht.

Darin heißt es:

Anstatt Ihre eigenen Code zu schreiben, diese Überprüfungsschritte durchzuführen, wir dringend für Ihre Plattform mit einem Google-API-Client-Bibliothek empfehlen, oder unsere tokeninfo Validierung Endpunkt aufrufen.

Es geht weiter, um Ihnen genau zu zeigen, was Sie tun müssen.

+1

Nein, es beantwortet meine Frage absolut nicht. Also sollte ich den ID-Token bei jeder Anfrage senden? Weil das lächerlich ist. :) – Salivan

+1

Sie haben gerade gezeigt, wie Sie das Token überprüfen können, und ich habe gefragt, wie Sie nach dem Request, der das Token verifiziert hat, folgende Anfragen autorisieren können. – Salivan

+1

Okay, ich denke, wonach Sie suchen, ist die Überwachung der Benutzersitzung (verwandtes Thema: https://developers.google.com/identity/sign-in/web/session-state) Sobald der Benutzer authentifiziert ist, die Sitzung kann man vertrauen". – raddevus