אימות באמצעות Microsoft בפלטפורמות של Apple

אתה יכול לאפשר למשתמשים שלך לבצע אימות עם Firebase באמצעות ספקי OAuth כמו Microsoft Azure Active Directory על ידי שילוב OAuth Login גנרי מבוסס אינטרנט באפליקציה שלך באמצעות Firebase SDK כדי לבצע את זרימת הכניסה מקצה לקצה.

לפני שאתה מתחיל

כדי להיכנס למשתמשים באמצעות חשבונות Microsoft (Azure Active Directory וחשבונות Microsoft אישיים), תחילה עליך להפעיל את Microsoft כספק כניסה לפרויקט Firebase שלך:

  1. הוסף את Firebase לפרויקט Apple שלך .
  2. במסוף Firebase , פתח את הקטע Auth .
  3. בכרטיסייה שיטת כניסה , הפעל את ספק Microsoft .
  4. הוסף את מזהה הלקוח ואת סוד הלקוח ממסוף המפתחים של אותו ספק לתצורת הספק:
    1. כדי לרשום לקוח Microsoft OAuth, בצע את ההוראות בהתחלה מהירה: רישום אפליקציה עם נקודת הקצה של Azure Active Directory v2.0 . שים לב שנקודת קצה זו תומכת בכניסה באמצעות חשבונות אישיים של Microsoft וכן חשבונות Azure Active Directory. למידע נוסף על Azure Active Directory v2.0.
    2. בעת רישום אפליקציות אצל ספקים אלה, הקפד לרשום את הדומיין *.firebaseapp.com עבור הפרויקט שלך כדומיין ההפניה מחדש עבור האפליקציה שלך.
  5. לחץ על שמור .

טפל בזרימת הכניסה עם Firebase SDK

