A desvinculação pode ser iniciada da sua plataforma ou do Google, e a exibição de um estado de link consistente em ambas oferece a melhor experiência do usuário. A compatibilidade com um endpoint de revogação de token ou com a Proteção de várias contas é opcional para a vinculação de contas do Google.
As contas podem ser desvinculadas por qualquer um dos seguintes elementos:
- Solicitação de usuário de
- Um aplicativo do Google ou as configurações da Conta do Google
- Sua plataforma
- Falha na renovação de um token de atualização expirado
- Outros eventos iniciados por você ou pelo Google. Por exemplo, a suspensão da conta por serviços de abuso e detecção de ameaças.
O usuário solicitou a desvinculação do Google.
A desvinculação da conta iniciada por meio da Conta do Google ou do app de um usuário exclui todos os tokens de acesso e atualização emitidos anteriormente, remove o consentimento do usuário e, como opção, chama o endpoint de revogação do token, se você optar por implementá-lo.
O usuário solicitou a desvinculação da sua plataforma
Forneça um mecanismo para os usuários desvincularem, como um URL para a conta deles. Se você não oferece uma maneira de os usuários desvincularem, inclua um link para a Conta do Google para que os usuários possam gerenciar a conta vinculada.
Você pode implementar o Compartilhamento e Colaboração em Incidentes e Risco (RISC, na sigla em inglês) e notificar o Google sobre mudanças no status de vinculação de contas de usuário. Isso permite uma experiência do usuário aprimorada, em que a plataforma e o Google mostram um status de vinculação atual e consistente sem a necessidade de depender de uma solicitação de atualização ou de token de acesso para atualizar o estado da vinculação.
Expiração do token
Para oferecer uma experiência do usuário tranquila e evitar a interrupção do serviço, o Google tenta renovar os tokens de atualização perto do fim da vida útil. Em algumas situações, o consentimento do usuário pode ser necessário para vincular contas novamente quando um token de atualização válido não está disponível.
Projetar sua plataforma para oferecer suporte a vários tokens de atualização e acesso não expirados pode minimizar as disputas presentes em trocas de clientes e servidores entre ambientes em cluster, evitar interrupções dos usuários e minimizar cenários complexos de tempo e tratamento de erros. Embora tenham consistência posterior, os tokens não expirados anteriores e recém-lançados podem ficar em uso por um curto período durante a troca de renovação do token do cliente-servidor e antes da sincronização do cluster. Por exemplo, uma solicitação do Google para seu serviço que usa o token de acesso anterior não expirado ocorre logo após a emissão de um novo token de acesso, mas antes da sincronização de recibos e clusters ocorrer no Google. Medidas alternativas de segurança para atualizar o token de rotação são recomendadas.
Outros eventos
As contas podem ser desvinculadas por vários outros motivos, como inatividade, suspensão, comportamento malicioso e assim por diante. Nessas situações, sua plataforma e o Google podem gerenciar melhor as contas de usuários e vincular novamente, notificando uns aos outros sobre mudanças no estado da conta e da vinculação.
Implemente um endpoint de revogação de token para que o Google chame e notifique o Google sobre os eventos de revogação de tokens usando o RISC para garantir que sua plataforma e o Google mantenham um estado de vinculação de conta de usuário consistente.
Endpoint de revogação de token
如果您支持OAuth 2.0令牌吊销终结点,则您的平台可以接收来自Google的通知。这使您可以通知用户链接状态更改,使令牌无效以及清理安全凭证和授权授予。
该请求具有以下形式:
POST /revoke HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&token=TOKEN&token_type_hint=refresh_token
您的令牌吊销终结点必须能够处理以下参数:
撤销端点参数 | |
---|---|
client_id | 一个字符串,用于将请求来源标识为Google。此字符串必须在您的系统中注册为Google的唯一标识符。 |
client_secret | 您在Google注册的用于服务的秘密字符串。 |
token | 要撤消的令牌。 |
token_type_hint | (可选)要撤消的令牌类型,可以是access_token 或refresh_token 。如果未指定,则默认为access_token 。 |
当令牌被删除或无效时返回响应。请参见以下示例:
HTTP/1.1 200 Success Content-Type: application/json;charset=UTF-8
如果由于某种原因无法删除令牌,请返回503响应代码,如以下示例所示:
HTTP/1.1 503 Service Unavailable Content-Type: application/json;charset=UTF-8 Retry-After: HTTP-date / delay-seconds
Google稍后或按照Retry-After
的要求重试该请求。
Proteção de várias contas (RISC)
Se você oferecer suporte à Proteção entre contas, sua plataforma poderá notificar o Google quando os tokens de acesso ou de atualização forem revogados. Isso permite que o Google informe os usuários sobre alterações de estado do link, invalide o token, limpe credenciais de segurança e concessões de autorização.
A Proteção entre contas se baseia no padrão RISC desenvolvido na OpenID Foundation.
Um token de evento de segurança é usado para notificar o Google sobre a revogação do token.
Quando decodificado, um evento de revogação de token é semelhante ao exemplo a seguir:
{
"iss":"http://risc.example.com",
"iat":1521068887,
"aud":"google_account_linking",
"jti":"101942095",
"toe": "1508184602",
"events": {
"https://schemas.openid.net/secevent/oauth/event-type/token-revoked":{
"subject_type": "oauth_token",
"token_type": "refresh_token",
"token_identifier_alg": "hash_SHA512_double",
"token": "double SHA-512 hash value of token"
}
}
}
Os tokens de evento de segurança usados para notificar o Google sobre eventos de revogação de token precisam estar em conformidade com os requisitos na tabela a seguir:
Eventos de revogação de token | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
iss |
Declaração do emissor:esse é um URL hospedado por você e é compartilhado com o Google durante o registro. | ||||||||||
aud |
Reivindicação de público-alvo: identifica o Google como o destinatário do JWT. Ele
precisa ser definido como google_account_linking . |
||||||||||
jti |
Declaração de código JWT:esse é um ID exclusivo gerado para cada token de evento de segurança. | ||||||||||
iat |
Emitido na reivindicação: é um valor de NumericDate
que representa o momento em que esse token de evento de segurança foi criado. |
||||||||||
toe |
Hora da reivindicação do evento:é um valor opcional
NumericDate que representa o momento em que o
token foi revogado. |
||||||||||
exp |
Declaração de prazo de validade:não inclua este campo, porque o evento que resultou nessa notificação já aconteceu. | ||||||||||
events |
|
Para mais informações sobre tipos e formatos de campo, consulte JSON Web Token (JWT).