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
处理自动关联(获取 intent)
如果账号存在,Google 会使用 intent=get 调用您的端点以检索令牌。如需了解参数详情,请参阅简化的关联
intent。
实现方案
如需处理所需的 get intent,请执行以下操作:
验证请求:
- 验证
client_id、client_secret和grant_type。 - 验证
assertion(JWT)。
- 验证
查找用户:
- 使用
sub或email声明验证用户是否存在。
- 使用
回应:
- 如果成功:在 JSON 响应 (HTTP
200 OK) 中生成并返回access_token、refresh_token和expires_in。 - 如果关联失败:返回 HTTP
401 Unauthorized,其中包含{"error": "linking_error"}和可选的login_hint,以便回退 到标准 OAuth 关联。
- 如果成功:在 JSON 响应 (HTTP
使用“使用 Google 账号登录”功能处理账号创建事宜(创建 intent)
如果您的服务支持账号创建,并且不存在任何账号,Google 会使用 intent=create 调用您的端点,以创建新用户。如需了解参数详情,
请参阅 简化的关联流程
intent。
实现方案
如需处理可选的 create intent,请执行以下操作:
验证请求:
- 验证
client_id、client_secret和grant_type。 - 验证
assertion(JWT)。
- 验证
验证用户不存在:
- 检查您的数据库中是否已存在
sub或email。 - 如果用户存在,请返回 HTTP
401 Unauthorized,并使用{"error": "linking_error", "login_hint": "USER_EMAIL"}强制 回退到 OAuth 关联流程。
- 检查您的数据库中是否已存在
创建账号:
- 使用 JWT 中的
sub、email、name和picture声明创建新的用户记录。
- 使用 JWT 中的
回应:
- 在 JSON 响应中生成并返回令牌 (HTTP
200 OK)。
- 在 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。
- (可选)输入您将请求访问的一个或多个范围。
- 点击开始演示。
- 当系统提示时,请确认您可以同意或拒绝关联请求。
- 确认您已重定向到相应平台。