يمكنك السماح للمستخدمين بالمصادقة باستخدام Firebase من خلال موفّري OAuth، مثل Microsoft Azure Active Directory، وذلك عن طريق دمج تسجيل الدخول العام المستند إلى الويب باستخدام OAuth في تطبيقك باستخدام حزمة تطوير البرامج (SDK) من Firebase لتنفيذ عملية تسجيل الدخول الكاملة.
قبل البدء
لتسجيل دخول المستخدمين باستخدام حسابات Microsoft (Azure Active Directory وحسابات Microsoft الشخصية)، عليك أولاً تفعيل Microsoft كموفّر لتسجيل الدخول في مشروع Firebase:
- أضِف Firebase إلى مشروع Apple.
- في وحدة تحكّم Firebase، انتقِل إلى الأمان > المصادقة.
- في علامة التبويب طريقة تسجيل الدخول، فعِّل موفّر تسجيل الدخول Microsoft.
-
أضِف معرّف العميل وسر العميل من وحدة تحكّم المطوّرين الخاصة بمقدّم الخدمة إلى إعدادات مقدّم الخدمة:
- لتسجيل عميل Microsoft OAuth، اتّبِع التعليمات الواردة في البدء السريع: تسجيل تطبيق باستخدام نقطة نهاية Azure Active Directory الإصدار 2.0. يُرجى العِلم أنّ نقطة النهاية هذه تتيح تسجيل الدخول باستخدام حسابات Microsoft الشخصية بالإضافة إلى حسابات Azure Active Directory. مزيد من المعلومات حول الإصدار 2.0 من Azure Active Directory
-
عند تسجيل التطبيقات لدى هؤلاء المقدّمين، احرص على تسجيل نطاق
*.firebaseapp.comلمشروعك كنطاق إعادة التوجيه لتطبيقك.
- انقر على حفظ.
التعامل مع عملية تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) من Firebase
للتعامل مع عملية تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) لمنصات Apple في Firebase، اتّبِع الخطوات التالية:
أضِف مخططات عناوين URL المخصّصة إلى مشروع Xcode باتّباع الخطوات التالية:
- افتح إعدادات مشروعك: انقر نقرًا مزدوجًا على اسم المشروع في عرض الشجرة الأيمن. اختَر تطبيقك من قسم الاستهدافات، ثم انقر على علامة التبويب المعلومات، ووسِّع قسم أنواع عناوين URL.
-
انقر على الزر + وأضِف معرّف التطبيق المرمّز كمخطّط URL.
اترك الحقول الأخرى فارغة.
يمكنك العثور على رقم تعريف التطبيق المرمّز في وحدة تحكّم Firebase: انتقِل إلى علامة التبويب
الإعدادات > عام، ثم انتقِل للأسفل إلى قسم تطبيقاتك لعرض تفاصيل حول تطبيق iOS.عند الانتهاء، من المفترض أن تبدو الإعدادات مشابهة لما يلي (ولكن مع القيم الخاصة بتطبيقك):
أنشئ مثيلاً من OAuthProvider باستخدام معرّف موفّر الخدمة microsoft.com.
Swift
var provider = OAuthProvider(providerID: "microsoft.com")
Objective-C
FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"microsoft.com"];
اختياري: حدِّد مَعلمات OAuth مخصّصة إضافية تريد إرسالها مع طلب OAuth.
Swift
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 الخاص بالمستأجر. ويمكن إجراء ذلك من خلال تحديد حقل "المستأجر" في عنصر المَعلمات المخصّصة.
Swift
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"};
اختياري: حدِّد نطاقات إضافية لبروتوكول OAuth 2.0 تتجاوز الملف الشخصي الأساسي الذي تريد طلبه من موفّر المصادقة.
Swift
provider.scopes = ["mail.read", "calendars.read"]
Objective-C
[provider setScopes:@[@"mail.read", @"calendars.read"]];
لمزيد من المعلومات، يُرجى الرجوع إلى مستندات Microsoft حول الأذونات والموافقة.
اختياري: إذا أردت تخصيص طريقة عرض تطبيقك
SFSafariViewControllerأوUIWebViewعند عرض reCAPTCHA للمستخدم، أنشئ فئة مخصّصة تتوافق مع بروتوكولAuthUIDelegate، ومرِّرها إلىcredentialWithUIDelegate.يمكنك المصادقة باستخدام Firebase من خلال عنصر موفّر OAuth.
Swift
// 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، لا يوفّر Microsoft عنوان URL للصورة، وبدلاً من ذلك، يجب طلب البيانات الثنائية لصورة الملف الشخصي من خلال Microsoft Graph API.
بالإضافة إلى رمز الدخول إلى OAuth، يمكن أيضًا استرداد رمز التعريف الخاص بالمستخدم في OAuth من العنصر
OAuthCredential. إنّ السمةsubفي رمز التعريف المميّز خاصّة بالتطبيق ولن تتطابق مع معرّف المستخدم الموحّد الذي تستخدمه خدمة "المصادقة عبر Firebase" ويمكن الوصول إليه من خلالuser.providerData[0].uid. يجب استخدام حقل المطالبةoidبدلاً من ذلك. عند استخدام مستأجر Azure AD لتسجيل الدخول، سيكون الادعاءoidمطابقًا تمامًا. ومع ذلك، في حالة عدم توفّر المستأجر، يتمّ إضافة مساحة فارغة إلى الحقلoid. بالنسبة إلى معرّف4b2eabcdefghijklموحّد، سيتضمّنoidنموذجًا00000000-0000-0000-4b2e-abcdefghijkl.في حين تركّز الأمثلة أعلاه على خطوات تسجيل الدخول، يمكنك أيضًا ربط موفّر Microsoft بحساب مستخدم حالي باستخدام
linkWithCredential. على سبيل المثال، يمكنك ربط عدة مقدّمي خدمات بالمستخدم نفسه، ما يسمح له بتسجيل الدخول باستخدام أيّ منهم.Swift
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 }];
يمكن استخدام النمط نفسه مع
reauthenticateWithCredentialالذي يمكن استخدامه لاسترداد بيانات اعتماد جديدة للعمليات الحساسة التي تتطلب تسجيل دخول حديث.Swift
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 Realtime Database وCloud Storage قواعد الأمان، يمكنك الحصول على معرّف المستخدِم الفريد للمستخدِم الذي سجّل الدخول من المتغيّر
auth، واستخدامه للتحكّم في البيانات التي يمكن للمستخدِم الوصول إليها.
يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام موفّري مصادقة متعدّدين من خلال ربط بيانات اعتماد موفّر المصادقة بحساب مستخدم حالي.
لتسجيل خروج مستخدم، اتّصِل بالرقم
signOut:.
Swift
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; }
يمكنك أيضًا إضافة رمز معالجة الأخطاء لمجموعة كاملة من أخطاء المصادقة. اطّلِع على التعامل مع الأخطاء.