Migrieren Sie von GoogleAuthUtil und Plus.API

Wenn Sie in der Vergangenheit mit GoogleAuthUtil.getToken oder Plus.API in Google Sign-In Plus.API , sollten Sie für mehr Sicherheit und eine bessere Benutzererfahrung auf die neueste Plus.API -API migrieren.

Migrieren Sie vom Anti-Pattern für Zugriffstoken

Sie sollten keine mit GoogleAuthUtil.getToken erhaltenen GoogleAuthUtil.getToken als Identitätsbestätigung an Ihren Backend-Server senden, da Sie nicht einfach überprüfen können, ob das Token an Ihr Backend ausgegeben wurde, sodass Sie für das Einfügen eines Zugriffstokens von einem Angreifer anfällig sind.

Wenn Ihr Android-Code beispielsweise wie im folgenden Beispiel aussieht, sollten Sie Ihre App auf die aktuellen Best Practices migrieren.

Android-Code

Im Beispiel Zugriffstoken Anfragen verwenden oauth2: dazu Umfang String als scope - Parameter für den GoogleAuthUtil.getToken Aufruf ( oauth2:https://www.googleapis.com/auth/plus.login ).

GoogleAuthUtil.getToken anstelle der Authentifizierung mit einem mit GoogleAuthUtil.getToken erworbenen GoogleAuthUtil.getToken entweder den ID-Token-Fluss oder den Authentifizierungscode-Fluss.

Migrieren Sie zum ID-Token-Flow

Wenn Sie lediglich die ID, E-Mail-Adresse, den Namen oder die URL des Profilbilds des Benutzers benötigen, verwenden Sie den ID-Token-Flow .

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

Android-Client-Seite

  • Entfernen Sie die GET_ACCOUNTS (Kontakte), wenn Sie dies anfordern
  • GoogleAuthUtil Plus.API jeden Code mit GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() oder AccountManager.newChooseAccountIntent() in Auth.GOOGLE_SIGN_IN_API mit der Konfiguration von GoogleSignInOptions.Builder.requestIdToken(...) .

Serverseite

  • Erstellen Sie einen neuen Endpunkt für die ID-Token-Authentifizierung
  • Deaktivieren Sie den alten Endpunkt, nachdem Ihre Client-Apps migriert wurden

Migrieren Sie zum Serverauthentifizierungscode-Fluss

Wenn Ihr Server auf andere Google-APIs wie Google Drive, Youtube oder Kontakte zugreifen muss, verwenden Sie den Serverauthentifizierungscode .

Nehmen Sie die folgenden Änderungen vor, um zum Serverauthentifizierungscode zu migrieren:

Android-Client-Seite

  • Entfernen Sie die GET_ACCOUNTS (Kontakte), wenn Sie dies anfordern
  • GoogleAuthUtil Plus.API jeden Code mit GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() oder AccountManager.newChooseAccountIntent() in Auth.GOOGLE_SIGN_IN_API mit der Konfiguration GoogleSignInOptions.Builder.requestServerAuthCode(...) .

Serverseite

Sie können die API-Zugriffslogik weiterhin zwischen Ihren alten und neuen Endpunkten teilen. Beispielsweise:

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);
}

Migrieren Sie aus dem GoogleAuthUtil ID-Token-Flow

Wenn Sie GoogleAuthUtil , um ID-Token GoogleAuthUtil , sollten Sie auf den neuen ID-Token-Flow für die GoogleAuthUtil -API migrieren.

Wenn Ihr Android-Code beispielsweise wie folgt aussieht, sollten Sie migrieren:

Android-Code

In diesem Beispiel verwenden ID-Token-Anforderungen audience:server:client_id sowie die Client-ID für Ihren Webserver als Parameter 'scope' für den Aufruf von GoogleAuthUtil.getToken ( audience:server:client_id:9414861317621.apps.googleusercontent.com ).

Der neue Token-Flow für die Anmelde-API-ID bietet die folgenden Vorteile:

  • Optimierte Anmeldeerfahrung mit nur einem Fingertipp
  • Ihr Server kann Benutzerprofilinformationen ohne zusätzlichen Netzwerkanruf abrufen

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

