Login na conta vinculada

A vinculação de contas permite que os titulares de Contas do Google se conectem aos seus serviços e compartilhem dados com o Google de forma rápida, simples e segura.

O login com a conta vinculada ativa o login com um toque do Google para usuários que já têm a Conta do Google vinculada ao seu serviço. Isso melhora a experiência dos usuários, que podem fazer login com um clique, sem precisar digitar o nome de usuário e a senha novamente. Isso também reduz as chances de os usuários criarem contas duplicadas no seu serviço.

Requisitos

Para implementar o recurso de login com conta vinculada, você precisa atender aos seguintes requisitos:

  • Você tem uma implementação de vinculação OAuth da Conta do Google compatível com o fluxo do código de autorização do OAuth 2.0. Sua implementação do OAuth precisa incluir os seguintes endpoints:
    • endpoint de autorização para processar solicitações de autorização.
    • Endpoint do token para processar solicitações de tokens de acesso e de atualização.
    • Endpoint userinfo para recuperar informações básicas da conta sobre o usuário vinculado que são exibidas para o usuário durante o processo de login da conta vinculada.
  • Você tem um app Android.

Como funciona

Pré-requisito : o usuário já vinculou a Conta do Google à conta dele no seu serviço.

  1. Você ativa a exibição de contas vinculadas durante o fluxo de login com um toque.
  2. O usuário recebe uma solicitação de login com um toque com a opção de fazer login no seu serviço com a conta vinculada.
  3. Se o usuário optar por continuar com a conta vinculada, o Google enviará uma solicitação ao endpoint de token para salvar um código de autorização. A solicitação contém o token de acesso do usuário emitido pelo seu serviço e um código de autorização do Google.
  4. Você troca o código de autorização do Google por um token de ID do Google, que contém informações sobre a Conta do Google do usuário.
  5. Seu app também recebe um token de ID quando o fluxo é concluído e você o compara com o identificador do usuário no token de ID recebido pelo servidor para fazer login do usuário no app.
Fazer login na conta vinculada.
Figura 1. Fluxo de login da conta vinculada. Se o usuário tiver várias contas de login no dispositivo, talvez ele veja um seletor de contas e só será direcionado à visualização de login da conta vinculada se selecionar uma conta vinculada.

Implementar o login com a conta vinculada no seu app Android

Para oferecer suporte ao login com a conta vinculada no seu app Android, siga as instruções no guia de implementação do Android.

Processar solicitações de código de autorização do Google

O Google faz uma solicitação POST para o endpoint de token para salvar um código de autorização que você troca pelo token de ID do usuário. A solicitação contém o token de acesso do usuário e um código de autorização OAuth2 emitido pelo Google.

Antes de salvar o código de autorização, verifique se o token de acesso foi concedido pelo Google, identificado pelo client_id.

Solicitação HTTP

Exemplo de solicitação

POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

code=GOOGLE_AUTHORIZATION_CODE
&grant_type=urn:ietf:params:oauth:grant-type:reciprocal
&client_id=CLIENT_ID
&client_secret=CLIENT_SECRET
&access_token=ACCESS_TOKEN

O endpoint de troca de token precisa processar os seguintes parâmetros de solicitação:

Parâmetros de endpoint do token
code Obrigatório Código de autorização do Google OAuth2
client_id Obrigatório: ID do cliente que você emitiu para o Google
client_secret Obrigatório: chave secreta do cliente emitida para o Google
access_token Obrigatório Token de acesso emitido para o Google. Você vai usar isso para saber o contexto do usuário.
grant_type O valor Obrigatório precisa ser definido como urn:ietf:params:oauth:grant-type:reciprocal.

O endpoint de troca de token precisa responder à solicitação POST da seguinte maneira:

  • Verifique se o access_token foi concedido ao Google identificado pelo client_id.
  • Responda com uma resposta HTTP 200 (OK) se a solicitação for válida e o código de autenticação for trocado por um token de ID do Google ou com um código de erro HTTP se a solicitação for inválida.

Resposta HTTP

Pronto

Retornar o código de status HTTP 200 OK

Exemplo de resposta de sucesso
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{}

Erros

Em caso de uma solicitação HTTP inválida, responda com um dos seguintes códigos de erro HTTP:

Código de status HTTP Corpo Descrição
400 {"error": "invalid_request"} A solicitação não tem um parâmetro, então o servidor não pode prosseguir com ela. Isso também pode ser retornado se a solicitação incluir um parâmetro sem suporte ou repetir um parâmetro.
401 {"error": "invalid_request"} A autenticação do cliente falhou, por exemplo, se a solicitação contiver um ID ou uma chave secreta do cliente inválidos.
401 {"error": "invalid_token"}

Incluir a autenticação "WWW-Authentication: Bearer" no cabeçalho de resposta

O token de acesso do parceiro é inválido.
403 {"error": "insufficient_permission"}

Incluir a autenticação "WWW-Authentication: Bearer" no cabeçalho de resposta

O token de acesso do parceiro não contém os escopos necessários para executar o OAuth recíproco.
500 {"error": "internal_error"} Erro no servidor

A resposta de erro precisa conter os seguintes campos :

Campos de resposta de erro
error String de erro Required
error_description Descrição legível do erro
error_uri URI que fornece mais detalhes sobre o erro
Exemplo de resposta de erro 400
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
  "error": "invalid_request",
  "error_description": "Request was missing the 'access_token' parameter."
}

Trocar o código de autorização por um token de ID

Você vai precisar trocar o código de autorização recebido por um token de ID do Google que contém informações sobre a Conta do Google do usuário.

Para trocar um código de autorização por um token de ID do Google, chame o endpoint https://oauth2.googleapis.com/token e defina os seguintes parâmetros:

Campos de solicitação
client_id Obrigatório: o ID do cliente obtido na página Credenciais do Console de APIs. Geralmente, é a credencial com o nome Novas ações no app Google.
client_secret Obrigatório: a chave secreta do cliente obtida na página de credenciais do console de APIs
code Obrigatório: o código de autorização enviado na solicitação inicial
grant_type Obrigatório Conforme definido na especificação OAuth 2.0, o valor desse campo precisa ser authorization_code.
Exemplo de solicitação
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=GOOGLE_AUTHORIZATION_CODE
&grant_type=authorization_code
&client_id=GOOGLE_CLIENT_ID
&client_secret=GOOGLE_CLIENT_SECRET

O Google responde a essa solicitação retornando um objeto JSON que contém um token de acesso de curta duração e um token de atualização.

A resposta contém os seguintes campos:

Campos de resposta
access_token Token de acesso emitido pelo Google que seu aplicativo envia para autorizar uma solicitação de API do Google
id_token O token de ID contém as informações da Conta do Google do usuário. A seção Validar resposta contém detalhes sobre como decodificar e validar a resposta do token de ID.
expires_in A vida útil restante do token de acesso em segundos
refresh_token Um token que pode ser usado para receber um novo token de acesso. Os tokens de atualização são válidos até que o usuário revogue o acesso
scope O valor desse campo é sempre definido como "openid" para o caso de uso de login de conta vinculada.
token_type O tipo de token retornado. No momento, o valor desse campo é sempre definido como Bearer.
Exemplo de resposta
HTTP/1.1 200 OK
Content-type: application/json; charset=utf-8

{
  "access_token": "Google-access-token",
  "id_token": "Google-ID-token",
  "expires_in": 3599,
  "token_type": "Bearer",
  "scope": "openid",
  "refresh_token": "Google-refresh-token"
}


POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=Google authorization code
&grant_type=authorization_code
&client_id=Google client id
&client_secret=Google client secret

Validar a resposta do token de ID