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

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

Firebase コンソールからパスワード ポリシーを設定する場合は、パスワード ポリシーを 設定するをご覧ください。

概要

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

  • 小文字は必須です
  • 大文字は必須です
  • 数字は必須です
  • 英数字以外の文字は必須です
  • パスワードの最小文字数(6~30 文字。デフォルトは 6)
  • パスワードの最大文字数(最大 4,096 文字)

次の文字が構成されている場合、英数字以外の文字の要件を満たします。

^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~ `

強制適用モード

パスワード ポリシーの適用は、次の 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. プロジェクト レベルでパスワード ポリシーを適用する手順は次のとおりです。

    Firebase コンソール

    1. Firebase コンソールで、[認証の設定] ページに移動します。

      認証の設定に移動

    2. [パスワード ポリシー] タブを選択します。

    3. 選択したパスワードの安全度の要件を構成します。

    4. 適用モード([必須] または [通知])と、ログイン時にパスワードのアップグレードを強制するかどうかを選択します。

    5. [保存] をクリックします。

    REST

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

      gcloud auth print-access-token --project=PROJECT_ID
      
    2. Identity Toolkit API を使用してパスワード ポリシーを有効にします。

      curl -X PATCH -d "{'passwordPolicyConfig':{'enforcementState':'ENFORCE','forceUpgradeOnSignin':true,'constraints':{'requireUppercase':true,'requireLowercase':true,'requireNonAlphanumeric':true,'requireNumeric':true,'minLength':MIN_PASSWORD_LENGTH,'maxLength':MAX_PASSWORD_LENGTH}}}" \
          -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=passwordPolicyConfig"
      

      次のように置き換えます。

      • ACCESS_TOKEN: 先ほど生成したアクセス トークン
      • PROJECT_ID: プロジェクト ID
      • MIN_PASSWORD_LENGTH: 必要なパスワードの最小文字数
      • MAX_PASSWORD_LENGTH: 必要なパスワードの最大文字数
  3. テナント レベルでパスワード ポリシーを適用する手順は次のとおりです。

    REST

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

      gcloud auth print-access-token --project=PROJECT_ID
      
    2. Identity Toolkit API を使用して、テナントのパスワード ポリシーを有効にします。

      curl -X PATCH -d "{'passwordPolicyConfig':{'enforcementState':'ENFORCE','forceUpgradeOnSignin':true,'constraints':{'requireUppercase':true,'requireLowercase':true,'requireNonAlphanumeric':true,'requireNumeric':true,'minLength':MIN_PASSWORD_LENGTH,'maxLength':MAX_PASSWORD_LENGTH}}}" \
          -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/tenants/TENANT_ID?updateMask=passwordPolicyConfig"
      

      次のように置き換えます。

      • ACCESS_TOKEN: 先ほど生成したアクセス トークン
      • PROJECT_ID: プロジェクト ID
      • TENANT_ID: パスワード ポリシーを適用するテナントの ID
      • MIN_PASSWORD_LENGTH: 必要なパスワードの最小文字数
      • MAX_PASSWORD_LENGTH: 必要なパスワードの最大文字数

適用を無効にする

  1. プロジェクト レベルでパスワード ポリシーの適用を無効にする手順は次のとおりです。

    Firebase コンソール

    1. Firebase コンソールで、[認証の設定] ページに移動します。

      認証の設定に移動

    2. [パスワード ポリシー] タブを選択します。

    3. パスワード ポリシーの適用を無効にします。

    4. [保存] をクリックします。

    REST

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

      gcloud auth print-access-token --project=PROJECT_ID
      
    2. Identity Toolkit API を使用して、パスワード ポリシーの適用を無効にします。

      curl -X PATCH -d "{'passwordPolicyConfig':{'enforcementState':'OFF'}}" \
          -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=passwordPolicyConfig"
      

      次のように置き換えます。

      • ACCESS_TOKEN: 先ほど生成したアクセス トークン
      • PROJECT_ID: プロジェクト ID
  2. テナント レベルでパスワード ポリシーの適用を無効にする手順は次のとおりです。

    REST

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

      gcloud auth print-access-token --project=PROJECT_ID
      
    2. IdentityToolkit API を使用して、テナントのパスワード ポリシーの適用を無効にします。

      curl -X PATCH -d "{'passwordPolicyConfig':{'enforcementState':'OFF'}}" \
          -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/tenants/TENANT_ID?updateMask=passwordPolicyConfig"
      

      次のように置き換えます。

      • ACCESS_TOKEN: 先ほど生成したアクセス トークン
      • PROJECT_ID: プロジェクト ID
      • 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 couldn't be validated.
});
const policy = status.passwordPolicy;

// Use the status and policy to show what requirements are met and which are
// missing.