Catch up on everthing we announced at this year's Firebase Summit. Learn more

المصادقة باستخدام Microsoft على أنظمة تشغيل Apple

يمكنك السماح للمستخدمين بالمصادقة مع Firebase باستخدام موفري OAuth مثل Microsoft Azure Active Directory من خلال دمج تسجيل دخول OAuth العام المستند إلى الويب في تطبيقك باستخدام Firebase SDK لتنفيذ تدفق تسجيل الدخول من النهاية إلى النهاية.

قبل ان تبدأ

لتسجيل دخول المستخدمين باستخدام حسابات Microsoft (Azure Active Directory وحسابات Microsoft الشخصية) ، يجب أولاً تمكين Microsoft كموفر تسجيل دخول لمشروع Firebase الخاص بك:

  1. إضافة Firebase لمشروع أبل الخاص بك .
  2. في وحدة التحكم Firebase ، فتح الباب أصيل.
  3. على علامة التبويب تسجيل الدخول الأسلوب، تمكين موفر Microsoft.
  4. إضافة معرف العميل والعميل السري من وحدة التحكم المطور الذي موفر لتكوين الموفر:
    1. تسجيل عميل Microsoft أوث، اتبع الإرشادات في التشغيل السريع: سجل التطبيق مع أزور V2.0 خدمة Active Directory نقطة النهاية . لاحظ أن نقطة النهاية هذه تدعم تسجيل الدخول باستخدام حسابات Microsoft الشخصية وكذلك حسابات Azure Active Directory. معرفة المزيد حول أزور خدمة Active Directory V2.0.
    2. عند تسجيل التطبيقات مع مقدمي هذه، تأكد من تسجيل *.firebaseapp.com مجال للمشروع الخاص بك كما المجال إعادة توجيه للتطبيق.
  5. انقر فوق حفظ.

تعامل مع تدفق تسجيل الدخول باستخدام Firebase SDK

