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

リンクの解除はプラットフォームまたは Google から開始される場合があり、どちらの場合も一貫したリンク状態を表示することでユーザー エクスペリエンスを最大限に高めることができます。Google アカウントのリンク設定では、トークン取り消しエンドポイントやクロスアカウント保護は任意です。

次のいずれかによってアカウントのリンクが解除されることがあります。

  • ユーザーからのリクエスト:
    • Google アプリケーションまたは Google アカウントの設定
    • 使用するプラットフォーム
  • 期限切れの更新トークンを更新できませんでした
  • お客様または Google が開始したその他のイベント。たとえば、不正行為や脅威検出サービスによるアカウントの強制停止などです。

ユーザーが Google とのリンクを解除するようリクエストしました

ユーザーの Google アカウントまたはアプリからアカウントのリンク解除が開始されると、以前に発行したアクセス トークンと更新トークンが削除され、ユーザーの同意が削除されます。また、必要に応じてトークン取り消しエンドポイントを呼び出すこともできます。

ユーザーがプラットフォームからのリンク解除をリクエストしました

ユーザーがアカウントのリンクを解除するためのメカニズム(アカウントへの URL など)を用意する必要があります。リンクを解除する方法がユーザーにない場合は、Google アカウントへのリンクを含めて、ユーザーがリンクされたアカウントを管理できるようにします。

リスクとインシデントの共有とコラボレーション(RISC)を実装し、ユーザー アカウントのリンク ステータスの変更を Google に通知することもできます。これにより、更新状態やアクセス トークンのリクエストを使用してリンク状態を更新する必要なく、プラットフォームと 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)

クロスアカウント保護をサポートしている場合、アクセストークンまたは更新トークンが取り消されたときにプラットフォームがGoogleに通知できます。これにより、Googleはユーザーにリンク状態の変更を通知し、トークンを無効にし、セキュリティ認証情報をクリーンアップし、承認を付与することができます。

クロスアカウント保護は、OpenIDFoundationで開発されたRISC標準に基づいています。

セキュリティイベントトークンは、トークンの失効をGoogleに通知するために使用されます。

デコードされると、トークン失効イベントは次の例のようになります。

{
  "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"
    }
  }
}

トークン失効イベントをGoogleに通知するために使用するセキュリティイベントトークンは、次の表の要件に準拠している必要があります。

トークン失効イベント
iss発行者の主張:これはあなたがホストするURLであり、登録時にGoogleと共有されます。
audオーディエンスクレーム:これにより、GoogleがJWT受信者として識別されます。 google_account_linkingに設定する必要があります。
jti JWT IDクレーム:これは、セキュリティイベントトークンごとに生成する一意のIDです。
iatクレーム時に発行:これは、このセキュリティイベントトークンが作成された時刻を表すNumericDate値です。
toeイベントクレームの時刻:これは、トークンが取り消された時刻を表すオプションのNumericDate値です。
exp有効期限の要求:この通知をもたらすイベントはすでに発生しているため、このフィールド含めないでください。
events
セキュリティイベントの主張:これはJSONオブジェクトであり、トークン失効イベントを1つだけ含める必要があります。
subject_typeこれはoauth_tokenに設定する必要があります。
token_typeこれはどちらか、取り消されたトークンの存在のタイプであるaccess_tokenまたはrefresh_token
token_identifier_algこれはトークンのエンコードに使用されるアルゴリズムであり、 hash_SHA512_doubleである必要があります。
tokenこれは、取り消されたトークンのIDです。

フィールドのタイプと形式の詳細については、 JSON Web Token(JWT)を参照してください。