Vinculação de contas do Google com OAuth (fluxo implícito - arquivado)

Para oferecer suporte ao fluxo implícito do OAuth 2.0, seu serviço disponibiliza um endpoint de autorização por HTTPS. Esse endpoint é responsável pela autenticação e pela obtenção do consentimento dos usuários para acesso aos dados. O endpoint de autorização apresenta uma interface de login para os usuários que ainda não fizeram login e registra o consentimento para o acesso solicitado.

Quando um aplicativo do Google precisa chamar uma das APIs autorizadas do seu serviço, o Google usa esse endpoint para receber permissão dos usuários e chamar essas APIs em nome deles.

Vinculação de contas do Google: fluxo implícito do OAuth

O diagrama de sequência a seguir detalha as interações entre o usuário, o Google e os endpoints do seu serviço.

Usuário App do Google / Navegador Seu endpoint 1. O usuário inicia a vinculação 2. Redirecionar para o endpoint de autenticação (GET) client_id, redirect_uri, state, scope 3. Mostrar tela de consentimento e de login 4. O usuário autentica e concede consentimento 5. Redirecionar de volta para o Google com o token (GET) access_token, state 6. Armazenar tokens de usuário 7. Acessar recursos do usuário
Figura 1. A sequência de eventos no fluxo implícito do OAuth 2.0 para a vinculação de contas do Google.

Funções e responsabilidades

A tabela a seguir define as funções e responsabilidades dos participantes no fluxo implícito do OAuth de vinculação de contas do Google (GAL). Observação: no GAL, o Google atua como o cliente do OAuth, enquanto seu serviço atua como o provedor de identidade/serviço.

Ator / componente Função na GAL Responsabilidades
App / servidor do Google Cliente OAuth Inicia o fluxo, recebe o token de acesso usando um redirecionamento do navegador e o armazena com segurança para acessar as APIs do seu serviço.
Seu endpoint de autorização Servidor de autorização Autentica seus usuários, recebe o consentimento deles e emite tokens de acesso de longa duração diretamente para o Google.
URI de redirecionamento do Google Endpoint de callback Recebe o redirecionamento do usuário do seu serviço de autorização com os valores access_token e state no fragmento do URL.

Uma sessão típica de fluxo implícito do OAuth 2.0 iniciada pelo Google tem o seguinte fluxo:

  1. O Google abre seu endpoint de autorização no navegador do usuário. O usuário faz login, se ainda não tiver feito isso, e concede permissão ao Google para acessar os dados dele com sua API, caso ainda não tenha concedido permissão.
  2. Seu serviço cria um token de acesso e o retorna ao Google. Para fazer isso, redirecione o navegador do usuário de volta ao Google com o token de acesso anexado à solicitação.
  3. O Google chama as APIs do seu serviço e anexa o token de acesso a cada solicitação. Seu serviço verifica se o token de acesso concede autorização ao Google para acessar a API e conclui a chamada de API.

Receita de implementação

Siga estas etapas para implementar o fluxo implícito.

Etapa 1: processar solicitações de autorização

Quando o Google inicia a vinculação de contas, ele redireciona o usuário para seu endpoint de autorização. Para ver contratos de protocolo detalhados e requisitos de parâmetros, consulte o endpoint de autorização.

Para processar a solicitação, faça o seguinte:

  1. Valide a solicitação:

    • Confirme se o client_id corresponde ao ID do cliente atribuído ao Google.
    • Confirme se o redirect_uri corresponde ao URL de redirecionamento do Google esperado: none https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
    • Verifique se response_type é token.
  2. Autentique o usuário:

    • Verifique se o usuário fez login no seu serviço.
    • Se o usuário não estiver conectado, peça que ele conclua o fluxo de login ou inscrição.
  3. Gerar token de acesso:

    • Crie um token de acesso exclusivo e não adivinhável associado ao usuário e ao cliente.
  4. Redirecionar de volta para o Google:

    • Redirecione o navegador para o URL fornecido em redirect_uri.
    • Anexe os seguintes parâmetros ao fragmento do URL (hash):
      • access_token: o token de acesso gerado.
      • token_type: precisa ser bearer.
      • state: o valor de estado não modificado recebido do Google.
Processar solicitações userinfo

O endpoint userinfo é um recurso protegido pelo OAuth 2.0 que retorna declarações sobre o usuário vinculado. A implementação e hospedagem do endpoint userinfo é opcional, exceto nos seguintes casos de uso:

Depois que o token de acesso for recuperado do endpoint do token, o Google enviará uma solicitação ao endpoint de informações do usuário para recuperar informações básicas de perfil sobre o usuário vinculado.

cabeçalhos de solicitação do endpoint userinfo
Authorization header O token de acesso do tipo Bearer.

Por exemplo, se seu ponto de extremidade de informações do usuário estiver disponível em https://myservice.example.com/userinfo, uma solicitação terá esta aparência:

GET /userinfo HTTP/1.1
Host: myservice.example.com
Authorization: Bearer ACCESS_TOKEN

Para que o endpoint userinfo processe solicitações, siga estas etapas:

  1. Extrair o token de acesso do cabeçalho "Autorização" e retornar as informações do usuário associado ao token de acesso.
  2. Se o token de acesso for inválido, retorne o erro "HTTP 401 Unused" ao usar o cabeçalho de resposta WWW-Authenticate. Veja abaixo um exemplo de resposta de erro userinfo:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    Se uma resposta de erro "401 Não autorizado" ou outra resposta de erro for retornada durante o processo de vinculação, o erro não poderá ser recuperado, o token recuperado será descartado e o usuário terá que iniciar o processo de vinculação novamente.
  3. Se o token de acesso for válido, retorne uma resposta HTTP 200 com o seguinte objeto JSON no corpo do HTTPS resposta:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    Se o seu endpoint de informações do usuário retornar uma resposta HTTP 200 bem-sucedida, o token e as reivindicações recuperados serão registrados na Conta do Google do usuário.

    resposta do endpoint userinfo
    sub Um ID exclusivo que identifica o usuário no seu sistema.
    email Endereço de e-mail do usuário.
    given_name Opcional:nome do usuário.
    family_name Opcional:sobrenome do usuário.
    name Opcional:o nome completo do usuário.
    picture Opcional:foto do perfil do usuário.