Vinculação da Conta do Google com o OAuth

As contas são vinculadas usando os fluxos implícitos e de código de autorização do OAuth 2.0 padrão do setor. Seu serviço precisa oferecer suporte a endpoints de autorização e troca de token compatíveis com o OAuth 2.0.

No fluxo implícito, o Google abre o endpoint de autorização no navegador do usuário. Após o login, você retorna um token de acesso de longa duração para o Google. Agora, esse token de acesso está incluído em todas as solicitações enviadas pelo Google.

No fluxo do código de autorização, você precisa de dois endpoints:

  • O endpoint de autorização, que apresenta a interface de login aos usuários que ainda não fizeram login. O endpoint de autorização também cria um código de autorização de curta duração para registrar o consentimento dos usuários para o acesso solicitado.

  • O endpoint de troca de token, que é responsável por dois tipos de trocas:

    1. Troca um código de autorização por um token de atualização de longa duração e um de acesso de curta duração. Essa troca acontece quando o usuário passa pelo fluxo de vinculação de conta.
    2. Troca um token de atualização de longa duração por um de acesso de curta duração. Essa troca acontece quando o Google precisa de um novo token de acesso porque o anterior expirou.

Escolher um fluxo do OAuth 2.0

Embora o fluxo implícito seja mais simples de implementar, o Google recomenda que os tokens de acesso emitidos pelo fluxo implícito nunca expirem. Isso ocorre porque o usuário é forçado a vincular a conta novamente depois que um token expira com o fluxo implícito. Se você precisar da expiração do token por motivos de segurança, é altamente recomendável usar o fluxo de código de autorização.

Diretrizes de design

Esta seção descreve os requisitos de design e as recomendações para a tela do usuário que você hospeda para fluxos de vinculação do OAuth. Depois de ser chamada pelo app do Google, a plataforma mostra uma página de login no Google e uma tela de consentimento de vinculação de conta para o usuário. O usuário é direcionado de volta ao app do Google depois de dar consentimento para vincular contas.

Esta figura mostra as etapas para um usuário vincular a Conta do Google
            ao seu sistema de autenticação. A primeira captura de tela mostra a vinculação iniciada pelo usuário na sua plataforma. A segunda imagem mostra o login do usuário no Google, e a terceira mostra o consentimento e a confirmação do usuário para vincular a Conta do Google ao seu app. A última captura de tela mostra uma conta de usuário vinculada no app Google.
Figura 1. Telas de login do usuário e de vinculação de contas ao Google.

Requisitos

  1. É necessário informar que a conta do usuário será vinculada ao Google, não a um produto específico, como o Google Home ou o Google Assistente.

Recomendações

Portanto, recomendamos que você faça o seguinte:

  1. Exibir a Política de Privacidade do Google. Incluir um link para a Política de Privacidade do Google na tela de consentimento.

  2. Dados a serem compartilhados. Use uma linguagem clara e concisa para informar ao usuário quais dados o Google exige e por quê.

  3. Call-to-action clara. Informe uma call-to-action clara na tela de consentimento, como "Concordar e vincular". Isso é necessário porque os usuários precisam entender quais dados eles precisam compartilhar com o Google para vincular as contas.

  4. Possibilidade de cancelamento. Ofereça uma maneira de voltar ou cancelar, se o usuário não quiser fazer a vinculação.

  5. Processo de login claro. Os usuários precisam ter um método claro para fazer login na Conta do Google, como campos para nome de usuário e senha ou Fazer login com o Google.

  6. Possibilidade de desvincular. Ofereça um mecanismo para os usuários desvincularem, como um URL para as configurações da conta deles na sua plataforma. Como alternativa, é possível incluir um link para a Conta do Google, onde os usuários podem gerenciar a conta vinculada.

  7. Capacidade de mudar a conta do usuário. Sugira um método para os usuários trocarem de conta. Isso é especialmente benéfico se os usuários tendem a ter várias contas.

    • Se um usuário precisar fechar a tela de consentimento para alternar contas, envie um erro recuperável para o Google para que o usuário possa fazer login na conta desejada com a vinculação OAuth e o fluxo implícito.
  8. Inclua seu logotipo. Mostre o logotipo da sua empresa na tela de consentimento. Use as diretrizes de estilo para posicionar o logotipo. Se você quiser mostrar também o logotipo do Google, consulte Logos e marcas registradas.

Criar o projeto

Para criar um projeto que use a vinculação de contas:

  1. Go to the Google API Console.
  2. Clique em Criar projeto .
  3. Digite um nome ou aceite a sugestão gerada.
  4. Confirme ou edite os campos restantes.
  5. Clique em Create .

Para visualizar o seu ID do projeto:

  1. Go to the Google API Console.
  2. Encontre seu projeto na tabela na página de destino. O ID do projeto aparece na coluna ID .