כדי לטפל בזרימת הכניסה עם Firebase Apple platforms SDK, בצע את השלבים הבאים:

  1. הוסף סכימות כתובת URL מותאמות אישית לפרויקט Xcode שלך:

    1. פתח את תצורת הפרויקט שלך: לחץ פעמיים על שם הפרויקט בתצוגת העץ השמאלית. בחר את האפליקציה שלך מהקטע 'יעדים' ולאחר מכן בחר בכרטיסייה 'מידע ' והרחב את הקטע 'סוגי כתובות אתרים' .
    2. לחץ על הלחצן + , והוסף את מזהה האפליקציה המקודדת שלך כסכימת כתובת URL. אתה יכול למצוא את מזהה האפליקציה המקודדת שלך בדף ההגדרות הכלליות של מסוף Firebase, בקטע של אפליקציית iOS שלך. השאר את השדות האחרים ריקים.

      לאחר השלמתו, התצורה שלך אמורה להיראות משהו דומה להלן (אבל עם הערכים הספציפיים ליישום שלך):

      צילום מסך של ממשק הגדרת סכימת ה-URL המותאמת אישית של Xcode
  2. צור מופע של OAuthProvider באמצעות מזהה הספק microsoft.com .

    מָהִיר

        var provider = OAuthProvider(providerID: "microsoft.com")
        

    Objective-C

        FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"microsoft.com"];
        
  3. אופציונלי : ציין פרמטרים נוספים של OAuth מותאמים אישית שברצונך לשלוח עם בקשת ה-OAuth.

    מָהִיר

        provider.customParameters = [
          "prompt": "consent",
          "login_hint": "user@firstadd.onmicrosoft.com"
        ]
        

    Objective-C

        [provider setCustomParameters:@{@"prompt": @"consent", @"login_hint": @"user@firstadd.onmicrosoft.com"}];
        

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

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

    מָהִיר

        provider.customParameters = [
          // 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".
          "tenant": "TENANT_ID"
        ]
        

    Objective-C

        // 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".
        provider.customParameters = @{@"tenant": @"TENANT_ID"};
        
  4. אופציונלי : ציין היקפי OAuth 2.0 נוספים מעבר לפרופיל הבסיסי שברצונך לבקש מספק האימות.

    מָהִיר

        provider.scopes = ["mail.read", "calendars.read"]
        

    Objective-C

        [provider setScopes:@[@"mail.read", @"calendars.read"]];
        

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

  5. אופציונלי : אם ברצונך להתאים אישית את האופן שבו האפליקציה שלך מציגה את SFSafariViewController או UIWebView בעת הצגת ה-reCAPTCHA למשתמש, צור מחלקה מותאמת אישית התואמת את פרוטוקול AuthUIDelegate , והעביר אותו ל- credentialWithUIDelegate .

  6. בצע אימות עם Firebase באמצעות אובייקט ספק OAuth.

    מָהִיר

        // Replace nil with the custom class that conforms to AuthUIDelegate
        // you created in last step to use a customized web view.
        provider.getCredentialWith(nil) { credential, error in
          if error != nil {
            // Handle error.
          }
          if credential != nil {
            Auth().signIn(with: credential) { authResult, error in
              if error != nil {
                // Handle error.
              }
              // User is signed in.
              // IdP data available in authResult.additionalUserInfo.profile.
              // OAuth access token can also be retrieved:
              // (authResult.credential as? OAuthCredential)?.accessToken
              // OAuth ID token can also be retrieved:
              // (authResult.credential as? OAuthCredential)?.idToken
            }
          }
        }
        

    Objective-C

        [provider getCredentialWithUIDelegate:nil
                                   completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) {
          if (error) {
           // Handle error.
          }
          if (credential) {
            [[FIRAuth auth] signInWithCredential:credential
                                      completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) {
              if (error) {
                // Handle error.
              }
              // User is signed in.
              // IdP data available in authResult.additionalUserInfo.profile.
              // OAuth access token can also be retrieved:
              // ((FIROAuthCredential *)authResult.credential).accessToken
              // OAuth ID token can also be retrieved:
              // ((FIROAuthCredential *)authResult.credential).idToken
            }];
          }
        }];
        

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

    לדוגמה, כדי לקבל מידע בסיסי על הפרופיל, אתה יכול לקרוא ל- REST API, להעביר את אסימון הגישה בכותרת Authorization :

    https://graph.microsoft.com/v1.0/me
    

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

    בנוסף לאסימון הגישה של OAuth, ניתן לאחזר את אסימון ה-OAuth ID של המשתמש גם מאובייקט OAuthCredential . תביעת sub באסימון המזהה היא ספציפית לאפליקציה ולא תתאים למזהה המשתמש המאוחד המשמש את Firebase Auth ונגיש דרך user.providerData[0].uid . במקום זאת יש להשתמש בשדה תביעת oid . בעת שימוש בדייר Azure AD לכניסה, תביעת ה- oid תהיה התאמה מדויקת. אולם במקרה שאינו דייר, שדה ה- oid מרופד. עבור מזהה מאוחד 4b2eabcdefghijkl , ל- oid יהיה טופס 00000000-0000-0000-4b2e-abcdefghijkl .

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

    מָהִיר

        Auth().currentUser.link(withCredential: credential) { authResult, error in
          if error != nil {
            // Handle error.
          }
          // Microsoft credential is linked to the current user.
          // IdP data available in authResult.additionalUserInfo.profile.
          // OAuth access token can also be retrieved:
          // (authResult.credential as? OAuthCredential)?.accessToken
          // OAuth ID token can also be retrieved:
          // (authResult.credential as? OAuthCredential)?.idToken
        }
        

    Objective-C

        [[FIRAuth auth].currentUser
            linkWithCredential:credential
                    completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
          if (error) {
            // Handle error.
          }
          // Microsoft credential is linked to the current user.
          // IdP data available in authResult.additionalUserInfo.profile.
          // OAuth access token can also be retrieved:
          // ((FIROAuthCredential *)authResult.credential).accessToken
          // OAuth ID token can also be retrieved:
          // ((FIROAuthCredential *)authResult.credential).idToken
        }];
        
  8. ניתן להשתמש באותה דפוס עם reauthenticateWithCredential אשר ניתן להשתמש בו כדי לאחזר אישורים טריים עבור פעולות רגישות הדורשות כניסה אחרונה.

    מָהִיר

        Auth().currentUser.reauthenticateWithCredential(withCredential: credential) { authResult, error in
          if error != nil {
            // Handle error.
          }
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
          // Additional OAuth access token can also be retrieved:
          // (authResult.credential as? OAuthCredential)?.accessToken
          // OAuth ID token can also be retrieved:
          // (authResult.credential as? OAuthCredential)?.idToken
        }
        

    Objective-C

        [[FIRAuth auth].currentUser
            reauthenticateWithCredential:credential
                              completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
          if (error) {
            // Handle error.
          }
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
          // Additional OAuth access token can also be retrieved:
          // ((FIROAuthCredential *)authResult.credential).accessToken
          // OAuth ID token can also be retrieved:
          // ((FIROAuthCredential *)authResult.credential).idToken
        }];
        

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

  • באפליקציות שלך, תוכל לקבל את פרטי הפרופיל הבסיסיים של המשתמש מאובייקט User . ראה ניהול משתמשים .

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

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

כדי לצאת ממשתמש, התקשר ל- signOut: .

מָהִיר

let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}

Objective-C

NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

ייתכן שתרצה להוסיף קוד לטיפול בשגיאות עבור כל מגוון שגיאות האימות. ראה טיפול בשגיאות .