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.
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
ändernAccountPicker.newChooseAccountIntent()
oderAccountManager.newChooseAccountIntent()
nachAuth.GOOGLE_SIGN_IN_API
mitGoogleSignInOptions.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
ändernAccountPicker.newChooseAccountIntent()
oderAccountManager.newChooseAccountIntent()
nachAuth.GOOGLE_SIGN_IN_API
mitGoogleSignInOptions.Builder.requestServerAuthCode(...)
-Konfiguration.
Serverseitig
- Erstellen Sie einen neuen Endpunkt für den Vorgang mit dem Serverauthentifizierungscode.
- Alten Endpunkt nach der Migration der Client-Apps deaktivieren
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:
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
ändernAccountPicker.newChooseAccountIntent()
oderAccountManager.newChooseAccountIntent()
nachAuth.GOOGLE_SIGN_IN_API
mitGoogleSignInOptions.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
undaccounts.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:
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
ändernAccountPicker.newChooseAccountIntent()
oderAccountManager.newChooseAccountIntent()
nachAuth.GOOGLE_SIGN_IN_API
mitGoogleSignInOptions.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); ...