アカウントのリンク解除

リンク解除は、プラットフォームまたは Google から開始できます。どちらでもリンクの状態が一致して表示されるようにすると、ユーザー エクスペリエンスが向上します。Google アカウントのリンクでは、トークン失効エンドポイントまたはクロスアカウント保護機能のサポートは任意です。

アカウントのリンクは、次のいずれかの理由で解除される可能性があります。

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

ユーザーが Google からのリンク解除をリクエストした

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

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

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

リスクとインシデントの共有と連携(RISC)を実装して、ユーザーのアカウントのリンク ステータスの変更を Google に通知することもできます。これにより、更新やアクセス トークン リクエストに依存してリンクの状態を更新する必要がなく、ご利用のプラットフォームと Google の両方で最新のリンクの状態を一致させて表示できるため、ユーザー エクスペリエンスが向上します。

トークンの有効期限

スムーズなユーザー エクスペリエンスを提供し、サービスの中断を回避するため、Google は有効期限が近づいた更新トークンの更新を試みます。有効な更新トークンがない場合は、アカウントを再リンクするためにユーザーの同意が必要になることがあります。

有効期限切れでない複数のアクセス トークンと更新トークンをサポートするようにプラットフォームを設計すると、クラスタ化された環境間のクライアントとサーバーの交換で発生する競合状態を最小限に抑え、ユーザーの停止を回避し、複雑なタイミングとエラー処理のシナリオを最小限に抑えることができます。最終的には結果整合性が保たれますが、クライアントとサーバーのトークン更新交換中とクラスタの同期前には、以前に発行されたトークンと新しく発行された有効期限切れでないトークンの両方が短期間使用される可能性があります。たとえば、新しいアクセス トークンを発行した直後に、以前の有効期限切れでないアクセス トークンを使用する Google からのサービスへのリクエストが発生しますが、Google での受信とクラスタの同期は行われません。更新トークンのローテーションの代替セキュリティ対策をおすすめします。

その他のイベント

アカウントのリンクは、非アクティブ、強制停止、悪意のある行為など、さまざまな理由で解除される可能性があります。このようなシナリオでは、プラットフォームと Google がアカウントとリンクの状態の変更を互いに通知することで、ユーザー アカウントを適切に管理し、再リンクできます。

Google が呼び出すトークン失効エンドポイントを実装し、RISC を使用してトークン失効イベントを Google に通知することで、プラットフォームと Google でユーザー アカウントのリンクの状態を一致させることができます。

トークン失効エンドポイント

If you support an OAuth 2.0 token revocation endpoint, your platform can receive notifications from Google. This lets you inform users of link state changes, invalidate a token, and cleanup security credentials and authorization grants.

The request has the following form:

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

Your token revocation endpoint must be able to handle the following parameters:

Revocation endpoint parameters
client_id A string that identifies the request origin as Google. This string must be registered within your system as Google's unique identifier.
client_secret A secret string that you registered with Google for your service.
token The token to be revoked.
token_type_hint (Optional) The type of token being revoked, either an access_token or refresh_token. If unspecified, defaults to access_token.

Return a response when the token is deleted or invalid. See the following for an example:

HTTP/1.1 200 Success
Content-Type: application/json;charset=UTF-8

If the token can't be deleted for any reason, return a 503 response code, as shown in the following example:

HTTP/1.1 503 Service Unavailable
Content-Type: application/json;charset=UTF-8
Retry-After: HTTP-date / delay-seconds

Google retries the request later or as requested by Retry-After.

クロスアカウント保護機能(RISC)

クロスアカウント保護機能をサポートしている場合、プラットフォームから 取り消されます。これにより、Google はユーザーに以下の情報を通知できます。 リンク状態の変更、トークンの無効化、セキュリティ認証情報のクリーンアップ、 許可します。

クロスアカウント保護機能は、 RISC 標準。 OpenID Foundation へようこそ。

Security Event Token トークンの取り消しを 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 Issuer Claim(発行元の申し立て): ニュース メディアがホストし、共有する URL です。 登録時に Google にお問い合わせください。
aud オーディエンス クレーム: これにより、Google が JWT 受信者として識別されます。これは、 google_account_linking に設定する必要があります。
jti JWT ID Claim: これは、セッションごとに生成する一意の ID できます。
iat Issued At Claim: NumericDate 値です。 このセキュリティ イベント トークンが作成された時刻を表します。
toe イベント発生時の申し立て: これは省略可能です。 開始日時を表す NumericDate 値を使用して 取り消されています。
exp 有効期限の要求: このフィールドは含めないでください。 イベントがすでに実行されていることがわかります。
events
Security Events Claim: JSON オブジェクトであり、 トークン取り消しイベントを 1 つだけ含める必要があります。
subject_type oauth_token に設定する必要があります。
token_type 取り消されるトークンのタイプです。 access_token または refresh_token
token_identifier_alg これはトークンのエンコードに使用されるアルゴリズムであり、 hash_SHA512_double
token これは取り消されたトークンの ID です。

フィールドの型と形式について詳しくは、このモジュールの JSON Web Token(JWT)