リンク解除は、プラットフォームまたは 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)。