リンク解除はプラットフォームまたは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
要求に従ってリクエストを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 Web Token(JWT)を参照してください。