セキュリティ バンドル

このガイドでは、Google アカウントに関する追加の信頼シグナルを返す一連の機能について説明します。これらの信頼シグナルは、ユーザーの登録時、アカウント作成時、それ以降のログイン時に、アカウント管理システムがリスクベースの判断を行うのに役立ちます。

セットアップ

追加のクレームを受け取るには、アプリが公開され、確認済みであり、セキュリティ バンドル機能が有効になっている必要があります。

アプリが公開され、確認済みであることを確認するには:

  1. Google Auth Platform を開きます。
  2. アプリのプロジェクトを選択または作成する
  3. メニューで [オーディエンス] をクリックします。
  4. 公開ステータスが [本番環境] であることを確認する
  5. メニューの [確認センター] をクリックします。
  6. [Verification Status](オーナー確認のステータス)が [Verified](確認済み)であることを確認します。

    詳しくは、OAuth アプリの確認に関するヘルプセンターをご覧ください。

auth_time クレームを有効にするには:

  1. Google Auth Platform を開きます。
  2. アプリのプロジェクトを選択または作成する
  3. メニューの [設定] をクリックします。
  4. [詳細設定] で [セッションの有効期間のクレーム] を選択して、auth_time を有効にします。

サポートされている機能

このセクションでは、セキュリティ バンドルを構成する個々の機能について説明します。

auth_time

auth_time クレームは、OpenID Connect プロトコルの標準部分であり、エンドユーザーが Google で最後に認証された日時に関する情報を提供します。これは、Unix エポック(1970 年 1 月 1 日 00:00:00 UTC)からの経過秒数を表す JSON 数値で、ユーザーが最後に認証された時刻です。これは、現在のデバイスまたはブラウザからユーザーが Google アカウントに最後にログインしたイベントを示すタイムスタンプと考えることができます。このクレームは ID トークンに含まれています。ID トークンは、認証とユーザーに関する検証済みの情報を含む JSON ウェブトークン(JWT)です。

auth_time クレームは、ユーザーが使用しているデバイスまたはブラウザで Google アカウントに最後にログインしたのがいつかを判断できるため、アプリケーションにとって有用です。これは、次のようなセキュリティ目的で特に重要になることがあります。

  • アカウントの削除、アカウントの連絡先情報の変更、支払いの実行などの機密性の高いユーザー操作を行う前に、アプリが追加のステップアップ認証チャレンジを発行するかどうかについて、十分な情報に基づいて判断する。Google は Google アカウントの再認証リクエストをサポートしていません。

  • ユーザーの Google アカウント セッションの鮮度と安定性を信頼シグナルとして使用します。一般的に、最近の auth_time 値は鮮度を示し、古い値は安定性を示します。

ウェブアプリの場合、ユーザーが Google アカウントにログインすると、ユーザーのブラウザとオペレーティング システムの組み合わせがセッションを構成します。また、ウェブサイトでも個別にユーザー セッションが維持されます。auth_time の値が新しいほど、ユーザーが最近 Google アカウントにログインしたことを示します。多くの場合、これはアクティブでエンゲージメントの高いユーザーを示しており、リスクが低いシグナルと解釈できます。

Android などのモバイル プラットフォームでは、ユーザーは通常、指紋認証や顔認証などの生体認証方法や、デバイス固有の PIN やパターンによるロック解除を使用して、デバイスに直接ログインします。モバイルアプリやプラットフォームでは、Google で新しいセッションを作成するのではなく、プラットフォーム ベースの認証方法が使用されることが多く、Google アカウントへのログインや auth_time の更新が頻繁に行われません。そのため、最近の auth_time 値は、長時間実行されている Google アカウント セッションの変更を示し、リスクの増大を意味する可能性があります。

トラスト シグナルは微妙な問題です。auth_time は、多要素認証(MFA)が有効になっているかどうか、使用された認証方法、アプリケーションとプラットフォーム間のユーザー セッションの期間などの他のシグナルとともに使用されることが想定されています。

auth_time リクエスト

