Se você já fez a integração com o Login do Google usando GoogleAuthUtil.getToken
ou Plus.API
, migre para a API mais recente de login para ter mais segurança e uma melhor experiência do usuário.
Migrar do antipadrão do token de acesso
Não envie tokens de acesso recebidos com GoogleAuthUtil.getToken
para
o servidor de back-end como uma declaração de identidade, já que não é possível verificar facilmente
se o token foi emitido para o back-end, deixando você vulnerável à inserção
de um token de acesso de um invasor.
Por exemplo, se o código Android for semelhante ao exemplo abaixo, será necessário migrar o app para as práticas recomendadas atuais.
No exemplo, as solicitações de token de acesso usam oauth2:
e uma string de escopo como o parâmetro scope
para a chamada GoogleAuthUtil.getToken
(oauth2:https://www.googleapis.com/auth/plus.login
).
Em vez de autenticar com um token de acesso adquirido com
GoogleAuthUtil.getToken
, use o fluxo do token de ID ou o fluxo do código de autenticação.
Migrar para o fluxo de tokens de ID
Se você só precisar do código, endereço de e-mail, nome ou URL da foto do perfil do usuário, use o fluxo de token de código.
Para migrar para o fluxo de tokens de ID, faça as seguintes mudanças:
Lado do cliente Android
- Remover a permissão
GET_ACCOUNTS
(Contatos) se você solicitá-la - Mude qualquer código usando
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
ouAccountManager.newChooseAccountIntent()
paraAuth.GOOGLE_SIGN_IN_API
com a configuraçãoGoogleSignInOptions.Builder.requestIdToken(...)
.
Lado do servidor
- Crie um novo endpoint para a autenticação de token de ID
- Desativar o endpoint antigo após a migração dos apps clientes
Migrar para o fluxo de código de autenticação do servidor
Se o servidor precisar acessar outras APIs do Google, como o Google Drive, YouTube ou Contatos, use o fluxo de código de autenticação do servidor.
Para migrar para o fluxo do código de autenticação do servidor, faça as seguintes alterações:
Lado do cliente Android
- Remover a permissão
GET_ACCOUNTS
(Contatos) se você solicitá-la - Mude qualquer código usando
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
ouAccountManager.newChooseAccountIntent()
paraAuth.GOOGLE_SIGN_IN_API
com a configuraçãoGoogleSignInOptions.Builder.requestServerAuthCode(...)
.
Lado do servidor
- Crie um novo endpoint para o fluxo de código de autenticação do servidor
- Desativar o endpoint antigo após a migração dos apps clientes
Ainda é possível compartilhar a lógica de acesso da API entre o endpoint antigo e o novo. Por exemplo:
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); }
Migrar do fluxo de tokens de ID do GoogleAuthUtil
Se você usa GoogleAuthUtil
para receber tokens de ID, migre para o novo
fluxo de tokens de ID da API Login.
Por exemplo, se o código do Android for semelhante ao exemplo a seguir, você precisará migrar:
No exemplo, as solicitações de token de ID usam audience:server:client_id
e o ID do cliente do servidor da Web como o parâmetro "scope" para a chamada GoogleAuthUtil.getToken
(audience:server:client_id:9414861317621.apps.googleusercontent.com
).
O novo fluxo de token do ID da API Sign-In tem os seguintes benefícios:
- Experiência de login simplificada com um toque
- Seu servidor pode receber informações do perfil do usuário sem uma chamada de rede extra
Para migrar para o fluxo de tokens de ID, faça as seguintes mudanças:
Lado do cliente Android
- Remover a permissão
GET_ACCOUNTS
(Contatos) se você solicitá-la - Mude qualquer código usando
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
ouAccountManager.newChooseAccountIntent()
paraAuth.GOOGLE_SIGN_IN_API
com a configuraçãoGoogleSignInOptions.Builder.requestIdToken(...)
.
Lado do servidor
A nova API Sign-in emite tokens de ID que estão em conformidade com a especificação
do OpenID Connect, ao contrário de GoogleAuthUtil.getToken
, que usa um formato descontinuado.
Especificamente, o emissor agora é https://accounts.google.com
, com um esquema https
.
Durante o processo de migração, o servidor precisa verificar o token de ID dos clientes antigos e novos do Android. Para verificar os dois formatos do token, faça a mudança que corresponda à biblioteca de cliente usada (se você usar um):
- Java (bibliotecas de cliente de APIs do Google): upgrade para a versão 1.21.0 ou mais recente
- PHP (bibliotecas de cliente de APIs do Google): se você usa a v1, faça upgrade para a versão 1.1.6 ou mais recente. Se você usa a v2, faça upgrade para a versão 2.0.0-RC1 ou mais recente
- Node.js: upgrade para a versão 0.9.7 ou mais recente
- Python ou suas próprias implementações: aceite os dois emissores:
https://accounts.google.com
eaccounts.google.com
Migrar do fluxo de código de autenticação do servidor do GoogleAuthUtil
Se você usa GoogleAuthUtil
para receber um código de autenticação do servidor, migre para o novo fluxo de código de autenticação da API Sign-In.
Por exemplo, se o código do Android for semelhante ao exemplo a seguir, você precisará migrar:
No exemplo, as solicitações de código de autenticação do servidor usam oauth2:server:client_id
+ o
ID do cliente do servidor da Web como o parâmetro scope
para a
chamada GoogleAuthUtil.getToken
(oauth2:server:client_id:9414861317621.apps.googleusercontent.com
).
O novo fluxo do código de autenticação da API Sign-in tem os seguintes benefícios:
- Experiência de login simplificada com um toque
- Se você seguir o guia de migração abaixo, seu servidor poderá receber um token de ID que contém as informações de perfil do usuário quando você fizer a troca do código de autenticação
Para migrar para o novo fluxo de código de autenticação, faça as seguintes alterações:
Lado do cliente Android
- Remover a permissão
GET_ACCOUNTS
(Contatos) se você solicitá-la - Mude qualquer código usando
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
ouAccountManager.newChooseAccountIntent()
paraAuth.GOOGLE_SIGN_IN_API
com a configuraçãoGoogleSignInOptions.Builder.requestServerAuthCode(...)
.
Lado do servidor
Mantenha seu código atual, mas especifique https://oauth2.googleapis.com/token
como o endpoint do servidor de token ao criar o objeto
GoogleAuthorizationCodeTokenRequest
para que você possa receber um token de ID
com o e-mail, o ID do usuário e as informações de perfil do usuário sem precisar de outra
chamada de rede. Esse endpoint é totalmente compatível com versões anteriores, e o código abaixo
funcionará para códigos de autenticação do servidor recuperados da sua implementação antiga e nova do cliente
do Android.
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); ...