Cada integração com Cloud-to-cloud precisa incluir um mecanismo para autenticar usuários.
A autenticação permite vincular as Contas do Google dos usuários às contas de usuário no seu sistema de autenticação. Isso permite identificar seus usuários quando a ação receber uma intent de casa inteligente. A casa inteligente do Google só oferece suporte ao OAuth com um fluxo de código de autorização.
Esta página descreve como configurar seu servidor OAuth 2.0 para que ele funcione com a integração Cloud-to-cloud.
Vinculação de contas do Google com o OAuth
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 tokens, que é responsável por dois tipos de trocas:
- 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.
- 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.
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 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.

Requisitos
- É 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.
- Você precisa ter uma declaração de autorização do Google, como "Ao fazer login, você autoriza o Google a controlar seus dispositivos". Consulte a seção "Autorização de controle de dispositivos Google" das políticas para desenvolvedores do Google Home.
- Abra a página de vinculação do OAuth da Web e garanta que os usuários tenham um método claro para fazer login na Conta do Google, como campos para nome de usuário e senha. Não use o método de login do Google (GSI, na sigla em inglês) que permite que os usuários façam a vinculação sem serem direcionados à página de vinculação do OAuth da Web. Isso viola a política do Google.
Recomendações
Portanto, recomendamos que você faça o seguinte:
Mostrar a Política de Privacidade do Google. Inclua um link para a Política de Privacidade do Google na tela de consentimento.
Dados a serem compartilhados. Use uma linguagem clara e concisa para informar ao usuário quais dados do Google são necessários e por quê.
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.
Possibilidade de cancelamento. Ofereça uma maneira de voltar ou cancelar, se os usuários escolherem não fazer a vinculação.
Processo de login claro. Os usuários precisam ter um método claro de login na Conta do Google, como campos para nome de usuário e senha ou Fazer login com o Google.
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.
Capacidade de mudar a conta do usuário. Sugerir um método para os usuários mudarem as contas. 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.
Inclua seu logotipo. Mostre o logotipo da sua empresa na tela de consentimento. Use suas diretrizes de estilo para posicionar o logotipo. Se você quiser mostrar também o logotipo do Google, consulte Logos e marcas registradas.

