Visão geral
O login com o Google simplificado baseado em OAuth adiciona o login com o Google além da vinculação OAuth. Isso oferece uma experiência de vinculação perfeita para usuários do Google e, opcionalmente, permite a criação de contas, o que permite que o usuário crie uma nova conta no seu serviço usando a Conta do Google.
Para vincular contas com o OAuth e o Fazer login com o Google, siga estas etapas gerais:
- Primeiro, peça ao usuário para dar consentimento de acesso ao perfil do Google dele.
- Use as informações no perfil para verificar se a conta de usuário existe.
- Para usuários atuais, vincule as contas.
- Se não for possível encontrar uma correspondência para o usuário do Google no seu sistema de autenticação, valide o token de ID recebido do Google. Se o serviço aceitar a criação de contas, você poderá criar um usuário com base nas informações do perfil contidas no token de ID.
Figura 1. Vinculação de conta no smartphone de um usuário com a vinculação simplificada
Vinculação simplificada: fluxo do OAuth + Fazer login com o Google
O diagrama de sequência a seguir detalha as interações entre o usuário, o Google e seu endpoint de troca de tokens para vinculação simplificada.
Funções e responsabilidades
A tabela a seguir define as funções e responsabilidades dos participantes no fluxo de vinculação simplificada.
| Ator / componente | Função da GAL | Responsabilidades |
|---|---|---|
| App / servidor do Google | Cliente OAuth | Obtém o consentimento do usuário para o recurso Fazer login com o Google, transmite declarações de identidade (JWT) ao seu servidor e armazena com segurança os tokens resultantes. |
| Seu endpoint de troca de token | Provedor de identidade / servidor de autorização | Valida declarações de identidade, verifica contas existentes, processa
os intents de vinculação de conta obrigatórios (check,
get) e o intent create opcional, além de emitir
tokens com base nos intents solicitados. |
| Sua API de serviço | Servidor de recursos | Fornece acesso aos dados do usuário quando apresentado com um token de acesso válido. |
Requisitos para a vinculação simplificada
- Implemente o fluxo de vinculação básica do OAuth. Seu serviço precisa oferecer suporte a endpoints de autorização e troca de tokens compatíveis com o OAuth 2.0.
- O endpoint de troca de token precisa oferecer suporte a declarações de JSON Web Token (JWT) e implementar as intents
checkegetnecessárias, além da intentcreateopcional.
Lógica de decisão para vinculação simplificada
A lógica a seguir determina como as intents são chamadas durante o fluxo de vinculação simplificada:
- O usuário tem uma conta no seu sistema de autenticação? (O usuário decide
ao selecionar SIM ou NÃO)
- SIM : o usuário usa o e-mail associado à Conta do Google para fazer login na sua plataforma? (O usuário decide selecionando SIM ou NÃO)
- SIM : o usuário tem uma conta correspondente no seu sistema de autenticação? (A intenção
checké chamada para confirmação)- SIM : a intenção
geté chamada e a conta é vinculada se a intenção de recebimento for retornada. - NÃO : Criar conta? (O usuário decide selecionando SIM ou NÃO;
aplicável apenas se o serviço aceitar a criação de contas)
- SIM : a intent
createé chamada e a conta é vinculada se a intent de criação for retornada com sucesso. - NÃO : o fluxo de vinculação do OAuth é acionado, o usuário é direcionado ao navegador e recebe a opção de vincular com um e-mail diferente.
- SIM : a intent
- SIM : a intenção
- NÃO : o fluxo de vinculação do OAuth é acionado, o usuário é direcionado ao navegador e tem a opção de vincular com um e-mail diferente.
- SIM : o usuário tem uma conta correspondente no seu sistema de autenticação? (A intenção
- NÃO : o usuário tem uma conta correspondente no seu sistema de autenticação? (A intenção
checké chamada para confirmação)- SIM : a intenção
geté chamada e a conta é vinculada se get intent for retornado com sucesso. - NÃO : se o serviço for compatível com a criação de contas, a
intent
createserá chamada, e a conta será vinculada se a intent de criação for retornada com sucesso. Se a criação de conta não for compatível, seu endpoint vai retornar HTTP 401 linking_error para acionar o fluxo de vinculação OAuth de substituição.
- SIM : a intenção
- SIM : o usuário usa o e-mail associado à Conta do Google para fazer login na sua plataforma? (O usuário decide selecionando SIM ou NÃO)
Receita de implementação
Seu endpoint de troca de token precisa implementar as intents check e get
obrigatórias e, opcionalmente, a intent create para oferecer suporte à vinculação simplificada.
Siga estas etapas para processar as diferentes intents:
Verificar se já existe uma conta de usuário (verificar a intent)
O Google chama o endpoint de troca de tokens para verificar se o usuário do Google existe no seu sistema. Para detalhes dos parâmetros, consulte Intents de vinculação simplificada.
Receita de implementação
Para processar a intent check necessária, faça o seguinte:
Validar a solicitação:
- Verifique
client_id,client_secretegrant_type(precisa serurn:ietf:params:oauth:grant-type:jwt-bearer). - Valide o
assertion(JWT) usando os critérios em Validação de JWT.
- Verifique
Pesquisar usuário:
- Verifique se o ID da Conta do Google (
sub) ou o endereço de e-mail no JWT corresponde a um usuário no seu banco de dados.
- Verifique se o ID da Conta do Google (
Responder:
- Se encontrado: retorne HTTP
200 OKcom{"account_found": "true"}. - Se não encontrado: retorne HTTP
404 Not Foundcom{"account_found": "false"}.
- Se encontrado: retorne HTTP
Processar a vinculação automática (receber intent)
Se a conta existir, o Google vai chamar seu endpoint com intent=get para recuperar tokens. Para detalhes dos parâmetros, consulte Intents de vinculação simplificada.
Receita de implementação
Para processar a intent get necessária, faça o seguinte:
Validar a solicitação:
- Verifique
client_id,client_secretegrant_type. - Valide a
assertion(JWT).
- Verifique
Pesquisar usuário:
- Verifique se o usuário existe usando a declaração
subouemail.
- Verifique se o usuário existe usando a declaração
Responder:
- Em caso de sucesso: gere e retorne
access_token,refresh_tokeneexpires_inem uma resposta JSON (HTTP200 OK). - Se a vinculação falhar: retorne HTTP
401 Unauthorizedcom{"error": "linking_error"}e umlogin_hintopcional para voltar à vinculação OAuth padrão.
- Em caso de sucesso: gere e retorne
Processar a criação de contas usando o recurso "Fazer login com o Google" (intent "create")
Se o serviço oferece suporte à criação de contas e nenhuma conta existe, o Google chama seu endpoint com intent=create para criar um novo usuário. Para detalhes dos parâmetros,
consulte Intents de vinculação simplificada.
Receita de implementação
Para processar a intent create opcional, realize as seguintes ações:
Validar a solicitação:
- Verifique
client_id,client_secretegrant_type. - Valide a
assertion(JWT).
- Verifique
Verificar se o usuário não existe:
- Verifique se o
subouemailjá está no seu banco de dados. - Se o usuário existir: retorne HTTP
401 Unauthorizedcom{"error": "linking_error", "login_hint": "USER_EMAIL"}para forçar o fallback para a vinculação do OAuth.
- Verifique se o
Crie uma conta:
- Use as declarações
sub,email,nameepicturedo JWT para criar um novo registro de usuário.
- Use as declarações
Responder:
- Gere e retorne tokens em uma resposta JSON (HTTP
200 OK).
- Gere e retorne tokens em uma resposta JSON (HTTP
Receber seu ID do cliente da API do Google
Você precisará fornecer seu ID do cliente da API do Google durante o processo de registro da vinculação de contas. Para receber o ID do cliente da API usando o projeto criado ao concluir as etapas de vinculação do OAuth. Para fazer isso, siga estas etapas:
- Acesse a página "Clientes".
Crie ou selecione um projeto das APIs do Google.
Se o projeto não tiver um ID do cliente para o tipo de aplicativo da Web, clique em Criar cliente para criar um. Inclua o domínio do seu site na caixa Origens JavaScript autorizadas. Ao realizar testes ou desenvolvimento local, adicione
http://localhostehttp://localhost:<port_number>ao campo Origens JavaScript autorizadas.
Validar sua implementação
您可以使用 OAuth 2.0 Playground 工具验证您的实现。
在该工具中,执行以下步骤:
- 点击配置 以打开“OAuth 2.0 配置”窗口。
- 在 OAuth flow(OAuth 流程)字段中,选择 Client-side(客户端)。
- 在 OAuth Endpoints 字段中,选择 Custom。
- 在相应字段中指定您的 OAuth 2.0 端点以及您分配给 Google 的客户端 ID。
- 在第 1 步部分中,请勿选择任何 Google 范围。请将此字段留空,或输入适用于您服务器的范围(如果您不使用 OAuth 范围,则输入任意字符串)。完成后,点击 Authorize APIs。
- 在第 2 步和第 3 步部分中,完成 OAuth 2.0 流程,并验证每个步骤是否按预期运行。
您可以使用 Google 账号关联演示工具验证您的实现。
在该工具中,执行以下步骤:
- 点击使用 Google 账号登录按钮。
- 选择您要关联的账号。
- 输入服务 ID。
- (可选)输入您将请求访问的一个或多个范围。
- 点击开始演示。
- 当系统提示时,请确认您可以同意或拒绝关联请求。
- 确认您已重定向到相应平台。