Android-Client-Seite

  • Entfernen Sie die GET_ACCOUNTS (Kontakte), wenn Sie dies anfordern
  • GoogleAuthUtil Plus.API jeden Code mit GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() oder AccountManager.newChooseAccountIntent() in Auth.GOOGLE_SIGN_IN_API mit der Konfiguration von GoogleSignInOptions.Builder.requestIdToken(...) .

Serverseite

Die neue Anmelde-API stellt ID-Token aus, die der OpenID Connect-Spezifikation entsprechen, im Gegensatz zu GoogleAuthUtil.getToken , das ein veraltetes Format verwendet. Insbesondere ist der Aussteller jetzt https://accounts.google.com mit einem https Schema.

Während des Migrationsprozesses muss Ihr Server das ID-Token sowohl von Ihrem alten als auch von Ihrem neuen Android-Client überprüfen. Um beide Formate des Tokens zu überprüfen, nehmen Sie die Änderung vor, die der von Ihnen verwendeten Clientbibliothek entspricht (falls Sie eine verwenden):

  • Java (Google APIs Client Libraries): Upgrade auf 1.21.0 oder neuer
  • PHP (Google APIs Client Libraries): Wenn Sie v1 verwenden, aktualisieren Sie auf 1.1.6 oder neuer. Wenn Sie v2 verwenden, aktualisieren Sie auf 2.0.0-RC1 oder neuer
  • Node.js: Upgrade auf 0.9.7 oder neuer
  • Python oder Ihre eigenen Implementierungen: Akzeptieren Sie beide Emittenten: https://accounts.google.com und accounts.google.com

Migrieren Sie vom Authentifizierungscode des GoogleAuthUtil-Servers

Wenn Sie GoogleAuthUtil einen Server Auth - Code zu erhalten, sollten Sie auf den neuen Sign-In - API migrieren Auth - Code fließen .

Wenn Ihr Android-Code beispielsweise wie folgt aussieht, sollten Sie migrieren:

Android-Code

Im Beispiel Server Auth - Code - Anfragen verwenden oauth2:server:client_id + die Client - ID für Ihren Web - Server , der als scope - Parameter für den GoogleAuthUtil.getToken Aufruf ( oauth2:server:client_id:9414861317621.apps.googleusercontent.com ).

Der neue Authentifizierungscode für die Anmelde-API bietet die folgenden Vorteile:

  • Optimierte Anmeldeerfahrung mit nur einem Fingertipp
  • Wenn Sie der folgenden Migrationsanleitung folgen, kann Ihr Server beim Austausch des Authentifizierungscodes ein ID-Token erhalten, das die Profilinformationen des Benutzers enthält

Nehmen Sie die folgenden Änderungen vor, um auf den neuen Authentifizierungscode-Fluss zu migrieren:

Android-Client-Seite

  • Entfernen Sie die GET_ACCOUNTS (Kontakte), wenn Sie dies anfordern
  • GoogleAuthUtil Plus.API jeden Code mit GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() oder AccountManager.newChooseAccountIntent() in Auth.GOOGLE_SIGN_IN_API mit der Konfiguration GoogleSignInOptions.Builder.requestServerAuthCode(...) .

Serverseite

Behalten Sie Ihren aktuellen Code bei, geben Sie jedoch beim GoogleAuthorizationCodeTokenRequest des GoogleAuthorizationCodeTokenRequest Objekts https://oauth2.googleapis.com/token als Token-Server-Endpunkt an, damit Sie ein ID-Token mit der E-Mail- GoogleAuthorizationCodeTokenRequest , der Benutzer-ID und den Profilinformationen des Benutzers ohne das erhalten können Notwendigkeit für einen weiteren Netzwerkanruf. Dieser Endpunkt ist vollständig abwärtskompatibel. Der folgende Code funktioniert für Serverauthentifizierungscodes, die sowohl von Ihren alten als auch von Ihren neuen Android-Client-Implementierungen abgerufen wurden.

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);
...