2015-10-13 13 views
7

Ich folge these instructions (https://developers.google.com/identity/sign-in/android/backend-auth) für ein ID-Token immer zu meinem Backend gesendet werden, aber wenn ich gesetzt String scopes = "audience:server:client_id:" + Service.SERVER_CLIENT_ID; (Ja die SERVER_CLIENT_ID ist nicht die Android-Client-ID) Ich kann nicht eine bekommen Token und wirft diesen Fehler.Google-Authentifizierung mit einem Back-End-Server erforderlich Scopes

E/Login: com.google.android.gms.auth.GoogleAuthException: Unknown

aber wenn ich den folgenden Umfang statt String scopes = "oauth2:profile email";

ich erfolgreich ‚ein‘ Token, aber es ist nicht so lange, wie ich es erwartet hatte und ich fürchte, es könnte falsch sein .

Meine Fragen sind ...

1) Warum die scopes = "audience:server:client_id:" + SERVER_CLIENT_ID; nicht in der Führungsarbeit genutzt?

2) Ist das Token, das ich bekomme, mit String scopes = "oauth2:profile email"; ein sicheres für die Überprüfung eines Benutzers auf einem Backend?

Der Code ist unten.

Antwort

1

Wenn Sie den Bereich auf oauth2: Profil-E-Mail festlegen, erhalten Sie ein Zugriffstoken, das sich von einem ID-Token unterscheidet.

Ein Zugriffstoken kann für den Zugriff auf Google APIs verwendet werden. Ein ID-Token ist ein JWT, der Identitätsinformationen zu dem von Google digital signierten Benutzer enthält. Die Formate sind unterschiedlich. Wenn Sie versuchen, ein Zugriffstoken mit dem für ID-Token bereitgestellten Beispielcode zu autorisieren, erhalten Sie einen ungültigen Fehler.

Wenn Sie sich die Dokumentation für GoogleAuthUtil.getToken() ansehen, werden Sie feststellen, dass GoogleAuthException eine schwerwiegende Ausnahme ist, die normalerweise durch einen Clientfehler wie ungültigen Bereich oder ungültigen Client verursacht wird. https://developers.google.com/android/reference/com/google/android/gms/auth/GoogleAuthUtil#getToken(android.content.Context, android.accounts.Account, java.lang.String, android.os.Bundle)

Stellen Sie sicher, dass Sie sowohl eine App und Webserver OAuth2 ID in Google Developer-Konsole eingerichtet und dass die Paketnamen in Ihrem Manifest entspricht der Paketname Sie zusammen mit dem SHA Fingerabdruck liefern, wenn die ID-App zu erstellen. Verwenden Sie die Webserver-ID als SERVER_CLIENT_ID.

Ich habe einen Beispielcode zu Github hochgeladen. https://github.com/kmosdev/google-signin-backend-auth

Ich begann mit Googles Beispiel-Anmelde-App und änderte es, um Backend-Auth hinzuzufügen. Weitere Details finden Sie in der Readme.

Eine andere Sache zu prüfen ist, dass Sie die richtigen Berechtigungen in Ihrer Manifest-Datei haben, aber ich glaube, dass Sie einen anderen Fehler bekommen würde, wenn dies falsch war:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.USE_CREDENTIALS" /> 
+0

1. ab. Willkommen bei Stackoverflow. Zweitens gib mir eine Sekunde, um zu sehen, ob dies mich in die richtige Richtung weist. (Ich stimme das in der Zwischenzeit ab) – SARose

+0

Danke! Ich weiß, dass es keine vollständige Antwort ist, aber ich konnte keinen Kommentar abgeben und ich fand, dass einige Informationen besser waren als keine. – kmosdev

+0

könnten Sie bitte einen Beispielcode posten – SARose