للتعامل مع تدفق تسجيل الدخول باستخدام Firebase Apple Platform SDK ، اتبع الخطوات التالية:

  1. أضف مخططات URL مخصصة إلى مشروع Xcode الخاص بك:

    1. افتح تكوين المشروع الخاص بك: انقر نقرًا مزدوجًا فوق اسم المشروع في عرض الشجرة الأيسر. حدد التطبيق من قسم الأهداف، ثم حدد علامة التبويب معلومات، وتوسيع القسم أنواع URL.
    2. انقر على زر وإضافة نظام URL لمعرف العميل عكس الخاص بك. العثور على هذه القيمة، فتح GoogleService-Info.plist ملف التكوين، ونظرة لل REVERSED_CLIENT_ID مفتاح. نسخ قيمة هذا المفتاح، ولصقه في مربع URL مخططات في صفحة التكوين. اترك الحقول الأخرى فارغة.

      عند الانتهاء ، يجب أن يبدو التكوين الخاص بك مشابهًا لما يلي (ولكن مع القيم الخاصة بالتطبيق):

  2. إنشاء مثيل OAuthProvider باستخدام ID مزود microsoft.com.

    سويفت

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

    ج موضوعية

        FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"microsoft.com"];
        
  3. اختياري: حدد معلمات إضافية أوث المخصصة التي تريد إرسالها مع طلب أوث.

    سويفت

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

    ج موضوعية

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

    لدعم المعلمات Microsoft، راجع وثائق Microsoft أوث . ملاحظة أنه لا يمكنك تمرير المعلمات المطلوبة Firebase مع setCustomParameters . هذه المعلمات CLIENT_ID، RESPONSE_TYPE، redirect_uri، والدولة، ونطاق 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"
        ]
        

    ج موضوعية

        // 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. اختياري: حدد أوث إضافية نطاقات 2.0 وراء الشخصية الأساسية والتي ترغب في طلب من مزود المصادقة.

    سويفت

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

    ج موضوعية

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

    لمعرفة المزيد، يرجى الرجوع إلى الأذونات وموافقة ثائق Microsoft .

  5. اختياري: إذا كنت ترغب في تخصيص الطريقة يعرض التطبيق الخاص بك SFSafariViewController أو UIWebView عند عرض اختبار reCAPTCHA للمستخدم، وخلق فئة مخصصة الذي يتوافق مع FIRAuthUIDelegate البروتوكول، وتمريرها إلى getCredentialWithUIDelegate:completion: .

  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.accessToken
              // OAuth ID token can also be retrieved:
              // authResult.credential.idToken
            }
          }
        }
        

    ج موضوعية

        [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:
              // authResult.credential.accessToken
              // OAuth ID token can also be retrieved:
              // authResult.credential.idToken
            }];
          }
        }];
        

    باستخدام رمز وصول أوث، يمكنك استدعاء API مايكروسوفت الرسم البياني .

    على سبيل المثال، للحصول على المعلومات الشخصية الأساسية، يمكنك استدعاء API REST، ويمر وصول رمزية في Authorization الرأس:

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

    وخلافا لغيرها من مقدمي الخدمات التي يدعمها Firebase أصيل، مايكروسوفت لا توفر URL الصور وبدلا من ذلك، البيانات الثنائية للصورة الشخصية لابد من طلب عن طريق مايكروسوفت الرسم البياني API .

    وبالإضافة إلى رمز وصول أوث، أوث المستخدم مميز للمعرف يمكن أيضا أن تسترجع من OAuthCredential الكائن. و sub ادعاء في الرمز المميز ID هو التطبيق محددة ولن تطابق معرف المستخدم الاتحادية التي يستخدمها Firebase أصيل ويمكن الوصول إليها عبر user.providerData[0].uid . و oid يجب استخدام مجال المطالبة بدلا من ذلك. عند استخدام المستأجر AD أزور لتسجيل الدخول، و oid سوف مطالبة أن تكون مطابقة تامة. ولكن بالنسبة لحالة غير المستأجر، و oid الحقل مبطن. للحصول على معرف متحدة 4b2eabcdefghijkl ، و oid سيكون لديك نموذج 00000000-0000-0000-4b2e-abcdefghijkl .

  7. وبينما تركز الأمثلة المذكورة أعلاه على تدفقات تسجيل الدخول ل، لديك أيضا القدرة على ربط مزود مايكروسوفت لمستخدم موجود باستخدام 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.accessToken
          // OAuth ID token can also be retrieved:
          // authResult.credential.idToken
        }
        

    ج موضوعية

        [[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:
          // authResult.credential.accessToken
          // OAuth ID token can also be retrieved:
          // 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.accessToken
          // OAuth ID token can also be retrieved:
          // authResult.credential.idToken
        }
        

    ج موضوعية

        [[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:
          // authResult.credential.accessToken
          // OAuth ID token can also be retrieved:
          // authResult.credential.idToken
        }];
        

بعد أن يقوم المستخدم بتسجيل الدخول لأول مرة ، يتم إنشاء حساب مستخدم جديد وربطه ببيانات الاعتماد - أي اسم المستخدم وكلمة المرور أو رقم الهاتف أو معلومات موفر المصادقة - المستخدم الذي قام بتسجيل الدخول باستخدام. يتم تخزين هذا الحساب الجديد كجزء من مشروع Firebase الخاص بك ، ويمكن استخدامه لتحديد هوية مستخدم عبر كل تطبيق في مشروعك ، بغض النظر عن كيفية تسجيل المستخدم للدخول.

  • في التطبيقات الخاصة بك، يمكنك الحصول على المعلومات الشخصية الأساسية للمستخدم من FIRUser الكائن. انظر إدارة المستخدمين .

  • في قاعدة البيانات الخاصة بك Firebase الحقيقي وسحابة التخزين قواعد الأمن ، يمكنك الحصول على قعت في هوية المستخدم الفريد المستخدم من auth متغير، واستخدامها للسيطرة على ما هي البيانات على وصول ويمكن للمستخدم.

يمكنك السماح للمستخدمين تسجيل الدخول إلى التطبيق الخاص بك باستخدام موفري المصادقة متعددة عن طريق ربط المصادقة أوراق اعتماد مقدم إلى حساب مستخدم موجود.

تسجيل الخروج مستخدم، استدعاء signOut: .

سويفت

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

ج موضوعية

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

قد ترغب أيضًا في إضافة رمز معالجة الأخطاء للنطاق الكامل من أخطاء المصادقة. نرى أخطاء مقبض .