Vinculação de Conta do Google com OAuth

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

In the implicit flow, Google opens your authorization endpoint in the user's browser. After successful sign in, you return a long-lived access token to Google. This access token is now included in every request sent from Google.

In the authorization code flow, you need two endpoints:

  • The authorization endpoint, which presents the sign-in UI to your users that aren't already signed in. The authorization endpoint also creates a short-lived authorization code to record users' consent to the requested access.

  • The token exchange endpoint, which is responsible for two types of exchanges:

    1. Exchanges an authorization code for a long-lived refresh token and a short-lived access token. This exchange happens when the user goes through the account linking flow.
    2. Exchanges a long-lived refresh token for a short-lived access token. This exchange happens when Google needs a new access token because the one it had expired.

Choose an OAuth 2.0 flow

Although the implicit flow is simpler to implement, Google recommends that access tokens issued by the implicit flow never expire. This is because the user is forced to link their account again after a token expires with the implicit flow. If you need token expiration for security reasons, we strongly recommend that you use the authorization code flow instead.

Design guidelines

This section describes the design requirements and recommendations for the user screen that you host for OAuth linking flows. After it's called by Google's app, your platform displays a sign in to Google page and account linking consent screen to the user. The user is directed back to Google's app after giving their consent to link accounts.

This figure shows the steps for a user to link their Google account
            to your authentication system. The first screenshot shows
            user-initiated linking from your platform. The second image shows
            user sign-in to Google, while the third shows the user consent and
            confirmation for linking their Google account with your app. The
            final screenshot shows a successfully linked user account in the
            Google app.
Figure 1. Account linking user sign in to Google and consent screens.

Requirements

  1. You must communicate that the user’s account will be linked to Google, not a specific Google product like Google Home or Google Assistant.

Recommendations

We recommend that you do the following:

  1. Display Google's Privacy Policy. Include a link to Google’s Privacy Policy on the consent screen.

  2. Data to be shared. Use clear and concise language to tell the user what data of theirs Google requires and why.

  3. Clear call-to-action. State a clear call-to-action on your consent screen, such as “Agree and link.” This is because users need to understand what data they're required to share with Google to link their accounts.

  4. Ability to cancel. Provide a way for users to go back or cancel, if they choose not to link.

  5. Clear sign-in process. Ensure that users have clear method for signing in to their Google account, such as fields for their username and password or Sign in with Google.

  6. Ability to unlink. Offer a mechanism for users to unlink, such as a URL to their account settings on your platform. Alternatively, you can include a link to Google Account where users can manage their linked account.

  7. Ability to change user account. Suggest a method for users to switch their account(s). This is especially beneficial if users tend to have multiple accounts.

    • If a user must close the consent screen to switch accounts, send a recoverable error to Google so the user can sign in to the desired account with OAuth linking and the implicit flow.
  8. Include your logo. Display your company logo on the consent screen. Use your style guidelines to place your logo. If you wish to also display Google's logo, see Logos and trademarks.

Criar o projeto

Para criar seu projeto e usar a vinculação de contas, faça o seguinte:

  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 de Contas do Google inclui uma tela de consentimento que informa aos usuários o aplicativo que está solicitando acesso aos dados deles, o tipo de dado solicitado e os termos aplicáveis. Você precisa configurar a tela de permissão OAuth antes de gerar um ID do cliente da API do Google.

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

    Nome do aplicativo: o nome do aplicativo que está solicitando o consentimento. O nome precisa refletir com precisão o aplicativo e ser consistente com o nome do aplicativo que os usuários veem em outros lugares. O nome do aplicativo vai ser mostrado na tela de permissão da vinculação de contas.

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

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

    Escopos para APIs do Google:os escopos permitem que seu aplicativo acesse os dados particulares do usuário do Google. Para o caso de uso de vinculação de Conta do Google, o escopo padrão (e-mail, perfil, OpenID) é suficiente. Não é necessário adicionar escopos confidenciais. Geralmente, é uma prática recomendada solicitar escopos de forma incremental no momento em que o acesso é necessário, em vez de antecipadamente. Saiba mais.

    Domínios autorizados:para proteger você e seus usuários, o Google permite que apenas aplicativos com autenticação OAuth usem os domínios autorizados. Os links dos seus aplicativos precisam estar hospedados em domínios autorizados. Saiba mais.

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

    Link da Política de Privacidade do aplicativo:aparece na tela de permissão para vinculação de Contas 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 de vinculação de Conta do Google para um aplicativo fictício, o Tunery

  4. Marque o "Status da verificação" se o seu aplicativo precisar de verificação e clique no botão "Enviar para verificação" para enviá-lo para verificação. Consulte os requisitos de verificação do OAuth para ver mais detalhes.

