アカウントのリンクを解除する

リンク解除はプラットフォームまたは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要求に従ってリクエストを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).