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

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

אם רוצים להגדיר מדיניות לסיסמאות ממסוף Firebase, אפשר לעיין במאמר הגדרת מדיניות לסיסמאות.

סקירה כללית

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

  • נדרשת אות קטנה
  • נדרשת אות גדולה
  • חובה להזין תו מספרי
  • נדרש תו שאינו אלפאנומרי
  • אורך סיסמה מינימלי (הטווח הוא 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. כדי לאכוף מדיניות סיסמאות ברמת הפרויקט, מבצעים את השלבים הבאים:

    מסוף Firebase

    1. במסוף Firebase, עוברים לדף הגדרות אימות.

      מעבר אל Authentication Settings

    2. לוחצים על הכרטיסייה מדיניות סיסמאות.

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

    4. בוחרים את מצב האכיפה (חובה או התראה) ואם לשדרג את הסיסמאות בכניסה.

    5. לוחצים על Save.

    REST

    1. במסוף 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: מזהה הפרויקט
      • MIN_PASSWORD_LENGTH: האורך המינימלי הנדרש של הסיסמה
      • MAX_PASSWORD_LENGTH: אורך הסיסמה המקסימלי הנדרש
  3. כדי לאכוף מדיניות סיסמאות ברמת הדייר, מבצעים את השלבים הבאים:

    REST

    1. במסוף 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: מזהה הפרויקט
      • TENANT_ID: המזהה של הדייר שבו רוצים לאכוף את מדיניות הסיסמאות
      • MIN_PASSWORD_LENGTH: האורך המינימלי הנדרש של הסיסמה
      • MAX_PASSWORD_LENGTH: אורך הסיסמה המקסימלי הנדרש

השבתת האכיפה

  1. כדי להשבית את האכיפה של מדיניות הסיסמאות ברמת הפרויקט, פועלים לפי השלבים הבאים:

    מסוף Firebase

    1. במסוף Firebase, עוברים לדף הגדרות אימות.

      מעבר אל Authentication Settings

    2. לוחצים על הכרטיסייה מדיניות סיסמאות.

    3. להשבית את האכיפה של מדיניות הסיסמאות.

    4. לוחצים על Save.

    REST

    1. במסוף 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: מזהה הפרויקט
  2. כדי להשבית את האכיפה של מדיניות הסיסמאות ברמת הדייר, פועלים לפי השלבים הבאים:

    REST

    1. במסוף 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/tenants/TENANT_ID?updateMask=passwordPolicyConfig"
      

      מחליפים את מה שכתוב בשדות הבאים:

      • ACCESS_TOKEN: אסימון הגישה שיצרתם קודם
      • PROJECT_ID: מזהה הפרויקט
      • TENANT_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.