リンク解除は、プラットフォームまたは 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 |
|
||||||||||
フィールドの型と形式について詳しくは、このモジュールの JSON Web Token(JWT)。