Bạn có thể bắt đầu huỷ liên kết từ nền tảng của mình hoặc Google, đồng thời việc hiển thị trạng thái liên kết nhất quán trên cả hai nền tảng sẽ mang lại trải nghiệm tốt nhất cho người dùng. Bạn không bắt buộc phải hỗ trợ điểm cuối thu hồi mã thông báo hoặc tính năng Bảo vệ nhiều tài khoản cho tính năng Liên kết Tài khoản Google.
Tài khoản có thể bị huỷ liên kết do bất kỳ yếu tố nào sau đây:
- Yêu cầu của người dùng từ
- một ứng dụng của Google hoặc chế độ cài đặt Tài khoản Google
- Nền tảng của bạn
- Không gia hạn được mã làm mới đã hết hạn
- Các sự kiện khác do bạn hoặc Google khởi tạo. Ví dụ: dịch vụ phát hiện hành vi sai trái và mối đe doạ tạm ngưng tài khoản.
Người dùng đã yêu cầu huỷ liên kết với Google
Việc huỷ liên kết tài khoản được bắt đầu thông qua Tài khoản Google hoặc ứng dụng của người dùng sẽ xoá mọi mã truy cập và mã làm mới đã phát hành trước đó, xoá sự đồng ý của người dùng và tuỳ ý gọi điểm cuối thu hồi mã thông báo nếu bạn chọn triển khai một điểm cuối.
Người dùng yêu cầu huỷ liên kết với nền tảng của bạn
Bạn nên cung cấp một cơ chế để người dùng huỷ liên kết, chẳng hạn như một URL đến tài khoản của họ. Nếu bạn không cung cấp cách để người dùng huỷ liên kết, hãy thêm một đường liên kết đến Tài khoản Google để người dùng có thể quản lý tài khoản được liên kết của họ.
Bạn có thể chọn triển khai tính năng Chia sẻ và cộng tác về rủi ro và sự cố (RISC) và thông báo cho Google về những thay đổi đối với trạng thái liên kết tài khoản người dùng. Điều này giúp cải thiện trải nghiệm người dùng khi cả nền tảng của bạn và Google đều cho thấy trạng thái liên kết hiện tại và nhất quán mà không cần dựa vào yêu cầu làm mới hoặc mã truy cập để cập nhật trạng thái liên kết.
Thời hạn của mã thông báo
Để mang lại trải nghiệm mượt mà cho người dùng và tránh gián đoạn dịch vụ, Google cố gắng làm mới mã làm mới khi mã này sắp hết hạn. Trong một số trường hợp, có thể cần sự đồng ý của người dùng để liên kết lại tài khoản khi không có mã làm mới hợp lệ.
Thiết kế nền tảng của bạn để hỗ trợ nhiều mã truy cập và mã làm mới chưa hết hạn có thể giảm thiểu các điều kiện xung đột trong quá trình trao đổi giữa máy khách và máy chủ trong môi trường được phân cụm, tránh gián đoạn người dùng và giảm thiểu các tình huống phức tạp về thời gian và xử lý lỗi. Mặc dù cuối cùng sẽ nhất quán, nhưng cả mã thông báo chưa hết hạn đã phát hành trước đó và mã thông báo mới phát hành có thể được sử dụng trong một khoảng thời gian ngắn trong quá trình trao đổi mã thông báo gia hạn giữa máy chủ và máy khách và trước khi đồng bộ hoá cụm. Ví dụ: yêu cầu của Google đối với dịch vụ của bạn sử dụng mã truy cập chưa hết hạn trước đó xảy ra ngay sau khi bạn phát hành mã truy cập mới, nhưng trước khi quá trình nhận và đồng bộ hoá cụm diễn ra tại Google. Bạn nên dùng các biện pháp bảo mật thay thế cho Refresh Token Rotation (Xoay mã làm mới).
Các sự kiện khác
Tài khoản có thể bị huỷ liên kết vì nhiều lý do khác, chẳng hạn như không hoạt động, bị tạm ngưng, có hành vi độc hại, v.v. Trong những trường hợp như vậy, nền tảng của bạn và Google có thể quản lý tài khoản người dùng và liên kết lại một cách hiệu quả nhất bằng cách thông báo cho nhau về các thay đổi đối với trạng thái tài khoản và trạng thái liên kết.
Triển khai một điểm cuối thu hồi mã thông báo để Google gọi và thông báo cho Google về các sự kiện thu hồi mã thông báo của bạn bằng RISC để đảm bảo nền tảng của bạn và Google duy trì trạng thái liên kết tài khoản người dùng nhất quán.
Điểm cuối thu hồi mã thông báo
如果您支持 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 的要求重试请求。
Bảo vệ nhiều tài khoản (RISC)
Nếu bạn hỗ trợ tính năng Bảo vệ nhiều tài khoản, nền tảng của bạn có thể thông báo cho Google khi mã truy cập hoặc mã làm mới đều bị thu hồi. Điều này cho phép Google thông báo cho người dùng về thay đổi trạng thái liên kết, vô hiệu hoá mã thông báo, dọn dẹp thông tin xác thực bảo mật, và uỷ quyền.
Tính năng Bảo vệ nhiều tài khoản dựa trên tiêu chuẩn RISC được phát triển tại Nền tảng ID Mở.
Mã thông báo sự kiện bảo mật được dùng để thông báo cho Google về việc thu hồi mã thông báo.
Khi được giải mã, sự kiện thu hồi mã thông báo sẽ có dạng như ví dụ sau:
{
"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"
}
}
}
Mã thông báo sự kiện bảo mật mà bạn dùng để thông báo cho Google về các sự kiện thu hồi mã thông báo phải tuân thủ các yêu cầu trong bảng sau:
| Sự kiện thu hồi mã thông báo | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
iss |
Xác nhận quyền sở hữu của nhà phát hành: Đây là URL mà bạn lưu trữ và được chia sẻ với Google trong quá trình đăng ký. | ||||||||||
aud |
Thông báo xác nhận quyền sở hữu đối tượng: Thông tin này xác định Google là người nhận JWT. Nó
phải được đặt thành google_account_linking. |
||||||||||
jti |
Thông báo xác nhận quyền sở hữu mã JWT: Đây là mã nhận dạng duy nhất mà bạn tạo cho mỗi mã thông báo sự kiện bảo mật của bạn. | ||||||||||
iat |
Được phát hành khi khiếu nại: Đây là giá trị NumericDate
thể hiện thời điểm mã thông báo sự kiện bảo mật này được tạo. |
||||||||||
toe |
Thời gian xác nhận quyền sở hữu sự kiện: Đây là thời gian không bắt buộc
Giá trị NumericDate biểu thị thời điểm
mã thông báo đã bị thu hồi. |
||||||||||
exp |
Thông báo xác nhận quyền sở hữu theo thời gian hết hạn: Không bao gồm trường này, vì sự kiện dẫn đến thông báo này đã diễn ra. | ||||||||||
events |
|
||||||||||
Để biết thêm thông tin về các loại trường và định dạng trường, hãy xem Mã thông báo web JSON (JWT).