メールの列挙保護を有効にする

このガイドでは、メールの列挙保護を有効にする方法について説明します。

概要

メールの列挙はブルート フォース攻撃の一種です。悪意のある人物が、API にメールアドレスを渡して応答を確認することにより、システム内のユーザーの推測または確認を試みます。

以下の例では、メールの列挙保護は無効になっています。Identity Platform は、メール列挙攻撃に使用できる情報を返します。

  • システムに存在しないメールアドレスを使用してログインしようとしている。Identity Platform は EMAIL_NOT_FOUND エラーを返します。

  • システムに存在するメールアドレスで登録を試みます。Identity Platform は EMAIL_EXISTS エラーを返します。

Identity Platform のメール列挙保護機能を使用すると、アプリのユーザー アカウントをこれらの攻撃から保護できます。メール列挙保護には次の機能があります。

  • 無効なログインと登録のケースでは、INVALID_LOGIN_CREDENTIALS エラー レスポンスが返されます。
  • メール確認フローのエラー レスポンスを削除します。メールアドレスが存在する場合は、確認メールが送信されます。存在しない場合は、確認メールは送信されません。
  • ユーザーが新しいメールアドレスを確認せずにメールアドレスを変更できないようにします。
  • createAuthUri を呼び出すときに、指定されたメールアドレスのログイン方法のリストを無効にします。

メールの列挙保護を有効にする

メールの列挙保護を有効にする手順は次のとおりです。

  1. Google Cloud コンソールで、gcloud auth print-access-token コマンドを使用してプロジェクト ID のアクセス トークンを出力します。

    gcloud auth print-access-token --project=PROJECT_ID
    
  2. Identity Toolkit API を使用して、プロジェクト ID のメールの列挙保護を有効にします。

    curl -X PATCH -d "{'email_privacy_config':{'enable_improved_email_privacy':"true"}}" \
        -H 'Authorization: Bearer ACCESS_TOKEN' \
        -H 'Content-Type: application/json' -H 'X-Goog-User-Project: PROJECT_ID' \
        "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/config?updateMask=email_privacy_config"
    

以下を置き換えます。

  • ACCESS_TOKEN: 先に生成したアクセス トークン。
  • PROJECT_ID: プロジェクト ID

メールの列挙保護を無効にする

メールの列挙保護を無効にする手順は次のとおりです。

  1. Google Cloud コンソールで、gcloud auth print-access-token コマンドを使用してプロジェクト ID のアクセス トークンを出力します。

    gcloud auth print-access-token --project=PROJECT_ID
    
  2. Identity Toolkit API を使用して、メールの列挙保護を無効にします。

    curl -X PATCH -d "{'email_privacy_config':{'enable_improved_email_privacy':"false"}}" \
        -H 'Authorization: Bearer ACCESS_TOKEN' \
        -H 'Content-Type: application/json' -H 'X-Goog-User-Project: PROJECT_ID' \
        "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/config?updateMask=email_privacy_config"
    

以下を置き換えます。

  • ACCESS_TOKEN: 先に生成したアクセス トークン。
  • PROJECT_ID: プロジェクト ID

エラー レスポンスの例

ユーザーが誤ったメールアドレスまたはパスワードでログインを試みた場合や、システムにすでに存在するメールアドレスで登録を試みた場合、Identity Platform は次のようなエラーを返します。

{
  "code": "auth/internal-error",
  "message": "{\"error\":{\"code\":400,\"message\":\"INVALID_LOGIN_CREDENTIALS\",\"errors\":[{\"message\":\"INVALID_LOGIN_CREDENTIALS\",\"domain\":\"global\",\"reason\":\"invalid\"}]}}"
}