Fluxo do código de autorização
Uma implementação de servidor OAuth 2.0 do fluxo de código de autorização consiste em dois endpoints, que seu serviço disponibiliza por HTTPS. O primeiro endpoint é o de autorização, que é responsável por encontrar ou receber o consentimento dos usuários para acessar 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. O segundo endpoint é o de troca de token, que é usado para receber strings criptografadas, chamadas de tokens, que autorizam um usuário a acessar seu serviço.
Quando um aplicativo do Google precisa chamar uma das APIs do seu serviço, o Google usa esses endpoints juntos para receber a permissão dos usuários para chamar essas APIs em nome deles.
Uma sessão do fluxo do código de autorização do OAuth 2.0 iniciada pelo Google tem o seguinte fluxo:
- O Google abre o endpoint de autorização no navegador do usuário. Se o fluxo for iniciado em um dispositivo somente por voz para uma ação, o Google transferirá a execução para um smartphone.
- O usuário faz login, se ainda não tiver feito isso, e concede ao Google permissão para acessar os dados dele com sua API, se ainda não tiver concedido.
- Seu serviço cria um código de autorização e o retorna ao Google. Para fazer isso, redirecione o navegador do usuário de volta ao Google com o código de autorização anexado à solicitação.
- O Google envia o código de autorização para o endpoint de troca de token, que verifica a autenticidade do código e retorna um token de acesso e um token de atualização. O token de acesso é um token de curta duração que seu serviço aceita como credenciais para acessar APIs. O token de atualização é um token de longa duração que o Google pode armazenar e usar para adquirir novos tokens de acesso quando eles expiram.
- Depois que o usuário concluir o fluxo de vinculação de contas, todas as solicitações posteriores enviadas pelo Google vão conter um token de acesso.
Processar solicitações de autorização
Quando você precisa vincular uma conta usando o fluxo de código de autorização do OAuth 2.0, o Google envia o usuário para seu endpoint de autorização com uma solicitação que inclui os seguintes parâmetros:
Parâmetros do endpoint de autorização | |
---|---|
client_id |
O ID do cliente atribuído ao Google. |
redirect_uri |
O URL para onde você envia a resposta à solicitação. |
state |
Um valor de contabilidade que é transmitido de volta ao Google inalterado no URI de redirecionamento. |
scope |
Opcional:um conjunto de strings de escopo delimitado por espaços que especifica os dados para os quais o Google está solicitando autorização. |
response_type |
O tipo de valor a ser retornado na resposta. Para o fluxo do código de autorização do OAuth 2.0, o tipo de resposta é sempre code .
|
user_locale |
A configuração de idioma da Conta do Google no formato RFC5646, usada para localizar seu conteúdo no idioma preferido do usuário. |
Por exemplo, se o endpoint de autorização estiver disponível em
https://myservice.example.com/auth
, uma solicitação poderá ser semelhante a esta:
GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&scope=REQUESTED_SCOPES&response_type=code&user_locale=LOCALE
Para que seu endpoint de autorização processe solicitações de login, siga estas etapas:
- Verifique se o
client_id
corresponde ao ID do cliente atribuído ao Google e se oredirect_uri
corresponde ao URL de redirecionamento fornecido pelo Google para seu serviço. Essas verificações são importantes para evitar o acesso a apps de cliente não intencionais ou configurados incorretamente. Se você oferece suporte a vários fluxos OAuth 2.0, confirme também se oresponse_type
écode
. - Verifique se o usuário fez login no serviço. Se o usuário não tiver feito login, conclua o fluxo de login ou inscrição do serviço.
- Gere um código de autorização para o Google usar e acessar sua API. O código de autorização pode ser qualquer valor de string, mas precisa representar exclusivamente o usuário, o cliente para o qual o token é destinado e o tempo de expiração do código. Ele não pode ser adivinhável. Normalmente, você emite códigos de autorização que expiram após aproximadamente 10 minutos.
- Confirme se o URL especificado pelo parâmetro
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
- Redireciona o navegador do usuário para o URL especificado pelo parâmetro
redirect_uri
. Inclua o código de autorização que você acabou de gerar e o valor de estado original e não modificado ao redirecionar anexando os parâmetroscode
estate
. Confira abaixo um exemplo do URL resultante:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING
Processar solicitações de troca de token
O endpoint de troca de token do seu serviço é responsável por dois tipos de trocas de token:
- Trocar códigos de autorização por tokens de acesso e de atualização
- Trocar tokens de atualização por tokens de acesso
As solicitações de troca de token incluem os seguintes parâmetros:
Parâmetros do endpoint de troca de token | |
---|---|
client_id |
Uma string que identifica a origem da solicitação como Google. Essa string precisa ser registrada no seu sistema como identificador exclusivo do Google. |
client_secret |
Uma string secreta registrada no Google para seu serviço. |
grant_type |
O tipo de token que está sendo trocado. Pode ser
authorization_code ou refresh_token . |
code |
Quando grant_type=authorization_code , esse parâmetro é o
código recebido pelo Google do endpoint de login ou de troca de
token. |
redirect_uri |
Quando grant_type=authorization_code , esse parâmetro é o
URL usado na solicitação de autorização inicial. |
refresh_token |
Quando grant_type=refresh_token , esse parâmetro é o
token de atualização que o Google recebeu do endpoint de troca de tokens. |
Configurar como o Google envia credenciais para seu servidor
Dependendo da implementação, o servidor de autorização espera receber as credenciais do cliente no corpo da solicitação ou no cabeçalho da solicitação.
Por padrão, o Google envia as credenciais no corpo da solicitação. Se o servidor de autorização exigir que as credenciais do cliente estejam no cabeçalho da solicitação, configure a integração Cloud-to-cloud da seguinte maneira:
Acessar o console do desenvolvedor
Na lista de projetos, clique em Abrir ao lado do projeto com que você quer trabalhar.
Em Da nuvem para a nuvem, selecione Desenvolver.
Clique em Abrir ao lado da integração.
Role para baixo até a seção Permissões (opcional) e marque a caixa de seleção Permitir que o Google transmita o ID e a chave secreta do cliente pelo cabeçalho de autenticação básica HTTP.
Clique em Salvar.
Trocar códigos de autorização por tokens de acesso e de atualização
Depois que o usuário faz login e o endpoint de autorização retorna um código de autorização de curta duração para o Google, o Google envia uma solicitação para o endpoint de troca de token para trocar o código de autorização por um token de acesso e um token de atualização.
Para essas solicitações, o valor de grant_type
é authorization_code
, e o
valor de code
é o valor do código de autorização que você concedeu
ao Google anteriormente. Confira abaixo um exemplo de solicitação para trocar um
código de autorização por um token de acesso e um token de atualização:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI
Para trocar códigos de autorização por um token de acesso e um token de atualização, o
endpoint de troca de token responde às solicitações POST
executando as seguintes
etapas:
- Verifique se o
client_id
identifica a origem da solicitação como uma origem autorizada e se oclient_secret
corresponde ao valor esperado. - Verifique se o código de autorização é válido e não expirou e se o ID do cliente especificado na solicitação corresponde ao ID do cliente associado ao código de autorização.
- Confirme se o URL especificado pelo parâmetro
redirect_uri
é idêntico ao valor usado na solicitação de autorização inicial. - Se não for possível verificar todos os critérios acima, retorne um erro HTTP
400 de solicitação inválida com
{"error": "invalid_grant"}
como corpo. - Caso contrário, use o ID do usuário do código de autorização para gerar um token de atualização e um token de acesso. Esses tokens podem ser qualquer valor de string, mas eles precisam representar de forma exclusiva o usuário e o cliente para o qual o token é destinado e não podem ser adivinhados. Para tokens de acesso, registre também o tempo de expiração do token, que geralmente é uma hora após a emissão. Os tokens de atualização não expiram.
- Retorne o seguinte objeto JSON no corpo da resposta HTTPS:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "refresh_token": "REFRESH_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
O Google armazena o token de acesso e o token de atualização para o usuário e registra a expiração do token de acesso. Quando o token de acesso expirar, o Google vai usar o token de atualização para receber um novo token de acesso do endpoint de troca de token.
Trocar tokens de atualização por tokens de acesso
Quando um token de acesso expira, o Google envia uma solicitação para o endpoint de troca de token para trocar um token de atualização por um novo token de acesso.
Para essas solicitações, o valor de grant_type
é refresh_token
, e o valor
de refresh_token
é o do token de atualização que você concedeu anteriormente ao
Google. Confira a seguir um exemplo de solicitação para trocar um token de atualização
por um token de acesso:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
Para trocar um token de atualização por um token de acesso, o endpoint de troca de tokens
responde às solicitações POST
executando as seguintes etapas:
- Verifique se o
client_id
identifica a origem da solicitação como Google e se oclient_secret
corresponde ao valor esperado. - Verifique se o token de atualização é válido e se o ID do cliente especificado na solicitação corresponde ao ID do cliente associado ao token de atualização.
- Se não for possível verificar todos os critérios acima, retorne um erro HTTP 400
de solicitação inválida com
{"error": "invalid_grant"}
como corpo. - Caso contrário, use o ID do usuário do token de atualização para gerar um token de acesso. Esses tokens podem ser qualquer valor de string, mas precisam representar de forma exclusiva o usuário e o cliente para o qual o token é destinado e não podem ser adivinhados. Para tokens de acesso, registre também o tempo de expiração do token, geralmente uma hora após a emissão.
- Retorne o seguinte objeto JSON no corpo da resposta
HTTPS:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
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:
- Login da conta vinculada com o Google One Tap.
- Assinatura sem atrito no AndroidTV.
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:
- Extrair o token de acesso do cabeçalho "Autorização" e retornar as informações do usuário associado ao token de acesso.
- 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. 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.