כללי אבטחה ואימות Firebase

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

זהה משתמשים

אימות מזהה משתמשים המבקשים גישה לנתונים שלך ומספק את המידע כמשתנה שתוכל למנף בכללים שלך. auth המשתנה מכיל את הפרטים הבאים:

  • uid : מזהה משתמש ייחודי, הוקצה למשתמש המבקש.
  • token : מפת הערכים שנאספו על ידי אימות.

auth.token המשתנה מכיל את הערכים הבאים:

שדה תיאור
email כתובת הדוא"ל המשויכת לחשבון, אם קיימת.
email_verified true אם המשתמש שאימה יש להם גישה אל email הכתובת. ספקים מסוימים מאמתים באופן אוטומטי את כתובות הדוא"ל שבבעלותם.
phone_number מספר הטלפון המשויך לחשבון, אם קיים.
name שם התצוגה של המשתמש, אם מוגדר.
sub ה- UID של Firebase של המשתמש. זה ייחודי בתוך פרויקט.
firebase.identities מילון של כל הזהויות המשויכות לחשבון משתמש זה. המפתחות של המילון יכול להיות כל אחד מהבאים: email , phone , google.com , facebook.com , github.com , twitter.com . ערכי המילון הם מערכים של מזהים ייחודיים לכל ספק זהות המשויך לחשבון. לדוגמה, auth.token.firebase.identities["google.com"][0] מכיל מזהה המשתמש של Google הראשונה המשויכת לחשבון.
firebase.sign_in_provider ספק הכניסה נהג להשיג אסימון זה. יכול להיות אחד המחרוזות הבאות: custom , password , phone , anonymous , google.com , facebook.com , github.com , twitter.com .

אם אתה רוצה להוסיף תכונות אימות מותאמות אישית, auth.token המשתנה מכיל גם שום טענות מנהג שציינתם.

כאשר הגישה המבקשת המשתמש אינו מחובר, auth המשתנה הוא null . אתה יכול למנף את זה בכללים שלך אם, למשל, אתה רוצה להגביל את הגישה לקריאה למשתמשים מאומתים - auth != null . עם זאת, בדרך כלל אנו ממליצים להגביל את הגישה לכתיבה עוד יותר.

לקבלת מידע נוסף אודות auth משתנה, עיין בתיעוד התייחסות ענן Firestore , מסד זמן אמת , וכן לאחסון בענן .

מינוף מידע על המשתמשים בכללים

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

בכללים שלך, להגדיר כיצד המידע auth משתנה - את פרטי המשתמש של המבקש - תואם את פרטי המשתמש הקשורים הנתונים המבוקשים.

לדוגמא, ייתכן שהאפליקציה שלך תרצה לוודא שמשתמשים יכולים לקרוא ולכתוב רק נתונים משלהם. בתרחיש זה, היית רוצה שידוך בין auth.uid משתנה ואת זיהוי המשתמש על הנתונים המבוקשים:

ענן Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    // Make sure the uid of the requesting user matches name of the user
    // document. The wildcard expression {userId} makes the userId variable
    // available in rules.
    match /users/{userId} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
  }
}

מסד נתונים בזמן אמת

{
  "rules": {
    "users": {
      "$userId": {
        // grants write access to the owner of this user account
        // whose uid must exactly match the key ($userId)
        ".write": "$userId === auth.uid"
      }
    }
  }
}

אחסון בענן

service firebase.storage {
  // Only a user can upload their file, but anyone can view it
  match /users/{userId}/{fileName} {
    allow read;
    allow write: if request.auth != null && request.auth.uid == userId;
  }
}

הגדר פרטי משתמש מותאמים אישית

אתה יכול להמשיך למנף את auth משתנה להגדיר שדות מותאמים אישית שהוקצו משתמשי האפליקציה.

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

ב- Cloud Firestore, תוכל להוסיף שדה מותאם אישית למסמכי המשתמשים ולאחזר את ערך השדה באמצעות קריאה מוטמעת בכללים שלך. לכן, הכלל מבוסס הניהול שלך ייראה כמו הדוגמה הבאה:

ענן Firestore

service cloud.firestore {
  match /databases/{database}/documents/some_collection: {
    // Remember that, in Cloud Firestore, reads embedded in your rules are billed operations
    write: if request.auth != null && get(/databases/(database)/documents/users/$(request.auth.uid)).data.admin) == true;
    read: if request.auth != null;
  }
}

כללים ב Database זמן אמת ו אחסון בענן ליצור טענות מנהג ב Authentication. לאחר מכן, תוכל להפנות טענות אלה מותאמים אישית באמצעות auth.token משתנה.

מסד נתונים בזמן אמת

{
  "rules": {
    "some_path/$sub_path": {
      // Create a custom claim for the admin role
      ".write": "auth.uid != null && auth.token.writer == true"
      ".read": "auth.uid != null"
      }
    }
  }

אחסון בענן

service firebase.storage {
  // Create a custom claim for the admin role
  match /files/{fileName} {
    allow read: if request.auth.uid != null;
    allow write: if request.auth.token.admin == true;
  }
}

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