ユーザーの ID の取得

このページでは、Identity-Aware Proxy(IAP)を使用してユーザーの ID を取得する方法について説明します。ユーザーの ID を取得すると、リクエストが IAP 経由で送信されたことをアプリケーションで確認できます。アプリを適切に保護するには、必ず以下のいずれかのメカニズムを使用して、IAP で認証されたユーザー ID を取得する必要があります。

署名付きヘッダーによるユーザーの ID の取得

Compute Engine、GKE、App Engine スタンダード環境、App Engine フレキシブル環境のアプリへのリクエストが IAP によって承認されていることを確認するには、アプリで x-goog-iap-jwt-assertion HTTP リクエスト ヘッダーをチェックして、すべてのリクエストを検証する必要があります。署名済みヘッダーによるアプリの保護をご覧ください。

さらに、IAP はユーザーの ID を以下の HTTP ヘッダーでバックエンド サービスに渡します。これらのヘッダーには、名前空間の接頭辞 accounts.google.com を含める必要があります。これらのヘッダーは互換性のために用意されていますが、セキュリティ メカニズムとして利用しないでください。これらのヘッダーを使用する場合は、上記の認証済みの JWT ヘッダーに含まれる ID 情報と比較する必要があります。

ヘッダー名 説明 値の例
X-Goog-Authenticated-User-Email ユーザーのメールアドレス accounts.google.com:example@gmail.com
X-Goog-Authenticated-User-Id ユーザーの永続的で一意な ID accounts.google.com:userIDvalue

App Engine スタンダード環境の Users API によるユーザー ID の取得

別の方法として、App Engine スタンダード環境アプリを使用している場合は、アプリコード内で Users API を使用してユーザー ID を取得できます。Users API は Python 3 をサポートしていません。

アプリケーションですでにこの API を使用している場合は、何も変更する必要はありません。IAP はユーザー ID を提供しますが、IAP が有効になると、各ユーザーの Users API ユーザー ID の値が変更されます。

リクエストの IAP で検証されたユーザー ID を取得するには、現在のユーザーを返す Users API を呼び出します。関数からユーザーが返された場合(Java での req.getUserPrincipal() != null など)、そのユーザーは IAP によって認証されています。

IAP が有効になっているときにユーザーがアプリに初めてアクセスすると、ユーザーは自分の ID をアプリと共有することを確認するための同意画面にリダイレクトされます。これは、IAP を有効にする前にユーザーがこのアプリに同意した場合でも行われ、IAP を無効にしてから再度有効にした場合に再び行われます。

Users API を使用する場合、通常は同じ Google Workspace ドメインに属するアプリとユーザーに対して同意画面が抑制されます。IAP を有効にすると、同意画面の抑制は自動的に行われません。IAP が有効になっているときに同意画面を表示しないようにするには、次の手順を行います。

  1. Google Workspace 管理コンソールに移動します。
    管理コンソールに移動
  2. コントロールの一覧で、[セキュリティ] を選択します。
    1. [セキュリティ] が表示されていない場合、ページ下部の灰色のバーから [More controls] を選択し、コントロールの一覧から [セキュリティ] を選択します。
    2. コントロールが表示されない場合、ドメインの管理者としてログインしていることを確認します。
  3. オプションの一覧で、[さらに表示]、[Advanced settings] の順に選択します。
  4. [認証] セクションで、[Manage API client access] を選択します。
  5. [クライアント名] フィールドに、IAP OAuth 2.0 クライアント ID を入力します。IAP クライアント ID は [認証情報] ページで確認できます。
    IAP 認証情報ページに移動
  6. [1 つ以上の API スコープ] フィールドに、email, openid を入力します。
  7. [承認] をクリックします。

このプロセスを簡略化するため、API 呼び出しを使用して、すべてのアプリに対して 1 つの IAP OAuth 2.0 クライアント ID を使用できます。IAP で使用するクライアント ID を Cloud Console で指定することはできません。

次のステップ