リンク解除は、プラットフォームまたは Google から開始できます。両方で一貫したリンク状態を表示すると、ユーザー エクスペリエンスが向上します。Google アカウントのリンクでは、トークン取り消しエンドポイントまたはクロスアカウント保護のサポートは任意です。
アカウントのリンクが解除される原因は次のとおりです。
-
からのユーザー リクエスト
- Google アプリケーションまたは Google アカウントの設定
- プラットフォーム
- 期限切れの更新トークンを更新できない
- お客様または Google によって開始されたその他のイベント。たとえば、不正行為や脅威検知サービスによるアカウントの停止などです。
お客様が Google とのリンク解除をリクエストしている
ユーザーの Google アカウントまたはアプリから開始されたアカウントのリンク解除では、以前に発行されたアクセス トークンと更新トークンが削除され、ユーザーの同意が削除されます。また、トークン取り消しエンドポイントを実装した場合は、必要に応じてそのエンドポイントが呼び出されます。
ユーザーがプラットフォームからのリンク解除をリクエストしました
ユーザーがリンクを解除できるメカニズム(アカウントの URL など)を提供する必要があります。ユーザーにリンクを解除する方法を提供していない場合は、ユーザーがリンクされたアカウントを管理できるように、Google アカウントへのリンクを含めます。
リスクとインシデントの共有とコラボレーション(RISC)を実装し、ユーザーのアカウントのリンクステータスの変更を Google に通知することもできます。これにより、更新トークンまたはアクセス トークン リクエストに依存せずにリンク状態を更新できるため、プラットフォームと Google の両方で現在の一貫したリンクステータスを表示できるという、優れたユーザー エクスペリエンスを実現できます。
トークンの有効期限
スムーズなユーザー エクスペリエンスを提供してサービスの中断を回避するため、Google は有効期限が近づいた更新トークンの更新を試みます。有効な更新トークンが利用できない場合、アカウントを再リンクするためにユーザーの同意が必要になることがあります。
有効期限が切れていない複数のアクセス トークンと更新トークンをサポートするようにプラットフォームを設計すると、クラスタ化された環境間のクライアント サーバー交換で発生する競合状態を最小限に抑え、ユーザーの中断を回避し、複雑なタイミングとエラー処理のシナリオを最小限に抑えることができます。最終的には一貫性を確保しますが、クライアント サーバー トークンの更新交換中とクラスタ同期の前に、以前に発行されたトークンと新しく発行された有効期限切れでないトークンの両方が短時間使用されることがあります。たとえば、新しいアクセス トークンを発行した直後で、Google で受信とクラスタ同期が行われる前に、期限切れでない以前のアクセス トークンを使用する Google からのリクエストがサービスに送信されます。更新トークンのローテーション以外のセキュリティ対策を講じることをおすすめします。
その他のイベント
アカウントのリンクが解除される理由は、無効化、停止、不正行為など、他にもさまざまです。このようなシナリオでは、プラットフォームと Google がアカウントとリンクの状態の変更を相互に通知することで、ユーザー アカウントを適切に管理し、再リンクできます。
Google が呼び出すトークン取り消しエンドポイントを実装し、RISC を使用してトークン取り消しイベントを Google に通知して、プラットフォームと Google でユーザー アカウントのリンク状態の一貫性を維持します。
トークン失効エンドポイント
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
がリクエストしたときにリクエストを再試行します。
クロスアカウント保護機能(RISC)
If you support Cross-Account Protection, your platform can notify Google when access or refresh tokens are revoked. This allows Google to inform users of link state changes, invalidate the token, cleanup security credentials, and authorization grants.
Cross-Account Protection is based on the RISC standard developed at the OpenID Foundation.
A Security Event Token is used to notify Google of token revocation.
When decoded, a token revocation event looks like the following example:
{
"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"
}
}
}
Security Event Tokens that you use to notify Google of token revocation events must conform to the requirements in the following table:
Token revocation events | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
iss |
Issuer Claim: This is a URL which you host, and it's shared with Google during registration. | ||||||||||
aud |
Audience Claim: This identifies Google as the JWT recipient. It
must be set to google_account_linking . |
||||||||||
jti |
JWT ID Claim: This is a unique ID that you generate for every security event token. | ||||||||||
iat |
Issued At Claim: This is a NumericDate value
that represents the time when this security event token was created. |
||||||||||
toe |
Time of Event Claim: This is an optional
NumericDate value that represents the time at which the
token was revoked. |
||||||||||
exp |
Expiration Time Claim: Do not include this field, as the event resulting in this notification has already taken place. | ||||||||||
events |
|
For more information on field types and formats, see JSON Web Token (JWT).