في حال الترقية إلى Firebase Authentication with Identity Platform، يمكنك مصادقة المستخدمين من خلال Firebase باستخدام الموفّر المتوافق مع OpenID Connect (OIDC) الذي تختاره. هذا النمط تُتيح استخدام موفّري هوية غير معتمدين في Firebase في الأصل.
قبل البدء
لتسجيل دخول المستخدمين باستخدام موفِّر OIDC، عليك أولاً جمع بعض المعلومات. من المزود:
Client-ID (رقم تعريف العميل): سلسلة فريدة للمقدّم الذي يعرّف تطبيقك. يمكن أن يعيّن لك مزوّد الخدمة معرّف عميل مختلف لكل نظام أساسي تدعمه. هذه إحدى قيم المطالبة "
aud
" في الرموز المميّزة للمعرّف الصادر عن المستخدم.سر العميل: سلسلة سرية يستخدمها موفّر الخدمة لتأكيد الملكية لمعرف العميل. يجب توفير سر عميل مطابق لكل معرِّف عميل. (هذه القيمة مطلوبة فقط إذا كنت تستخدم مسار رمز المصادقة، وهو ننصح باستخدامها بشدة).
جهة الإصدار: سلسلة تحدِّد هوية مقدّم الخدمة. يجب أن تكون هذه القيمة عنوان URL يشير إلى الموقع الجغرافي عند إلحاقه بـ
/.well-known/openid-configuration
مستند اكتشاف OIDC الخاص بمزود الخدمة. على سبيل المثال، إذا كانت جهة الإصدارhttps://auth.example.com
، يجب أن يكون مستند Discovery متاحًا علىhttps://auth.example.com/.well-known/openid-configuration
بعد حصولك على المعلومات المذكورة أعلاه، فعّل OpenID Connect كتسجيل دخول. مقدم الخدمة لمشروعك على Firebase:
في حال عدم الترقية إلى Firebase Authentication with Identity Platform، يُرجى إجراء ذلك. مصادقة OpenID Connect لا تتوفّر إلا في المشاريع التي تمت ترقيتها.
على مقدّمي الخدمات الذين يسجّلون الدخول في وحدة تحكم Firebase، وانقر على إضافة موفِّر جديد، ثم انقر على ربط OpenID.
اختَر ما إذا كنت ستستخدم مسار رمز التفويض أو تدفق المنح الضمني
يجب استخدام مسار الرمز دائمًا إذا كان مقدّم الخدمة يتيح ذلك. تشير رسالة الأشكال البيانية التدفق الضمني أقل أمانًا ولا ننصح باستخدامه بشدة.
يُرجى تسمية مقدّم الخدمة هذا. دوِّن رقم تعريف موفّر الخدمة الذي يتم إنشاؤه: شيء مثل
oidc.example-provider
. ستحتاج إلى رقم التعريف هذا عند إضافة رمز تسجيل الدخول إلى تطبيقك.حدِّد معرّف العميل وسر العميل وسلسلة جهة الإصدار الخاصة بموفِّر الخدمة. يجب أن تتطابق هذه القيم تمامًا مع القيم التي عيّنها لك مزوّد الخدمة.
احفظ التغييرات.
معالجة عملية تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) لمنصّة Firebase
أسهل طريقة لمصادقة المستخدمين مع Firebase باستخدام OIDC هو معالجة عملية تسجيل الدخول بالكامل باستخدام حزمة تطوير البرامج لمنصّة Firebase.
لمعالجة مسار تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) لمنصات Firebase Apple، اتّبِع الخطوات التالية الخطوات:
إضافة مخططات عناوين URL مخصصة إلى مشروع Xcode:
- افتح إعدادات المشروع: انقر نقرًا مزدوجًا على اسم المشروع في العرض الشجري الأيسر. اختَر تطبيقك من قسم TARGETS، ثم واختَر علامة التبويب المعلومات، ووسِّع القسم أنواع عناوين URL.
- انقر على الزر + وأضِف رقم تعريف التطبيق المشفر كعنوان URL.
. يمكنك العثور على رقم تعريف التطبيق المشفر على
الإعدادات العامة
"الإعدادات" في وحدة تحكُّم Firebase، في قسم نظام التشغيل iOS
التطبيق. واترك الحقول الأخرى فارغة.
عند الانتهاء، من المفترض أن تبدو التهيئة بشكل مشابه التالية (ولكن مع القيم الخاصة بالتطبيقات):
إنشاء نسخة افتراضية من
OAuthProvider
باستخدام رقم تعريف الموفّر الذي حصلت عليه وحدة تحكم Firebase.Swift
var provider = OAuthProvider(providerID: "oidc.example-provider")
Objective-C
FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"oidc.example-provider"];
اختياري: تحديد مَعلمات OAuth المخصَّصة الإضافية التي تريد الإرسال باستخدام طلب OAuth.
Swift
provider.customParameters = [ "login_hint": "user@example.com" ]
Objective-C
[provider setCustomParameters:@{@"login_hint": @"user@example.com"}];
ويمكنك الرجوع إلى مزوّد الخدمة لمعرفة المعلَمات التي يوفّرها. تجدر الإشارة إلى أنّه لا يمكنك تمرير المَعلمات المطلوبة في Firebase مع
setCustomParameters
هذه المعلمات هيclient_id
،response_type
وredirect_uri
وstate
وscope
response_mode
اختياري: حدِّد نطاقات OAuth 2.0 الإضافية بخلاف الملف الشخصي الأساسي الذي التي ترغب في طلبها من مُقدِّم خدمة المصادقة.
Swift
provider.scopes = ["mail.read", "calendars.read"]
Objective-C
[provider setScopes:@[@"mail.read", @"calendars.read"]];
يُرجى التواصل مع مقدّم الخدمة لمعرفة النطاقات التي يتوافق معها.
اختياري: إذا كنت تريد تخصيص طريقة عرض تطبيقك
SFSafariViewController
أوUIWebView
عندما تعرض اختبار reCAPTCHA للمستخدم، أنشئ فئة مخصصة تتوافق إلى بروتوكولAuthUIDelegate
.عليك المصادقة مع Firebase باستخدام كائن موفّر بروتوكول OAuth.
Swift
// If you created a custom class that conforms to AuthUIDelegate, // pass it instead of nil: 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
// If you created a custom class that conforms to AuthUIDelegate, // pass it instead of nil: [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 }]; } }];
بينما تركز الأمثلة أعلاه على تدفقات تسجيل الدخول، لديك أيضًا إمكانية ربط موفر OIDC بمستخدم حالي باستخدام
linkWithCredential
على سبيل المثال، يمكنك ربط عدة مواقع مقدمي الخدمة للمستخدم نفسه مما يسمح لهم بتسجيل الدخول باستخدام أي منهما.Swift
Auth().currentUser.link(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // OIDC 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. } // OIDC 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 }];
معالجة عملية تسجيل الدخول يدويًا
إذا سبق لك تنفيذ خطوات تسجيل الدخول إلى OpenID Connect في تطبيقك، استخدام الرمز المميز للمعرّف مباشرةً للمصادقة مع Firebase:
Swift
let credential = OAuthProvider.credential(
withProviderID: "oidc.example-provider", // As registered in Firebase console.
idToken: idToken, // ID token from OpenID Connect flow.
rawNonce: nil
)
Auth.auth().signIn(with: credential) { authResult, error in
if error {
// Handle error.
return
}
// User is signed in.
// IdP data available in authResult?.additionalUserInfo?.profile
}
Objective-C
FIROAuthCredential *credential =
[FIROAuthProvider credentialWithProviderID:@"oidc.example-provider" // As registered in Firebase console.
IDToken:idToken // ID token from OpenID Connect flow.
rawNonce:nil];
[[FIRAuth auth] signInWithCredential:credential
completion:^(FIRAuthDataResult * _Nullable authResult,
NSError * _Nullable error) {
if (error != nil) {
// Handle error.
return;
}
// User is signed in.
// IdP data available in authResult.additionalUserInfo.profile
}];
الخطوات التالية
بعد تسجيل المستخدم الدخول لأول مرة، يتم إنشاء حساب مستخدم جديد المرتبطة ببيانات الاعتماد - أي اسم المستخدم وكلمة المرور، رقم أو معلومات موفّر المصادقة - المستخدم الذي سجّل الدخول باستخدامه. هذا الجديد كجزء من مشروع 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; }
قد تحتاج أيضًا إلى إضافة رمز معالجة الأخطاء للنطاق الكامل للمصادقة الأخطاء. يُرجى الاطّلاع على التعامل مع الأخطاء.