auth_time クレームのリクエストに使用される特定のメソッドは、使用される API によって異なりますが、すべての API には auth_time をリクエストするための省略可能な claims パラメータが含まれています。

OIDC プロトコル

OAuth プラットフォームを直接使用する場合は、オプションのクレーム リクエスト パラメータに追加して auth_time をリクエストします。クレーム JSON オブジェクトの id_token フィールドの値を {"auth_time":{"essential":true}} に設定します。次に例を示します。

https://accounts.google.com/o/oauth2/v2/auth?
response_type=id_token&
client_id=YOUR_CLIENT_ID&
scope=openid email profile&
redirect_uri=https://example.com/user-login&
nonce=123-456-7890&
claims={"id_token":{"auth_time":{"essential":true}}}

詳細については、OpenID Connect をご覧ください。

ウェブ向け GIS

ウェブ用の Google ログイン ライブラリには、追加のクレームをリクエストする HTML と JavaScript の 2 つの API があります。たとえば、JavaScript API を使用して auth_time をリクエストします。

<html>
<body>
  <script src="https://accounts.google.com/gsi/client" async></script>
  <script>
    window.onload = function () {
      google.accounts.id.initialize({
        client_id: "YOUR_WEB_CLIENT_ID",
        callback: function(rsp) { console.log(rsp.credential); },
        essential_claims: "auth_time",
      });
      google.accounts.id.renderButton(
        document.getElementById("buttonDiv"),
        { type: "standard", size: "large" }
      );
    }
  </script>
  <div id="buttonDiv"></div>
</body>
</html>

詳しくは、ウェブ向け Google でログインをご覧ください。

Android 版 GIS

setClaims メソッドと Claim オブジェクトを使用して auth_time をリクエストします。

androidx.credentials:credentials-play-services-auth ライブラリと com.google.android.libraries.identity.googleid:googleid ライブラリの最新バージョンを使用するように、ビルドの依存関係を更新します。

setClaims を使用して auth_time タイプの Claim オブジェクトをインスタンス化し、ログイン オプションに追加します。

val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
    .setAutoSelectEnabled(true)
    .setFilterByAuthorizedAccounts(true)
    .setServerClientId(WEB_CLIENT_ID)
    .setNonce("NONCE")
    .setClaims(ImmutableList.of(new Claim("auth_time", true)))
    .build()

詳細については、「Google でログイン」を使用してユーザーを認証するをご覧ください。

auth_time レスポンス

auth_time クレームがリクエストに含まれている場合、ID トークン ペイロード レスポンスに、iss(発行者)、sub(サブジェクト)、aud(オーディエンス)、exp(有効期限)などの他の標準クレームとともに表示されます。auth_time クレームの値は、Unix エポック(1970 年 1 月 1 日 00:00:00 UTC)からユーザー認証が最後に発生した時刻までの経過秒数を表す JSON 数値です。以下は、auth_time クレームを含むデコードされた ID トークンの例です。

{
  "iss": "https://accounts.google.com",
  "azp": "YOUR_CLIENT_ID",
  "aud": "YOUR_CLIENT_ID",
  "sub": "117726431651943698600",
  "email": "alice@example.com",
  "email_verified": true,
  "nonce": "123-456-7890",
  "auth_time": 1748875426,
  "nbf": 1748880889,
  "name": "Elisa Beckett",
  "picture": "https://lh3.googleusercontent.com/a/default-user=s96-c",
  "given_name": "Elisa",
  "family_name": "Beckett",
  "iat": 1748881189,
  "exp": 1748884789,
  "jti": "8b5d7ce345787d5dbf14ce6e08a8f88ee8c9b5b1"
}

ID トークンには、JWT が発行された時刻を示す iat(発行時)クレームも含まれています。iat クレームと auth_time クレームを比較することで、特定の ID トークンが作成された時点を基準として、ユーザーが最後に認証してから経過した時間を判断できます。たとえば、iat が 1748881189 で auth_time が 1748875426 の場合、差は 5,763 秒で、経過時間は 1 時間 36 分 3 秒になります。