Von GoogleAuthUtil und Plus.API migrieren

Wenn Sie in der Vergangenheit Google Log-in mit GoogleAuthUtil.getToken oder Plus.API, Sie sollten zur neuesten Version migrieren, Sign-In API für mehr Sicherheit und eine bessere Nutzererfahrung.

Von Anti-Pattern für Zugriffstokens migrieren

Sie sollten keine Zugriffstokens, die Sie mit GoogleAuthUtil.getToken erhalten haben, an folgende Adresse senden: Back-End-Server als Identitätsbestätigung verwenden, da Sie nicht ohne Weiteres dass das Token an Ihr Backend ausgegeben wurde, wodurch Sie anfällig für eines Zugriffstokens von einem Angreifer.

Wenn Ihr Android-Code beispielsweise wie im nachfolgenden Beispiel aussieht, sollten Sie Ihre App gemäß den aktuellen Best Practices zu migrieren.

Android-Code

In diesem Beispiel verwenden Zugriffstokenanfragen oauth2: und einen Bereichsstring als den Parameter scope für den GoogleAuthUtil.getToken-Aufruf (oauth2:https://www.googleapis.com/auth/plus.login)

Anstatt sich mit einem Zugriffstoken zu authentifizieren, das Sie mit GoogleAuthUtil.getToken, verwenden Sie entweder den Vorgang für das ID-Token oder den Authentifizierungscode-Vorgang.

Zum ID-Token-Vorgang migrieren

Wenn Sie nur die ID, die E-Mail-Adresse, den Namen oder die URL des Profilbilds des Nutzers benötigen, Verwenden Sie den Vorgang für ID-Token.

Nehmen Sie die folgenden Änderungen vor, um zum ID-Token-Vorgang zu migrieren:

Android-Clientseite

  • Berechtigung „GET_ACCOUNTS“ (Kontakte) auf Anfrage entfernen
  • Beliebigen Code mit GoogleAuthUtil, Plus.API ändern AccountPicker.newChooseAccountIntent() oder AccountManager.newChooseAccountIntent() nach Auth.GOOGLE_SIGN_IN_API mit GoogleSignInOptions.Builder.requestIdToken(...)-Konfiguration.

Serverseitig

  • Erstellen Sie einen neuen Endpunkt für die ID-Token-Authentifizierung.
  • Alten Endpunkt nach der Migration der Client-Apps deaktivieren

Zum Server-Authentifizierungscode-Vorgang migrieren

Wenn Ihr Server auf andere Google APIs zugreifen muss, z. B. Google Drive, YouTube, oder Kontakte verwenden, verwenden Sie den Vorgang mit dem Serverauthentifizierungscode.

Nehmen Sie die folgenden Änderungen vor, um zum Server-Authentifizierungscodefluss zu migrieren:

Android-Clientseite

  • Berechtigung „GET_ACCOUNTS“ (Kontakte) auf Anfrage entfernen
  • Beliebigen Code mit GoogleAuthUtil, Plus.API ändern AccountPicker.newChooseAccountIntent() oder AccountManager.newChooseAccountIntent() nach Auth.GOOGLE_SIGN_IN_API mit GoogleSignInOptions.Builder.requestServerAuthCode(...)-Konfiguration.

Serverseitig

Sie können die API-Zugriffslogik weiterhin zwischen dem alten und dem neuen Endpunkt teilen. Beispiel:

GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(...);
String accessToken = tokenResponse.getAccessToken();
String refreshToken = tokenResponse.getRefreshToken();
Long expiresInSeconds = tokenResponse.getExpiresInSeconds();

// Shared by your old and new implementation, old endpoint can pass null for refreshToken
private void driveAccess(String refreshToken, String accessToken, Long expiresInSeconds) {
   GoogleCredential credential = new GoogleCredential.Builder()
           .setTransPort(...)
           ...
           .build();
   credential.setAccessToken(accessToken);
   credential.setExpiresInSeconds(expiresInSeconds);
   credential.setRefreshToken(refreshToken);
}

Migration vom Ablauf für GoogleAuthUtil-ID-Tokens

Wenn Sie ID-Tokens mit GoogleAuthUtil abrufen, sollten Sie zum neuen Vorgang für ID-Token der Sign-In API.

Wenn Ihr Android-Code beispielsweise wie im folgenden Beispiel aussieht, sollten Sie migrate:

Android-Code

In diesem Beispiel verwenden ID-Token-Anfragen audience:server:client_id plus die Client-ID für Ihren Webserver als "scope"-Parameter für den GoogleAuthUtil.getToken Anruf (audience:server:client_id:9414861317621.apps.googleusercontent.com)

Der neue Log-in API-ID-Token-Vorgang bietet folgende Vorteile:

  • Optimierte Anmeldung mit nur einem Tippen
  • Dein Server kann Nutzerprofilinformationen ohne einen zusätzlichen Netzwerkaufruf abrufen

Nehmen Sie die folgenden Änderungen vor, um zum ID-Token-Vorgang zu migrieren:

Android-Clientseite

  • Berechtigung „GET_ACCOUNTS“ (Kontakte) auf Anfrage entfernen
  • Beliebigen Code mit GoogleAuthUtil, Plus.API ändern AccountPicker.newChooseAccountIntent() oder AccountManager.newChooseAccountIntent() nach Auth.GOOGLE_SIGN_IN_API mit GoogleSignInOptions.Builder.requestIdToken(...)-Konfiguration.

Serverseitig

Die neue Log-In API gibt ID-Tokens aus, die OpenID Connect entsprechen -Spezifikation im Gegensatz zu GoogleAuthUtil.getToken, das ein nicht mehr unterstütztes Format verwendet. Konkret ist der Aussteller jetzt https://accounts.google.com mit einem https Schema.

Während der Migration muss Ihr Server das ID-Token beider alten und neuen Android-Clients nutzen. Um beide Formate des Tokens zu prüfen, geben Sie den für die von Ihnen verwendete Clientbibliothek (sofern vorhanden):

  • Java (Google APIs-Clientbibliotheken): Upgrade auf 1.21.0 oder höher
  • PHP (Google APIs-Clientbibliotheken): Wenn Sie Version 1 verwenden, führen Sie ein Upgrade auf Version 1.1.6 oder höher aus. Bei Verwendung von v2 führen Sie ein Upgrade auf 2.0.0-RC1 oder höher durch.
  • Node.js: Upgrade auf 0.9.7 oder höher
  • Python oder Ihre eigenen Implementierungen: Akzeptieren Sie diese beiden Aussteller: https://accounts.google.com und accounts.google.com

Vom GoogleAuthUtil-Server-Authentifizierungscodefluss migrieren

Wenn Sie mit GoogleAuthUtil einen Server-Authentifizierungscode abrufen, sollten Sie zum neuen Auth-Code-Vorgang für die Sign-In API.

Wenn Ihr Android-Code beispielsweise wie im folgenden Beispiel aussieht, sollten Sie migrate:

Android-Code

In diesem Beispiel verwenden Serverauthentifizierungscodeanfragen oauth2:server:client_id + den Client-ID für Ihren Webserver als scope-Parameter für den GoogleAuthUtil.getToken-Anruf (oauth2:server:client_id:9414861317621.apps.googleusercontent.com).

Der neue Vorgang mit Autorisierungscode der Log-in API bietet folgende Vorteile:

  • Optimierte Anmeldung mit nur einem Tippen
  • Wenn Sie der Migrationsanleitung unten folgen, kann Ihr Server ein ID-Token erhalten mit den Profilinformationen des Nutzers, wenn Sie den Autorisierungscode austauschen

Nehmen Sie die folgenden Änderungen vor, um zum neuen Autorisierungscode-Vorgang zu migrieren:

Android-Clientseite

  • Berechtigung „GET_ACCOUNTS“ (Kontakte) auf Anfrage entfernen
  • Beliebigen Code mit GoogleAuthUtil, Plus.API ändern AccountPicker.newChooseAccountIntent() oder AccountManager.newChooseAccountIntent() nach Auth.GOOGLE_SIGN_IN_API mit GoogleSignInOptions.Builder.requestServerAuthCode(...)-Konfiguration.

Serverseitig

Aktuellen Code beibehalten, aber https://oauth2.googleapis.com/token angeben als Tokenserver-Endpunkt verwenden, wenn Sie die GoogleAuthorizationCodeTokenRequest-Objekt, damit Sie ein ID-Token abrufen können mit der E-Mail-Adresse, der Nutzer-ID und den Profilinformationen des Nutzers, ohne dass einen Netzwerkanruf hinzu. Dieser Endpunkt ist vollständig abwärtskompatibel und der folgende Code funktioniert für Server-Authentifizierungscodes, die von deinem alten und deinem neuen Android-Gerät abgerufen wurden. Kundenimplementierungen.

GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(
                transport,
                jsonFactory,
                // Use below for tokenServerEncodedUrl parameter
                "https://oauth2.googleapis.com/token",
                clientSecrets.getDetails().getClientId(),
                clientSecrets.getDetails().getClientSecret(),
                authCode,
                REDIRECT_URI)
               .execute();

...

// You can also get an ID token from auth code exchange.
GoogleIdToken googleIdToken = tokenResponse.parseIdToken();
GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
        .setAudience(Arrays.asList(SERVER_CLIENT_ID))
        .setIssuer("https://accounts.google.com")
        .build();
// Refer to ID token documentation to see how to get data from idToken object.
GoogleIdToken idToken = verifier.verify(idTokenString);
...