パスワード ポリシーを有効化、無効化、使用する
このドキュメントでは、パスワード ポリシーを使用して、新規ユーザーと既存のユーザーのパスワードの安全度を向上させる方法について説明します。
概要
パスワード ポリシーを使用すると、パスワードの複雑さの要件を適用することで、アカウントのセキュリティを向上させることができます。パスワード ポリシーでは、次のパスワード要件がサポートされます。
- 小文字は必須です
- 大文字は必須です
- 数字は必須です
- 英数字以外の文字は必須です
- パスワードの最小文字数(6~30 文字。デフォルトは 6)
- パスワードの最大文字数(最大 4,096 文字)
次の文字が構成されている場合、英数字以外の文字の要件を満たします。
^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~ `
始める前に
- Admin SDK をインストールします。
強制適用モード
パスワード ポリシーの適用は、次の 2 つのモードで有効にできます。
- 必須: ユーザーがポリシーに準拠したパスワードに更新するまで、ログインの試行は失敗します。
通知: ユーザーは遵守していないパスワードを使用してログインできます。ポリシーに準拠していない条件が返されます。返される条件は次のとおりです。
MISSING_LOWERCASE_CHARACTER
MISSING_UPPERCASE_CHARACTER
MISSING_NUMERIC_CHARACTER
MISSING_NON_ALPHANUMERIC_CHARACTER
MINIMUM_PASSWORD_LENGTH
MAXIMUM_PASSWORD_LENGTH
この情報をユーザーに送信して、パスワードの更新を通知できます。次の例は、パスワード条件が欠落しているレスポンスを示しています。
{ "kind": "identitytoolkit#VerifyPasswordResponse", "localId": "CJL1i2", "email": "cloudysanfrancisco@gmail.com", "displayName": "", "idToken": "ID_TOKEN", "registered": true, "userNotifications": [ { "notificationCode": "MISSING_NUMERIC_CHARACTER", "notificationMessage": "Password must contain a numeric character" }, { "notificationCode": "MISSING_NON_ALPHANUMERIC_CHARACTER", "notificationMessage": "Password must contain a non-alphanumeric character" } ] }
新規ユーザーは、ポリシーに準拠したパスワードを選択する必要があります。アクティブ ユーザーがいる場合は、パスワード ポリシーを直ちに適用する場合を除き、必須モードを有効にしないことをおすすめします。代わりに、通知モードを使用します。これにより、ユーザーは現在のパスワードでログインし、パスワードに関する要件を詳しく説明した通知が送信されます。
適用を有効にする場合は、forceUpgradeOnSignin
を true
に設定して、必須モードで適用を有効にします。通知モードでの適用を有効にするには、false
に設定します。
適用を有効にする
パスワード ポリシーを適用する手順は次のとおりです。
- まだ行っていない場合は、メールとパスワードによるログインを構成します。
プロジェクト レベルでパスワード ポリシーを適用するには、次のコマンドを実行します。
import { getAuth } from 'firebase-admin/auth'; // Update project config with password policy config getAuth().projectConfigManager().updateProjectConfig({ passwordPolicyConfig: { enforcementState: 'ENFORCE', forceUpgradeOnSignin: true, constraints: { requireUppercase: true, requireLowercase: true, requireNonAlphanumeric: true, requireNumeric: true, minLength: MIN_PASSWORD_LENGTH, maxLength: MAX_PASSWORD_LENGTH, }, }, })
以下を置き換えます。
MIN_PASSWORD_LENGTH
: 必要なパスワードの最小文字数MAX_PASSWORD_LENGTH
: 必要なパスワードの最大文字数
テナントレベルでパスワード ポリシーを適用するには、次のコマンドを実行します。
import { getAuth } from 'firebase-admin/auth'; // Update project config with password policy config getAuth().tenantManager().createTenant({ displayName: "admin-tenant", passwordPolicyConfig: { enforcementState: 'ENFORCE', forceUpgradeOnSignin: true, constraints: { requireUppercase: true, requireLowercase: true, requireNonAlphanumeric: true, requireNumeric: true, minLength: MIN_PASSWORD_LENGTH, maxLength: MAX_PASSWORD_LENGTH, }, }, })
適用を無効にする
プロジェクト レベルでパスワード ポリシーの適用を無効にするには、次のコマンドを実行します。
import { getAuth } from 'firebase-admin/auth'; // Update project config with password policy config getAuth().projectConfigManager().updateProjectConfig({ passwordPolicyConfig: { enforcementState: 'OFF', }, })
テナントレベルでパスワード ポリシーの適用を無効にするには、次のコマンドを実行します。
import { getAuth } from 'firebase-admin/auth'; // Update tenant config with password policy config getAuth().tenantManager().updateTenant(TENANT-ID, { passwordPolicyConfig: { enforcementState: 'OFF', }, })
TENANT-ID
は、パスワード ポリシーを無効にするテナント ID に置き換えます。
クライアントサイドでの適用
パスワードは、送信前にクライアント側でプロジェクトまたはテナントのパスワード ポリシーに対して検証できます。
import { getAuth, validatePassword } from 'firebase/auth';
const auth = getAuth();
auth.tenantId = TENANT-ID;
const status = await validatePassword(auth, 'password').catch((error) => {
// Password could not be validated.
});
const policy = status.passwordPolicy;
// Use the status and policy to show what requirements are met and which are missing.