הפעלה, השבתה ושימוש במדיניות סיסמאות

במאמר הזה מוסבר איך להגדיר מדיניות סיסמאות כדי לשפר את חוזק הסיסמאות של משתמשים חדשים וקיימים.

סקירה כללית

באמצעות כללי מדיניות לסיסמאות, אתם יכולים לשפר את אבטחת החשבון על ידי אכיפת דרישות מורכבות לסיסמאות. המדיניות בנושא סיסמאות תומכת בדרישות הבאות בנוגע לסיסמאות:

  • נדרשת אות קטנה
  • נדרשת אות גדולה
  • חובה להזין תו מספרי
  • נדרש תו שאינו אלפאנומרי
  • אורך סיסמה מינימלי (הטווח הוא 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"
        }
      ]
    }
    

משתמשים חדשים נדרשים לבחור סיסמה שעומדת בדרישות המדיניות. אם יש לכם משתמשים פעילים, אנחנו ממליצים לא להפעיל שדרוג מאולץ בכניסה לחשבון, אלא אם אתם מתכוונים לאכוף את מדיניות הסיסמאות באופן מיידי. במקום זאת, אפשר להשתמש במצב ההתראה, שמאפשר למשתמשים להיכנס עם הסיסמאות הנוכחיות שלהם ושולח התראות עם פירוט של הדרישות שהסיסמה לא עומדת בהן.

כשמפעילים את האכיפה, מגדירים את forceUpgradeOnSignin ל-true כדי להפעיל את האכיפה במצב חובה. מגדירים את האפשרות 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 במזהה הדייר שרוצים להשבית עבורו מדיניות סיסמאות.

אכיפה בצד הלקוח

אפשר לאמת סיסמאות מול מדיניות הסיסמאות של הפרויקט או של הדייר בצד הלקוח לפני השליחה.

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.