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.
在隐式流程中,Google 会在用户的浏览器中打开您的授权端点。成功登录后,您将向 Google 返回一个长期访问令牌。现在,此访问令牌会包含在 Google 发送的每个请求中。
在授权代码流程中,您需要两个端点:
授权端点,用于向尚未登录的用户显示登录界面。授权端点还会创建一个短期授权代码,以记录用户对所请求访问权限的同意情况。
令牌交换端点,负责两种类型的交换:
- 使用授权代码换取长期有效的刷新令牌和短期有效的访问令牌。当用户完成账号关联流程时,就会发生此交换。
- 将长期有效的刷新令牌换成短期有效的访问令牌。当 Google 需要新的访问令牌(因为现有访问令牌已过期)时,就会发生这种交换。
选择 OAuth 2.0 流程
虽然隐式流程更易于实现,但 Google 建议通过隐式流程签发的访问令牌永不过期。这是因为,在隐式流程中,令牌过期后,系统会强制用户重新关联其账号。如果您出于安全考虑需要令牌过期,我们强烈建议您改用授权码流程。
设计准则
本部分介绍了您为 OAuth 关联流程托管的用户屏幕的设计要求和建议。在 Google 应用调用该 API 后,您的平台会向用户显示登录 Google 页面和账号关联意见征求界面。同意关联账号后,系统会将用户重定向回 Google 的应用。
要求
- 您必须说明用户的账号将与 Google 相关联,而非 Google Home 或 Google 助理等特定 Google 产品相关联。
建议
建议您执行以下操作:
显示 Google 的隐私权政策。在同意屏幕上添加指向 Google 隐私权政策的链接。
要共享的数据。使用清晰简洁的语言告知用户 Google 需要哪些用户数据以及原因。
添加醒目的号召性用语。在用户同意页面上提供明确的号召性用语,例如“同意并关联”。这是因为用户需要了解他们需要与 Google 分享哪些数据才能关联账号。
可以取消。为用户提供返回或取消链接的途径,如果用户选择不进行关联。
明确的登录流程。确保用户有明确的 Google 账号登录方法,例如用户名和密码字段或使用 Google 账号登录。
能够解除关联。提供一种可让用户解除关联的机制,例如指向您平台上账号设置的网址。或者,您也可以添加指向 Google 账号的链接,以便用户管理其关联的账号。
能够更改用户账号。建议用户切换账号的方法。如果用户通常拥有多个账号,这种做法尤为有益。
- 如果用户必须关闭意见征求界面才能切换账号,请向 Google 发送可恢复的错误,以便用户可以使用 OAuth 关联和隐式流程登录所需的账号。
添加您的徽标。在意见征求页面上显示您的公司徽标。 按照您的样式准则放置徽标。如果您还想显示 Google 的徽标,请参阅徽标和商标。
Criar o projeto
Para criar um projeto que use a vinculação de contas:
Configurar a tela de consentimento do OAuth
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.
- Abra a página Tela de consentimento do OAuth do console de APIs do Google.
- Se for solicitado, selecione o projeto que você acabou de criar.
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
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
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:
- 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.
- 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.
- 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:
Verifique os valores
client_id
eredirect_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
- Confirme se o
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.
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.
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 gerartoken_type
: a stringbearer
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.
Handle userinfo requests
The userinfo endpoint is an OAuth 2.0 protected resource that return claims about the linked user. Implementing and hosting the userinfo endpoint is optional, except for the following use cases:
- Linked Account Sign-In with Google One Tap.
- Frictionless subscription on AndroidTV.
After the access token has been successfully retrieved from your token endpoint, Google sends a request to your userinfo endpoint to retrieve basic profile information about the linked user.
userinfo endpoint request headers | |
---|---|
Authorization header |
The access token of type Bearer. |
For example, if your userinfo endpoint is available at
https://myservice.example.com/userinfo
, a request might look like the following:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
For your userinfo endpoint to handle requests, do the following steps:
- Extract access token from the Authorization header and return information for the user associated with the access token.
- If the access token is invalid, return an HTTP 401 Unauthorized error with using the
WWW-Authenticate
Response Header. Below is an example of a userinfo error response: If a 401 Unauthorized, or any other unsuccessful error response is returned during the linking process, the error will be non-recoverable, the retrieved token will be discarded and the user will have to initiate the linking process again.HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
If the access token is valid, return and HTTP 200 response with the following JSON object in the body of the HTTPS response:
If your userinfo endpoint returns an HTTP 200 success response, the retrieved token and claims are registered against the user's Google account.{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }
userinfo endpoint response sub
A unique ID that identifies the user in your system. email
Email address of the user. given_name
Optional: First name of the user. family_name
Optional: Last name of the user. name
Optional: Full name of the user. picture
Optional: Profile picture of the user.
Como validar a implementação
您可以使用 OAuth 2.0 Playground 工具验证您的实现。
在该工具中,执行以下步骤:
- 点击配置 以打开 OAuth 2.0 配置窗口。
- 在 OAuth flow 字段中,选择 Client-side(客户端)。
- 在 OAuth 端点字段中,选择自定义。
- 在相应字段中指定您的 OAuth 2.0 端点和您分配给 Google 的客户端 ID。
- 在第 1 步部分,不要选择任何 Google 范围。请将此字段留空或输入对服务器有效的范围(如果您不使用 OAuth 范围,则可以输入任意字符串)。完成后,点击授权 API。
- 在 Step 2 和 Step 3 部分中,完成 OAuth 2.0 流程,并验证每个步骤是否按预期运行。
您可以使用 Google 账号关联演示版工具验证您的实现。
在该工具中,执行以下步骤:
- 点击使用 Google 账号登录按钮。
- 选择您要关联的账号。
- 输入服务 ID。
- (可选)输入您要请求访问权限的一个或多个范围。
- 点击开始演示。
- 当系统提示时,请确认您同意或拒绝关联请求。
- 确认您已被重定向到您的平台。