メールの列挙保護を有効にする
このガイドでは、メールの列挙保護を有効にする方法について説明します。
概要
メールの列挙はブルート フォース攻撃の一種です。悪意のある人物が、API にメールアドレスを渡して応答を確認することにより、システム内のユーザーの推測または確認を試みます。
以下の例では、メールの列挙保護は無効になっています。Identity Platform は、メール列挙攻撃に使用できる情報を返します。
システムに存在しないメールアドレスを使用してログインしようとしている。Identity Platform は
EMAIL_NOT_FOUND
エラーを返します。システムに存在するメールアドレスで登録を試みます。Identity Platform は
EMAIL_EXISTS
エラーを返します。
Identity Platform のメール列挙保護機能を使用すると、アプリのユーザー アカウントをこれらの攻撃から保護できます。メール列挙保護には次の機能があります。
- 無効なログインと登録のケースでは、
INVALID_LOGIN_CREDENTIALS
エラー レスポンスが返されます。 - メール確認フローのエラー レスポンスを削除します。メールアドレスが存在する場合は、確認メールが送信されます。存在しない場合は、確認メールは送信されません。
- ユーザーが新しいメールアドレスを確認せずにメールアドレスを変更できないようにします。
createAuthUri
を呼び出すときに、指定されたメールアドレスのログイン方法のリストを無効にします。
メールの列挙保護を有効にする
メールの列挙保護を有効にする手順は次のとおりです。
Google Cloud コンソールで、
gcloud auth print-access-token
コマンドを使用してプロジェクト ID のアクセス トークンを出力します。gcloud auth print-access-token --project=PROJECT_ID
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
メールの列挙保護を無効にする
メールの列挙保護を無効にする手順は次のとおりです。
Google Cloud コンソールで、
gcloud auth print-access-token
コマンドを使用してプロジェクト ID のアクセス トークンを出力します。gcloud auth print-access-token --project=PROJECT_ID
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\"}]}}"
}