リンク解除は、プラットフォームまたは Google から開始できます。どちらでもリンクの状態が一致して表示されるようにすると、ユーザー エクスペリエンスが向上します。Google アカウントのリンクでは、トークン失効エンドポイントまたはクロスアカウント保護機能のサポートは任意です。
アカウントのリンクは、次のいずれかの理由で解除される可能性があります。
- ユーザーからのリクエスト(
- 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 でリクエストされたとおりに再試行します。
クロスアカウント保護機能(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)。