Wenn du Google Log-in bisher mit GoogleAuthUtil.getToken
oder Plus.API
integriert hast, solltest du zur neuesten Log-in API migrieren, um die Sicherheit und Nutzerfreundlichkeit zu erhöhen.
Migration von Anti-Token-Anti-Muster
Sie sollten keine Zugriffstokens, die Sie mit GoogleAuthUtil.getToken
erhalten haben, als Identitätsbestätigung an Ihren Back-End-Server senden, da Sie nicht so leicht verifizieren können, dass das Token an Ihr Back-End ausgestellt wurde. So sind Sie anfällig für das Einfügen eines Zugriffstokens von einem Angreifer.
Wenn Ihr Android-Code beispielsweise wie im folgenden Beispiel aussieht, sollten Sie Ihre App zu den aktuellen Best Practices migrieren.
In diesem Beispiel verwenden Zugriffstokenanfragen oauth2:
sowie einen Bereichsstring als scope
-Parameter für den GoogleAuthUtil.getToken
-Aufruf (oauth2:https://www.googleapis.com/auth/plus.login
).
Statt sich mit einem Zugriffstoken zu authentifizieren, das mit GoogleAuthUtil.getToken
empfangen wurde, verwenden Sie entweder den Ablauf für den ID-Token oder den Vorgang für den Autorisierungscode.
Zum ID-Tokenablauf migrieren
Wenn du nur die ID, E-Mail-Adresse, den Namen oder die Profilbild-URL des Nutzers verwenden möchtest, verwende den ID-Token-Ablauf.
Nehmen Sie die folgenden Änderungen vor:
Android-Clientseite
- Entfernen Sie die Berechtigung
GET_ACCOUNTS
(Kontakte), wenn Sie dies anfordern. - Beliebigen Code mit
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
oderAccountManager.newChooseAccountIntent()
zuAuth.GOOGLE_SIGN_IN_API
mitGoogleSignInOptions.Builder.requestIdToken(...)
-Konfiguration wechseln.
Serverseitig
- Erstellen Sie einen neuen Endpunkt für ID-Token-Authentifizierung
- Alten Endpunkt nach der Migration der Client-Apps deaktivieren
Zum Serverauthentifizierungscode migrieren
Wenn dein Server auf andere Google APIs wie Google Drive, YouTube oder Kontakte zugreifen muss, verwende den Serverauthentifizierungscode-Ablauf.
Nehmen Sie die folgenden Änderungen vor, um zum Serverauthentifizierungscode zu migrieren:
Android-Clientseite
- Entfernen Sie die Berechtigung
GET_ACCOUNTS
(Kontakte), wenn Sie dies anfordern. - Beliebigen Code mit
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
oderAccountManager.newChooseAccountIntent()
zuAuth.GOOGLE_SIGN_IN_API
mitGoogleSignInOptions.Builder.requestServerAuthCode(...)
-Konfiguration wechseln.
Serverseitig
- Erstellen Sie einen neuen Endpunkt für den Vorgang für den Serverauthentifizierungscode
- Alten Endpunkt nach der Migration der Client-Apps deaktivieren
Sie können die API-Zugriffslogik weiterhin zwischen Ihrem alten und Ihrem 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 aus dem GoogleAuthUtil-ID-Tokenablauf
Wenn du GoogleAuthUtil
verwendest, um ID-Tokens zu erhalten, musst du zum neuen ID-Token-Ablauf der Log-in API migrieren.
Wenn dein Android-Code beispielsweise wie folgt aussieht, solltest du migrieren:
In diesem Beispiel werden bei ID-Tokenanfragen audience:server:client_id
und die Client-ID für deinen Webserver als „scope“-Parameter für den GoogleAuthUtil.getToken
-Aufruf (audience:server:client_id:9414861317621.apps.googleusercontent.com
) verwendet.
Der neue Ablauf der Log-in-API-ID hat folgende Vorteile:
- Einfache Anmeldung mit nur einem Tippen
- Dein Server kann ohne zusätzliche Netzwerkaufrufe Nutzerprofilinformationen abrufen
Nehmen Sie die folgenden Änderungen vor:
Android-Clientseite
- Entfernen Sie die Berechtigung
GET_ACCOUNTS
(Kontakte), wenn Sie dies anfordern. - Beliebigen Code mit
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
oderAccountManager.newChooseAccountIntent()
zuAuth.GOOGLE_SIGN_IN_API
mitGoogleSignInOptions.Builder.requestIdToken(...)
-Konfiguration wechseln.
Serverseitig
Die neue Log-in-API gibt ID-Token aus, die der OpenID Connect-Spezifikation entsprechen, im Gegensatz zu GoogleAuthUtil.getToken
, das ein verworfenes Format verwendet.
Insbesondere ist der Aussteller jetzt https://accounts.google.com
mit einem https
-Schema.
Während des Migrationsprozesses muss dein Server das ID-Token Ihres alten und deines neuen Android-Clients überprüfen. Nehmen Sie die folgenden Änderungen an der Clientbibliothek vor, falls Sie eine solche verwenden möchten:
- Java (Google APIs-Clientbibliotheken): Upgrade auf 1.21.0 oder höher
- PHP (Google APIs-Clientbibliotheken): Wenn Sie V1 verwenden, führen Sie ein Upgrade auf Version 1.1.6 oder höher aus. Wenn Sie Version 2 verwenden, führen Sie ein Upgrade auf Version 2.0.0-RC1 oder höher aus.
- Node.js: Upgrade auf 0.9.7 oder höher
- Python oder Ihre eigenen Implementierungen: akzeptieren Sie diese beiden Aussteller:
https://accounts.google.com
undaccounts.google.com
Aus dem Ablauf des Authentifizierungscodes für GoogleAuthUtil migrieren
Wenn Sie GoogleAuthUtil
verwenden, um einen Serverauthentifizierungscode abzurufen, müssen Sie zum neuen Auth-Codefluss der Log-in API migrieren.
Wenn dein Android-Code beispielsweise wie folgt aussieht, solltest du migrieren:
Im Beispiel verwenden Serverauthentifizierungscode-Anfragen oauth2:server:client_id
+ die Client-ID für deinen Webserver als scope
-Parameter für den GoogleAuthUtil.getToken
-Aufruf (oauth2:server:client_id:9414861317621.apps.googleusercontent.com
).
Der neue Log-in-API-Authentifizierungscode hat folgende Vorteile:
- Einfache Anmeldung mit nur einem Tippen
- Wenn Sie der Anleitung unten folgen, kann Ihr Server ein ID-Token abrufen, das die Profilinformationen des Nutzers enthält, wenn Sie den Autorisierungscode austauschen
Nehmen Sie die folgenden Änderungen vor, um zum neuen Autorisierungscode zu migrieren:
Android-Clientseite
- Entfernen Sie die Berechtigung
GET_ACCOUNTS
(Kontakte), wenn Sie dies anfordern. - Beliebigen Code mit
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
oderAccountManager.newChooseAccountIntent()
zuAuth.GOOGLE_SIGN_IN_API
mitGoogleSignInOptions.Builder.requestServerAuthCode(...)
-Konfiguration wechseln.
Serverseitig
Behalten Sie den aktuellen Code, aber geben Sie beim Erstellen des GoogleAuthorizationCodeTokenRequest
-Objekts https://oauth2.googleapis.com/token
als Tokenserver-Endpunkt an, damit Sie ein ID-Token mit der E-Mail-Adresse, Nutzer-ID und Profilinformationen des Nutzers abrufen können, ohne einen weiteren Netzwerkaufruf verwenden zu müssen. Dieser Endpunkt ist vollständig abwärtskompatibel und der folgende Code funktioniert für Serverauthentifizierungscodes, die aus deiner alten und neuen Implementierungen von Android-Clients 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); ...