パスワード ポリシーを有効化、無効化、使用する

このドキュメントでは、パスワード ポリシーを使用して、新規ユーザーと既存のユーザーのパスワードの安全度を向上させる方法について説明します。

概要

パスワード ポリシーを使用すると、パスワードの複雑さの要件を適用することで、アカウントのセキュリティを向上させることができます。パスワード ポリシーでは、次のパスワード要件がサポートされます。

  • 小文字は必須です
  • 大文字は必須です
  • 数字は必須です
  • 英数字以外の文字は必須です
  • パスワードの最小文字数(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"
        }
      ]
    }
    

新規ユーザーは、ポリシーに準拠したパスワードを選択する必要があります。アクティブ ユーザーがいる場合は、パスワード ポリシーを直ちに適用する場合を除き、必須モードを有効にしないことをおすすめします。代わりに、通知モードを使用します。これにより、ユーザーは現在のパスワードでログインし、パスワードに関する要件を詳しく説明した通知が送信されます。

適用を有効にする場合は、forceUpgradeOnSignintrue に設定して、必須モードで適用を有効にします。通知モードでの適用を有効にするには、false に設定します。

適用を有効にする

パスワード ポリシーを適用する手順は次のとおりです。

  1. まだ行っていない場合は、メールとパスワードによるログインを構成します。
  2. プロジェクト レベルでパスワード ポリシーを適用するには、次のコマンドを実行します。

    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: 必要なパスワードの最大文字数
  3. テナントレベルでパスワード ポリシーを適用するには、次のコマンドを実行します。

    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,
        },
      },
    })
    

適用を無効にする

  1. プロジェクト レベルでパスワード ポリシーの適用を無効にするには、次のコマンドを実行します。

    import { getAuth } from 'firebase-admin/auth';
    
    // Update project config with password policy config
    getAuth().projectConfigManager().updateProjectConfig({
      passwordPolicyConfig: {
        enforcementState: 'OFF',
      },
    })
    
  2. テナントレベルでパスワード ポリシーの適用を無効にするには、次のコマンドを実行します。

    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.