O processo de vinculação da Conta do Google inclui uma tela de consentimento que informa aos usuários o aplicativo que está solicitando acesso aos dados deles, o tipo de dados solicitado e os termos aplicáveis. Você vai precisar configurar sua tela de consentimento do OAuth antes de gerar um ID do cliente da API do Google.

  1. Abra a página Tela de consentimento do OAuth do console de APIs do Google.
  2. Se for solicitado, selecione o projeto que você acabou de criar.
  3. Na página "Tela de consentimento do OAuth", preencha o formulário e clique no botão "Salvar".

    Nome do aplicativo:o nome do aplicativo que solicita o consentimento. O nome deve refletir com precisão seu aplicativo e ser consistente com o nome do aplicativo que os usuários veem em outros lugares. O nome do aplicativo vai aparecer na tela de consentimento da vinculação de conta.

    Logotipo do aplicativo:uma imagem na tela de consentimento que ajuda os usuários a reconhecer seu app. O logotipo aparece na tela de consentimento de vinculação de conta e nas configurações da conta.

    E-mail de suporte:para os usuários entrarem em contato com você com perguntas sobre o consentimento.

    Escopos das APIs do Google:permitem que seu aplicativo acesse os dados particulares do Google dos usuários. Para o caso de vinculação de Contas do Google, o escopo padrão (e-mail, perfil, openid) é suficiente. Não é necessário adicionar escopos sensíveis. Geralmente, é uma prática recomendada solicitar escopos de forma incremental, no momento em que o acesso é necessário, em vez de fazer isso de antemão. Saiba mais.

    Domínios autorizados:para proteger você e seus usuários, o Google só permite o uso de domínios autorizados por aplicativos autenticados com o OAuth. Os links dos seus aplicativos precisam ser hospedados em domínios autorizados. Saiba mais.

    Link da página inicial do aplicativo:a página inicial do seu aplicativo. Precisa ser hospedado em um domínio autorizado.

    Link da Política de Privacidade do app:aparece na tela de consentimento da vinculação da Conta do Google. Precisa estar hospedado em um domínio autorizado.

    Link dos Termos de Serviço do aplicativo (opcional): precisa ser hospedado em um domínio autorizado.

    Figura 1. Tela de consentimento para vinculação da Conta do Google de um app fictício, Tunery

  4. Marque o "Status de verificação" se a inscrição precisar ser verificada, em seguida, clique no botão "Enviar para verificação". Consulte os requisitos de verificação do OAuth para mais detalhes.

Implementar seu servidor OAuth

To support the OAuth 2.0 implicit flow, your service makes an authorization endpoint available by HTTPS. This endpoint is responsible for authentication and obtaining consent from users for data access. The authorization endpoint presents a sign-in UI to your users that aren't already signed in and records consent to the requested access.

When a Google application needs to call one of your service's authorized APIs, Google uses this endpoint to get permission from your users to call these APIs on their behalf.

A typical OAuth 2.0 implicit flow session initiated by Google has the following flow:

  1. Google opens your authorization endpoint in the user's browser. The user signs in, if not signed in already, and grants Google permission to access their data with your API, if they haven't already granted permission.
  2. Your service creates an access token and returns it to Google. To do so, redirect the user's browser back to Google with the access token attached to the request.
  3. Google calls your service's APIs and attaches the access token with each request. Your service verifies that the access token grants Google authorization to access the API and then completes the API call.

Handle authorization requests

When a Google application needs to perform account linking via an OAuth 2.0 implicit flow, Google sends the user to your authorization endpoint with a request that includes the following parameters:

Authorization endpoint parameters
client_id The client ID you assigned to Google.
redirect_uri The URL to which you send the response to this request.
state A bookkeeping value that is passed back to Google unchanged in the redirect URI.
response_type The type of value to return in the response. For the OAuth 2.0 implicit flow, the response type is always token.
user_locale The Google Account language setting in RFC5646 format used to localize your content in the user's preferred language.

For example, if your authorization endpoint is available at https://myservice.example.com/auth, a request might look like the following:

GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token&user_locale=LOCALE

For your authorization endpoint to handle sign-in requests, do the following steps:

  1. Verify the client_id and redirect_uri values to prevent granting access to unintended or misconfigured client apps:

    • Confirm that the client_id matches the client ID you assigned to Google.
    • Confirm that the URL specified by the redirect_uri parameter has the following form:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
      
  2. Check if the user is signed in to your service. If the user isn't signed in, complete your service's sign-in or sign-up flow.

  3. Generate an access token for Google to use to access your API. The access token can be any string value, but it must uniquely represent the user and the client the token is for and must not be guessable.

  4. Send an HTTP response that redirects the user's browser to the URL specified by the redirect_uri parameter. Include all of the following parameters in the URL fragment:

    • access_token: The access token you just generated
    • token_type: The string bearer
    • state: The unmodified state value from the original request

    The following is an example of the resulting URL:

    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING

Google's OAuth 2.0 redirect handler receives the access token and confirms that the state value hasn't changed. After Google has obtained an access token for your service, Google attaches the token to subsequent calls to your service APIs.

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.

Como validar a implementação

É possível validar sua implementação usando a ferramenta OAuth 2.0 Playground.

Na ferramenta, siga estas etapas:

  1. Clique em Configuração para abrir a janela de configuração do OAuth 2.0.
  2. No campo Fluxo do OAuth, selecione Lado do cliente.
  3. No campo Endpoints OAuth, selecione Personalizado.
  4. Especifique o endpoint OAuth 2.0 e o ID do cliente atribuído ao Google nos campos correspondentes.
  5. Na seção Etapa 1, não selecione nenhum escopo do Google. Em vez disso, deixe esse campo em branco ou digite um escopo válido para seu servidor (ou uma string arbitrária se você não usar escopos do OAuth). Quando terminar, clique em Autorizar APIs.
  6. Nas seções Etapa 2 e Etapa 3, siga o fluxo OAuth 2.0 e verifique se cada etapa funciona conforme o esperado.

É possível validar sua implementação usando a ferramenta Demo de vinculação de Contas do Google.

Na ferramenta, siga estas etapas:

  1. Clique no botão Fazer login com o Google.
  2. Escolha a conta que você quer vincular.
  3. Insira o ID do serviço.
  4. Opcionalmente, insira um ou mais escopos para os quais você vai solicitar acesso.
  5. Clique em Iniciar demonstração.
  6. Quando solicitado, confirme que você pode consentir e negar o pedido de vinculação.
  7. Confirme se você foi redirecionado para a plataforma.