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

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

개요

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

  • 소문자 필요
  • 대문자 필요
  • 숫자 필요
  • 영숫자가 아닌 문자 필요
  • 비밀번호 최소 길이(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().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.