비밀번호 정책 사용 설정, 사용 중지 및 사용하기

이 문서에서는 비밀번호 정책을 사용하여 신규 사용자와 기존 사용자의 비밀번호 안전성을 향상시키는 방법을 설명합니다.

개요

비밀번호 정책을 사용하면 비밀번호 복잡성 요구사항을 적용하여 계정 보안을 강화할 수 있습니다. 비밀번호 정책에서는 다음과 같은 비밀번호 요구사항을 지원합니다.

  • 소문자 필요
  • 대문자 필요
  • 숫자 필요
  • 영숫자가 아닌 문자 필요
  • 비밀번호 최소 길이(6~30자, 기본값은 6)
  • 비밀번호 최대 길이(최대 4,096자)

다음 문자는 구성된 경우 영숫자가 아닌 문자 요구사항을 충족합니다.

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

시작하기 전에

시행 모드

비밀번호 정책 시행은 다음 두 가지 모드로 사용 설정할 수 있습니다.

  • 필수: 사용자가 정책을 준수하는 비밀번호를 업데이트할 때까지 로그인 시도가 실패합니다.
  • 알림: 사용자는 정책을 준수하지 않는 비밀번호로 로그인할 수 있습니다. 정책 충족 필수 기준에서 누락된 기준이 있으면 반환됩니다. 반환되는 기준은 다음과 같습니다.

    • 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().tenantConfigManager().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().tenantConfigManager().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.