Jeśli w przeszłości integrowałeś(-aś) się z logowaniem przez Google za pomocą
GoogleAuthUtil.getToken
lub Plus.API
, uaktualnij do najnowszej wersji
Interfejs API logowania zapewnia większe bezpieczeństwo i większą wygodę użytkowników.
Migracja z antywzorca tokena dostępu
Nie wysyłaj tokenów dostępu uzyskanych za pomocą GoogleAuthUtil.getToken
do
serwera backendu jako potwierdzenia tożsamości, ponieważ nie można łatwo zweryfikować,
że token został wystawiony do backendu, co zwiększa podatność na wstawienie
tokenu dostępu otrzymanego od osoby przeprowadzającej atak.
Jeśli na przykład kod na Androida wygląda tak jak w przykładzie poniżej, przenieść aplikację do bieżących sprawdzonych metod.
W tym przykładzie żądania tokena dostępu używają parametru oauth2:
oraz ciągu tekstowego zakresu jako
Parametr scope
dla wywołania GoogleAuthUtil.getToken
(oauth2:https://www.googleapis.com/auth/plus.login
).
Zamiast uwierzytelniania za pomocą tokena dostępu pozyskanego za pomocą
GoogleAuthUtil.getToken
, użyj procesu tokena identyfikatora lub kodu autoryzacji.
Migracja do procesu tokena identyfikatora
Jeśli potrzebujesz tylko identyfikatora użytkownika, adresu e-mail, imienia i nazwiska lub adresu URL zdjęcia profilowego, skorzystaj z procedury tokenów identyfikatora.
Aby przejść na przepływ tokenów tożsamości, wprowadź te zmiany:
Strona klienta Androida
- Usuń uprawnienia aplikacji
GET_ACCOUNTS
(Kontakty), jeśli o nie poprosisz - Przełącz dowolny kod za pomocą:
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
lubAccountManager.newChooseAccountIntent()
doAuth.GOOGLE_SIGN_IN_API
z Konfiguracja usługiGoogleSignInOptions.Builder.requestIdToken(...)
.
Po stronie serwera
- Utwórz nowy punkt końcowy na potrzeby uwierzytelniania tokena tożsamości
- Wyłącz stary punkt końcowy po przeniesieniu aplikacji klienckich
Migracja do przepływu kodu uwierzytelniania serwera
Jeśli serwer musi uzyskać dostęp do innych interfejsów API Google, takich jak Dysk Google, YouTube, lub Kontakty, skorzystaj z procedury uwierzytelniania serwera.
Aby przeprowadzić migrację do przepływu kodu uwierzytelniania serwera, wprowadź te zmiany:
Strona klienta Androida
- Usuń uprawnienia aplikacji
GET_ACCOUNTS
(Kontakty), jeśli o nie poprosisz - Przełącz dowolny kod za pomocą:
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
lubAccountManager.newChooseAccountIntent()
doAuth.GOOGLE_SIGN_IN_API
z Konfiguracja usługiGoogleSignInOptions.Builder.requestServerAuthCode(...)
.
Po stronie serwera
- Utwórz nowy punkt końcowy dla przepływu kodu uwierzytelniania serwera.
- Wyłącz stary punkt końcowy po przeniesieniu aplikacji klienckich
Nadal możesz współdzielić logikę dostępu do interfejsu API między starym a nowym punktem końcowym. Przykład:
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); }
Migracja z procesu tokena identyfikatora GoogleAuthUtil ID
Jeśli używasz GoogleAuthUtil
do uzyskiwania tokenów tożsamości, musisz przejść na nową
Przepływ tokena identyfikatora interfejsu API logowania.
Jeśli kod na Androida wygląda jak w przykładzie poniżej, migrate:
W tym przykładzie w żądaniach tokena identyfikatora używane są parametry audience:server:client_id
oraz
klienta serwera WWW jako parametr „scope” dla parametru
GoogleAuthUtil.getToken
połączenie
(audience:server:client_id:9414861317621.apps.googleusercontent.com
).
Nowy proces tokena identyfikatora API logowania ma te zalety:
- Uproszczone logowanie jednym kliknięciem
- Serwer może uzyskiwać informacje o profilu użytkownika bez dodatkowego wywołania sieciowego
Aby przejść na przepływ tokenów tożsamości, wprowadź te zmiany:
Strona klienta Androida
- Usuń uprawnienia aplikacji
GET_ACCOUNTS
(Kontakty), jeśli o nie poprosisz - Przełącz dowolny kod za pomocą:
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
lubAccountManager.newChooseAccountIntent()
doAuth.GOOGLE_SIGN_IN_API
z Konfiguracja usługiGoogleSignInOptions.Builder.requestIdToken(...)
.
Po stronie serwera
Nowy interfejs API logowania powoduje problemy z tokenami tożsamości zgodnymi z OpenID Connect.
w przeciwieństwie do specyfikacji GoogleAuthUtil.getToken
, która korzysta z wycofanego formatu.
W szczególności teraz wydawcą jest https://accounts.google.com
i https
schemat.
W trakcie migracji serwer musi zweryfikować token tożsamości zarówno starych, jak i nowych klientów na Androida. Aby zweryfikować oba formaty tokena, umieść w tagu która odpowiada używanej przez Ciebie bibliotece klienta (jeśli z niej korzystasz):
- Java (biblioteki klienta interfejsów API Google): uaktualnij do wersji 1.21.0 lub nowszej
- PHP (biblioteki klienta interfejsów API Google): jeśli używasz wersji 1, uaktualnij ją do wersji 1.1.6 lub nowszej; jeśli używasz wersji 2, uaktualnij ją do wersji 2.0.0-RC1 lub nowszej
- Node.js: uaktualnij do wersji 0.9.7 lub nowszej
- Python lub Twoje własne implementacje: zaakceptuj obydwu tych wydawców:
https://accounts.google.com
iaccounts.google.com
Migracja z procesu kodu autoryzacji serwera GoogleAuthUtil
Jeśli używasz GoogleAuthUtil
do pobierania kodu uwierzytelniania serwera, przenieś się na
nowy przepływ kodu autoryzacji interfejsu Sign-In API.
Jeśli kod na Androida wygląda jak w przykładzie poniżej, migrate:
W tym przykładzie w żądaniach kodu uwierzytelniania serwera jest używany ciąg oauth2:server:client_id
+ przycisk
klienta serwera WWW jako parametru scope
dla parametru
GoogleAuthUtil.getToken
połączenie (oauth2:server:client_id:9414861317621.apps.googleusercontent.com
).
Nowy przepływ kodu uwierzytelniania interfejsu Sign-In API ma te zalety:
- Uproszczone logowanie jednym kliknięciem
- Jeśli zastosujesz się do poniższego przewodnika po migracji, Twój serwer może uzyskać token identyfikatora zawierające informacje o profilu użytkownika podczas wymiany kodu autoryzacji
Aby przejść do nowego przepływu kodu autoryzacji, wprowadź te zmiany:
Strona klienta Androida
- Usuń uprawnienia aplikacji
GET_ACCOUNTS
(Kontakty), jeśli o nie poprosisz - Przełącz dowolny kod za pomocą:
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
lubAccountManager.newChooseAccountIntent()
doAuth.GOOGLE_SIGN_IN_API
z Konfiguracja usługiGoogleSignInOptions.Builder.requestServerAuthCode(...)
.
Po stronie serwera
Zachowaj bieżący kod, ale określ https://oauth2.googleapis.com/token
jako punktu końcowego serwera tokenów podczas tworzenia
GoogleAuthorizationCodeTokenRequest
, aby uzyskać token identyfikatora
z adresem e-mail, identyfikatorem użytkownika i informacjami profilowymi użytkownika bez potrzeby
przez sieć. Ten punkt końcowy jest w pełni zgodny wstecznie, a poniższy kod
będzie działał z kodami uwierzytelniania serwera pobranymi zarówno ze starego, jak i nowego Androida
wdrożeniach u klienta.
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); ...