אימות באמצעות Microsoft ו-Unity

ניתן לאפשר למשתמשים לבצע אימות מול Firebase באמצעות ספקי OAuth כמו Microsoft Azure Active Directory על ידי שילוב OAuth התחברות כללית מבוססת-אינטרנט להיכנס לאפליקציה באמצעות Firebase SDK כדי לבצע את תהליך הכניסה מקצה לקצה. מכיוון שהתהליך הזה מחייב שימוש בערכות SDK של Firebase שמבוססות על טלפון, נתמך בפלטפורמות Android ו-Apple.

לפני שמתחילים

כדי להשתמש ב-Firebase Authentication, צריך:

  • רושמים את הפרויקט ב-Unity ומגדירים אותו לשימוש ב-Firebase.

    • אם בפרויקט ב-Unity כבר נעשה שימוש ב-Firebase, הוא כבר משתמש ב-Firebase רשומה והוגדרה ל-Firebase.

    • אם אין לכם פרויקט ב-Unity, תוכלו להוריד אפליקציה לדוגמה.

  • מוסיפים את ה-SDK Firebase Unity (באופן ספציפי, FirebaseAuth.unitypackage) אל בפרויקט ב-Unity.

חשוב לזכור שההוספה של Firebase לפרויקט Unity כוללת משימות, במסוף Firebase ובפרויקט Unity הפתוח (לדוגמה, אתם מורידים קובצי תצורה של Firebase מהמסוף, ואז מעבירים אותם בפרויקט ב-Unity).

גישה לכיתה Firebase.Auth.FirebaseAuth

המחלקה FirebaseAuth היא השער לכל הקריאות ל-API. אפשר לגשת אליה דרך FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

איך מבצעים את תהליך הכניסה באמצעות Firebase SDK

כדי לבצע את תהליך הכניסה באמצעות Firebase SDK, צריך לבצע את השלבים הבאים:

  1. בנייה של מופע של FederatedOAuthProviderData שהוגדר באמצעות מזהה הספק שמתאים ל-Microsoft.

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    providerData.ProviderId = Firebase.Auth.MicrosoftAuthProvider.ProviderId;
    
  2. אופציונלי: מציינים פרמטרים מותאמים אישית נוספים של OAuth שרוצים להגדיר שליחה עם בקשת ה-OAuth.

    providerData.CustomParameters = new Dictionary<string,string>;
    
    // Prompt user to re-authenticate to Microsoft.
    providerData.CustomParameters.Add("prompt", "login");
    
    // Target specific email with login hint.
    providerData.CustomParameters.Add("login_hint",
        "user@firstadd.onmicrosoft.com");
    

    למידע על הפרמטרים שנתמכים ב-Microsoft, ראו מסמכי תיעוד של Microsoft OAuth. שימו לב שאי אפשר להעביר פרמטרים שנדרשים ל-Firebase עם setCustomParameters() הפרמטרים האלה הם client_id, response_type, redirect_uri, state, scope וגם response_mode.

    כדי לאפשר רק למשתמשים מדייר (tenant) מסוים של Azure AD לחתום באפליקציה, או שם הדומיין הידידותי של הדייר ב-Azure AD או במזהה ה-GUID של הדייר. כדי לעשות זאת, אפשר לציין ה-"tenant" באובייקט של הפרמטרים המותאמים אישית.

    // Optional "tenant" parameter in case you are using an Azure AD tenant.
    // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com'
    // or "common" for tenant-independent tokens.
    // The default value is "common".
    providerData.CustomParameters.Add("tenant", "TENANT_ID");
    
  3. אופציונלי: מציינים היקפי הרשאות OAuth 2.0 נוספים מעבר לפרופיל הבסיסי שרוצים לבקש מספק האימות.

    providerData.Scopes = new List<string>();
    providerData.Scopes.Add("mail.read");
    providerData.Scopes.Add("calendars.read");
    

    מידע נוסף זמין מסמכי בנושא הרשאות והסכמה של Microsoft.

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

    // Construct a FederatedOAuthProvider for use in Auth methods.
    Firebase.Auth.FederatedOAuthProvider provider = new Firebase.Auth.FederatedOAuthProvider();
    provider.SetProviderData(providerData);
    
  5. מבצעים אימות עם Firebase באמצעות אובייקט של ספק האימות. שימו לב שבניגוד ל- פעולות אחרות של FirebaseAuth – הן יכולות לשלוט בממשק המשתמש שלכם על ידי הקפצה תצוגת אינטרנט שבה המשתמש יכול להזין את פרטי הכניסה שלו.

    כדי להתחיל את תהליך הכניסה, צריך לקרוא ל-SignInAndRetrieveDataWithCredentialAsync:

    auth.SignInWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("SignInWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError("SignInWithProviderAsync encountered an error: " +
              task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User signed in successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    

    באמצעות אסימון הגישה של OAuth, אפשר לקרוא ל- Microsoft Graph API.

    בניגוד לספקים אחרים שנתמכים על ידי Firebase Auth, Microsoft לא מספקים כתובת URL של תמונה, ובמקום זאת, הנתונים הבינאריים של תמונת פרופיל לשליחת בקשה דרך Microsoft Graph API.

  6. הדוגמאות שלמעלה מתמקדות בתהליכי כניסה, אבל אפשר גם לקשר ספק של Microsoft Azure Active Directory למשתמש קיים באמצעות LinkWithProviderAsync. לדוגמה, אפשר לקשר כמה ספקים לאותו משתמש ולאפשר לו להיכנס באמצעות כל אחד מהם.

    user.LinkWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("LinkWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError("LinkWithProviderAsync encountered an error: "
              + task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User linked successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  7. אפשר להשתמש באותו קו ביטול נעילה יחד עם ReauthenticateWithProviderAsync, יכול לשמש לאחזור פרטי כניסה חדשים לפעולות רגישות נדרשת התחברות מהזמן האחרון.

    user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("ReauthenticateWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError(
            "ReauthenticateWithProviderAsync encountered an error: " +
                task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User reauthenticated successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    

השלבים הבאים

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

  • באפליקציות שלכם, תוכלו לקבל את פרטי הפרופיל הבסיסיים של המשתמש דרך אובייקט Firebase.Auth.FirebaseUser:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
  • בתוך Firebase Realtime Database ו-Cloud Storage כללי אבטחה – מקבלים את מזהה המשתמש הייחודי של המשתמש המחובר מהמשתנה auth, ולהשתמש בהם כדי לקבוע לאילו נתונים המשתמש יוכל לגשת.

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

כדי לנתק משתמש מהחשבון, יש להתקשר אל SignOut():

auth.SignOut();