Implementar o servidor OAuth

Para oferecer suporte ao fluxo implícito do OAuth 2.0, seu serviço faz uma autorização de destino disponível por HTTPS. Esse endpoint é responsável pela autenticação e obter consentimento dos usuários para acesso aos dados. O endpoint de autorização apresenta uma interface de login aos usuários que ainda não estão conectados e registra consentir com o acesso solicitado.

Quando um aplicativo do Google precisar 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.

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

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

Processar solicitações de autorização

Quando um aplicativo do Google precisa vincular uma conta usando um OAuth 2.0. fluxo implícito, o Google envia o usuário para seu endpoint de autorização com um que inclua os seguintes parâmetros:

Parâmetros de endpoint de autorização
client_id O ID do cliente que você atribuiu ao Google.
redirect_uri O URL para o qual você envia a resposta para essa solicitação.
state Um valor de contabilidade que é retornado ao Google inalterado na URI de redirecionamento.
response_type O tipo de valor a ser retornado na resposta. Para a implementação implícita do OAuth 2.0 fluxo, o tipo de resposta será sempre token.
user_locale A configuração de idioma da Conta do Google no RFC5646 formato usado para localizar seu conteúdo no idioma de preferência do usuário.

Por exemplo, se o endpoint de autorização estiver disponível em https://myservice.example.com/auth, uma solicitação terá esta aparência:

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

Para que o endpoint de autorização processe solicitações de login, faça o seguinte: etapas:

  1. Verifique os valores client_id e redirect_uri para impedir a concessão de acesso a apps clientes não intencionais ou configurados incorretamente:

    • Confirme se o client_id corresponde ao ID do cliente que você atribuídas ao Google.
    • Confirme se o URL especificado pelo redirect_uri tem o seguinte formato:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
      
  2. Verifique se o usuário está conectado ao seu serviço. Se o usuário não tiver feito login conclua o fluxo de login ou inscrição do serviço.

  3. Gere um token de acesso para o Google acessar sua API. A token de acesso pode ser qualquer valor de string, mas deve representar exclusivamente o usuário e o cliente a que o token se destina e não pode ser adivinhado.

  4. Envia uma resposta HTTP que redireciona o navegador do usuário para o URL especificado pelo parâmetro redirect_uri. Inclua todos os elementos parâmetros a seguir no fragmento de URL:

    • access_token: o token de acesso que você acabou de gerar
    • token_type: a string bearer
    • state: o valor de estado não modificado do original. solicitação

    Veja a seguir um exemplo de URL resultante:

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

O gerenciador de redirecionamento do OAuth 2.0 do Google recebe o token de acesso e confirma que o valor state não mudou. Depois que o Google tiver token de acesso do seu serviço, o Google o anexa às chamadas subsequentes às APIs de serviço.

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

您可以通过使用验证实现的OAuth 2.0游乐场工具。

在工具中,执行以下步骤:

  1. 单击配置打开的OAuth 2.0配置窗口。
  2. OAuth流场中,选择客户端
  3. OAuth端点字段中,选择自定义
  4. 在相应字段中指定您的 OAuth 2.0 端点和您分配给 Google 的客户端 ID。
  5. 步骤1部分,不要选择任何谷歌范围。相反,将此字段留空或键入对您的服务器有效的范围(如果不使用 OAuth 范围,则输入任意字符串)。当您完成后,单击授权的API。
  6. 步骤2步骤3段,完成OAuth 2.0流程和验证每个步骤按预期工作。

您可以通过验证您的实现谷歌帐户链接演示工具。

在工具中,执行以下步骤:

  1. 点击登录在与谷歌按钮。
  2. 选择您要关联的帐户。
  3. 输入服务标识。
  4. (可选)输入您将请求访问的一个或多个范围。
  5. 单击开始演示
  6. 出现提示时,确认您可以同意并拒绝链接请求。
  7. 确认您被重定向到您的平台。