アカウントのリンク解除

リンク解除は、プラットフォームまたは 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
Security Events Claim: This is a JSON object, and must include only a single token revocation event.
subject_type This must be set to oauth_token.
token_type This is the type of token being revoked, either access_token or refresh_token.
token_identifier_alg This is the algorithm used to encode the token, and it must be hash_SHA512_double.
token This is the ID of the revoked token.

For more information on field types and formats, see JSON Web Token (JWT).