Wenn Sie Google Log-in in der Vergangenheit mit GoogleAuthUtil.getToken
oder Plus.API
integriert haben, sollten Sie zur neuesten Sign-In API migrieren, um die Sicherheit und Nutzerfreundlichkeit zu verbessern.
Anti-Muster für Zugriffstokens migrieren
Sie sollten keine Zugriffstokens, die Sie mit GoogleAuthUtil.getToken
erhalten haben, als Identitätsbestätigung an Ihren Back-End-Server senden. Da Sie nicht leicht prüfen können, ob das Token an Ihr Back-End ausgestellt wurde, sind Sie anfällig für das Einfügen eines Zugriffstokens durch einen 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:
plus einen Bereichsstring als scope
-Parameter für den GoogleAuthUtil.getToken
-Aufruf (oauth2:https://www.googleapis.com/auth/plus.login
).
Verwenden Sie anstelle der Authentifizierung mit einem Zugriffstoken, das mit GoogleAuthUtil.getToken
erworben wurde, entweder den ID-Token-Ablauf oder den Autorisierungscode-Vorgang.
Zum ID-Token-Ablauf migrieren
Wenn Sie nur die ID, E-Mail-Adresse, den Namen oder die Profilbild-URL des Nutzers benötigen, verwenden Sie den Vorgang für ID-Tokens.
Nehmen Sie die folgenden Änderungen vor, um zum ID-Token-Ablauf zu migrieren:
Android-Clientseite
- Auf Anforderung die Berechtigung „
GET_ACCOUNTS
“ (Kontakte) entfernen - Ändern Sie jeden Code mit
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
oderAccountManager.newChooseAccountIntent()
inAuth.GOOGLE_SIGN_IN_API
mit derGoogleSignInOptions.Builder.requestIdToken(...)
-Konfiguration.
Serverseitig
- Neuen Endpunkt für ID-Token-Authentifizierung erstellen
- Alten Endpunkt deaktivieren, nachdem Ihre Client-Apps migriert wurden
Zum Vorgang mit Serverauthentifizierungscode migrieren
Wenn Ihr Server auf andere Google APIs wie Google Drive, YouTube oder Kontakte zugreifen muss, verwenden Sie den Vorgang mit Serverauthentifizierungscode.
Nehmen Sie die folgenden Änderungen vor, um zum Vorgang mit Server-Authentifizierungscode zu migrieren:
Android-Clientseite
- Auf Anforderung die Berechtigung „
GET_ACCOUNTS
“ (Kontakte) entfernen - Ändern Sie jeden Code mit
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
oderAccountManager.newChooseAccountIntent()
inAuth.GOOGLE_SIGN_IN_API
mit derGoogleSignInOptions.Builder.requestServerAuthCode(...)
-Konfiguration.
Serverseitig
- Erstellen Sie einen neuen Endpunkt für den Ablauf mit Serverauthentifizierungscode.
- Alten Endpunkt deaktivieren, nachdem Ihre Client-Apps migriert wurden
Sie können weiterhin die API-Zugriffslogik 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); }
Aus dem Vorgang mit dem GoogleAuthUtil-ID-Token migrieren
Wenn Sie GoogleAuthUtil
zum Abrufen von ID-Tokens verwenden, sollten Sie zum neuen ID-Token-Vorgang der Sign-In API migrieren.
Wenn Ihr Android-Code beispielsweise wie das folgende Beispiel aussieht, sollten Sie ihn migrieren:
In diesem Beispiel verwenden ID-Tokenanfragen audience:server:client_id
plus die Client-ID für Ihren Webserver als Parameter „scope“ für den GoogleAuthUtil.getToken
-Aufruf (audience:server:client_id:9414861317621.apps.googleusercontent.com
).
Der neue Vorgang für ID-Tokens für die Log-in-API bietet folgende Vorteile:
- Optimierte Anmeldung mit nur einem Tippen
- Ihr Server kann ohne zusätzlichen Netzwerkaufruf Nutzerprofilinformationen abrufen
Nehmen Sie die folgenden Änderungen vor, um zum ID-Token-Ablauf zu migrieren:
Android-Clientseite
- Auf Anforderung die Berechtigung „
GET_ACCOUNTS
“ (Kontakte) entfernen - Ändern Sie jeden Code mit
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
oderAccountManager.newChooseAccountIntent()
inAuth.GOOGLE_SIGN_IN_API
mit derGoogleSignInOptions.Builder.requestIdToken(...)
-Konfiguration.
Serverseitig
Im Gegensatz zu GoogleAuthUtil.getToken
, das ein verworfenes Format verwendet, gibt die neue Sign-In API ID-Tokens aus, die der OpenID Connect-Spezifikation entsprechen.
Insbesondere ist der Aussteller jetzt https://accounts.google.com
mit dem Schema https
.
Während der Migration muss Ihr Server das ID-Token Ihrer alten und neuen Android-Clients verifizieren. Um beide Formate des Tokens zu prüfen, nehmen Sie die Änderung vor, die der von Ihnen verwendeten Clientbibliothek entspricht (falls Sie eine verwenden):
- Java (Google APIs-Clientbibliotheken): Upgrade auf Version 1.21.0 oder höher
- PHP (Clientbibliotheken für Google APIs): Wenn Sie Version 1 verwenden, führen Sie ein Upgrade auf Version 1.1.6 oder höher und bei Verwendung von Version 2 auf Version 2.0.0-RC1 oder höher durch.
- Node.js: Upgrade auf Version 0.9.7 oder höher
- Python oder Ihre eigenen Implementierungen: Akzeptieren Sie die beiden folgenden Aussteller:
https://accounts.google.com
undaccounts.google.com
.
Vom GoogleAuthUtil-Server mit Autorisierungscode-Vorgang migrieren
Wenn Sie GoogleAuthUtil
zum Abrufen eines Server-Authentifizierungscodes verwenden, sollten Sie zum neuen Authentifizierungscode-Vorgang für die Sign-In API migrieren.
Wenn Ihr Android-Code beispielsweise wie das folgende Beispiel aussieht, sollten Sie ihn migrieren:
Im Beispiel verwenden Server-Authentifizierungscodeanfragen oauth2:server:client_id
+ die Client-ID für Ihren Webserver als scope
-Parameter für den GoogleAuthUtil.getToken
-Aufruf (oauth2:server:client_id:9414861317621.apps.googleusercontent.com
).
Der neue Vorgang mit Autorisierungscode für die Log-in-API bietet folgende Vorteile:
- Optimierte Anmeldung mit nur einem Tippen
- Wenn Sie der folgenden Migrationsanleitung folgen, kann Ihr Server beim Austausch des Authentifizierungscodes ein ID-Token mit den Profilinformationen des Nutzers abrufen.
Nehmen Sie die folgenden Änderungen vor, um zum neuen Autorisierungscode-Vorgang zu migrieren:
Android-Clientseite
- Auf Anforderung die Berechtigung „
GET_ACCOUNTS
“ (Kontakte) entfernen - Ändern Sie jeden Code mit
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
oderAccountManager.newChooseAccountIntent()
inAuth.GOOGLE_SIGN_IN_API
mit derGoogleSignInOptions.Builder.requestServerAuthCode(...)
-Konfiguration.
Serverseitig
Behalten Sie Ihren aktuellen Code bei, geben Sie aber beim Erstellen des GoogleAuthorizationCodeTokenRequest
-Objekts https://oauth2.googleapis.com/token
als Tokenserver-Endpunkt an. So können Sie ein ID-Token mit der E-Mail-Adresse, der Nutzer-ID und den Profilinformationen des Nutzers abrufen, ohne dass ein weiterer Netzwerkaufruf erforderlich ist. Dieser Endpunkt ist vollständig abwärtskompatibel. Der folgende Code funktioniert für Server-Authentifizierungscodes, die von Ihren alten und neuen Android-Clientimplementierungen abgerufen werden.
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); ...