إذا كنت قد أجريت ترقية إلى الإصدار Firebase Authentication with Identity Platform، يمكنك إضافة المصادقة المتعدّدة العوامل (MFA) المستندة إلى كلمة المرور لمرة واحدة المستندة إلى الوقت (TOTP) إلى تطبيقك.
يتيح لك Firebase Authentication with Identity Platform استخدام مصادقة بروتوكول OTP كعامل إضافي للمصادقة المتعددة العوامل. عند تفعيل هذه الميزة، يظهر للمستخدمين الذين يحاولون تسجيل الدخول إلى تطبيقك طلب للحصول على رمز مرور متغيّر. لإنشاء الرمز، يجب استخدام تطبيق مصادقة قادر على إنشاء رموز TOTP صالحة، مثل Google Authenticator.
قبل البدء
فعِّل موفِّرًا واحدًا على الأقل يتيح ميزة "التحقّق من الهوية بعدة طرق". يُرجى العلم أنّ جميع مقدّمي الخدمة سوى مقدّمي الخدمة التاليين يتيحون ميزة "التحقّق من الهوية الإضافي":
- المصادقة عبر الهاتف
- المصادقة المجهولة
- رموز المصادقة المخصّصة
- Apple Game Center
تأكَّد من أنّ تطبيقك يتحقق من عناوين البريد الإلكتروني للمستخدمين. تتطلّب ميزة "التحقّق من الهوية في خطوتَين" إثبات ملكية عنوان البريد الإلكتروني. ويمنع ذلك الجهات الفاعلة الضارّة من التسجيل في خدمة باستخدام عنوان بريد إلكتروني لا يملكه، ثم حظر مالك عنوان البريد الإلكتروني الفعلي من خلال إضافة عامل ثانٍ.
ثبِّت حزمة تطوير البرامج (SDK) لمنصّة Firebase من Apple، إذا لم يسبق لك إجراء ذلك.
لا تتوفّر ميزة "التوثيق المتعدّد العوامل باستخدام مصادقة كلمة مرور صالحة لمرة واحدة" إلا على الإصدار 10.12.0 من حزمة تطوير البرامج (SDK) من Apple والإصدارات الأحدث، وعلى نظام التشغيل iOS فقط.
تفعيل المصادقة المتعدّدة العوامل باستخدام رمز مصادقة الوقت المتغيّر (TOTP)
لتفعيل بروتوكول TOTP كعامل ثانٍ، استخدِم Admin SDK أو اتصل بنقطة نهاية REST لإعدادات المشروع.
لاستخدام Admin SDK، اتّبِع الخطوات التالية:
ثبِّت حزمة تطوير البرامج (SDK) لواجهة Firebase Admin Node.js إذا لم يسبق لك إجراء ذلك.
لا تتوفّر ميزة "التأكّد من الهوية باستخدام كلمة مرور صالحة لمرة واحدة" (TOTP) إلا في الإصدار 11.6.0 من حزمة تطوير برامج (SDK) Firebase Admin Node.js والإصدارات الأحدث.
نفِّذ ما يلي:
import { getAuth } from 'firebase-admin/auth'; getAuth().projectConfigManager().updateProjectConfig( { multiFactorConfig: { providerConfigs: [{ state: "ENABLED", totpProviderConfig: { adjacentIntervals:
NUM_ADJ_INTERVALS } }] } })استبدِل ما يلي:
NUM_ADJ_INTERVALS
: عدد فواصل المَعلمة time-window المجاورة التي يتم من خلالها قبول الرموز المميّزة لوقت التشغيل (TOTP)، من صفر إلى عشرة. الإعداد التلقائي هو خمسة.تعمل شهادات TOTP من خلال التأكّد من أنّ الطرفَين (المُثبت والمُدقّق) ينشئان شهادات OTP خلال الفترة الزمنية نفسها (عادةً 30 ثانية)، ما يؤدي إلى إنشاء كلمة المرور نفسها. ومع ذلك، لتلبية اختلاف التوقيت بين الطرفَين ووقت استجابة المستخدم، يمكنك ضبط خدمة TOTP لقبول الرموز من النوافذ المجاورة أيضًا.
لتفعيل المصادقة المتعدّدة العوامل باستخدام TOTP باستخدام واجهة برمجة التطبيقات REST، نفِّذ ما يلي:
curl -X PATCH "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID /config?updateMask=mfa" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID " \
-d \
'{
"mfa": {
"providerConfigs": [{
"state": "ENABLED",
"totpProviderConfig": {
"adjacentIntervals": NUM_ADJ_INTERVALS
}
}]
}
}'
استبدِل ما يلي:
-
PROJECT_ID
: رقم تعريف المشروع NUM_ADJ_INTERVALS
: عدد فواصل الإطار الزمني، من صفر إلى عشرة القيمة التلقائية هي خمسة.تعمل شهادات TOTP من خلال التأكّد من أنّ الطرفَين (المُثبت والمُدقّق) ينشئان شهادات OTP خلال الفترة الزمنية نفسها (عادةً 30 ثانية)، ما يؤدي إلى إنشاء كلمة المرور نفسها. ومع ذلك، لتلبية اختلاف التوقيت بين الطرفَين ووقت استجابة المستخدم، يمكنك ضبط خدمة TOTP لقبول الرموز من النوافذ المجاورة أيضًا.
اختيار نمط التسجيل
يمكنك اختيار ما إذا كان تطبيقك يتطلّب المصادقة المتعدّدة العوامل، وكيفية تسجيل المستخدمين ووقت تسجيلهم. تشمل بعض الأنماط الشائعة ما يلي:
سجِّل العامل الثاني للمستخدِم كجزء من عملية التسجيل. استخدِم هذه الطريقة إذا كان تطبيقك يتطلّب مصادقة متعددة العوامل لجميع المستخدمين.
قدِّم خيارًا قابلاً للتخطّي لتسجيل عامل مصادقة ثانٍ أثناء التسجيل. إذا أردت تشجيع استخدام المصادقة المتعدّدة العوامل في تطبيقك بدون فرضها، يمكنك استخدام هذا النهج.
يجب توفير إمكانية إضافة عامل ثانٍ من صفحة إدارة حساب المستخدم أو ملفه الشخصي بدلاً من شاشة الاشتراك. ويؤدي ذلك إلى تقليل الصعوبات أثناء عملية التسجيل، مع إبقاء المصادقة المتعدّدة العوامل متوفرة للمستخدمين الذين يهتمون بالأمان.
اشترِط إضافة عامل ثانٍ بشكل تدريجي عندما يريد المستخدم الوصول إلى الميزات التي تتطلب متطلبات أمان متزايدة.
تسجيل المستخدمين في المصادقة المتعدّدة العوامل باستخدام بروتوكول TOTP
بعد تفعيل مصادقة الهوية متعددة العوامل باستخدام رمز مرور صالح لمرة واحدة (TOTP) كعامل ثانٍ لتطبيقك، نفِّذ برمجيًا منطقًا من جهة العميل لتسجيل المستخدمين في مصادقة الهوية متعددة العوامل باستخدام رمز مرور صالح لمرة واحدة:
أعِد مصادقة المستخدم.
أنشئ سرًا لبروتوكول TOTP للمستخدم الذي تمّت مصادقة هويته:
// Generate a TOTP secret. guard let mfaSession = try? await currentUser.multiFactor.session() else { return } guard let totpSecret = try? await TOTPMultiFactorGenerator.generateSecret(with: mfaSession) else { return } // Display the secret to the user and prompt them to enter it into their // authenticator app. (See the next step.)
اعرض السر على المستخدم واطلب منه إدخاله في تطبيق المصادقة:
// Display this key: let secret = totpSecret.sharedSecretKey()
بالإضافة إلى عرض المفتاح السري، يمكنك محاولة إضافته تلقائيًا إلى تطبيق المصادقة التلقائي على الجهاز. لإجراء ذلك، أنشئ عنوان URL للمفتاح متوافقًا مع Google Authenticator، ثم أعِد توجيهه إلى
openInOTPApp(withQRCodeURL:)
:let otpAuthUri = totpSecret.generateQRCodeURL( withAccountName: currentUser.email ?? "default account", issuer: "Your App Name") totpSecret.openInOTPApp(withQRCodeURL: otpAuthUri)
بعد أن يضيف المستخدم المفتاح السري إلى تطبيق المصادقة، سيبدأ التطبيق في توليد رموز TOTP.
اطلب من المستخدم كتابة كلمة المرور لمرة واحدة (TOTP) التي يعرضها تطبيق المصادقة و استخدامها لإكمال عملية تسجيل ميزة "التحقّق الإضافي":
// Ask the user for a verification code from the authenticator app. let verificationCode = // Code from user input. // Finalize the enrollment. let multiFactorAssertion = TOTPMultiFactorGenerator.assertionForEnrollment( with: totpSecret, oneTimePassword: verificationCode) do { try await currentUser.multiFactor.enroll( with: multiFactorAssertion, displayName: "TOTP") } catch { // Wrong or expired OTP. Re-prompt the user. }
تسجيل دخول المستخدمين باستخدام عامل مصادقة ثانٍ
لتسجيل دخول المستخدمين باستخدام المصادقة المتعدّدة العوامل من خلال رمز مرور متغيّر في الوقت (TOTP)، استخدِم الرمز التالي:
استخدِم إحدى طرق
signIn(with...:)
كما لو لم تكن تستخدم ميزة "التحقّق من الهوية الإضافية" (على سبيل المثال،signIn(withEmail:password:)
). إذا تسبّبت الطريقة في عرض خطأ يحمل الرمزsecondFactorRequired
، ابدأ عملية "التحقّق من الهوية الإضافية" في تطبيقك.do { let authResult = try await Auth.auth().signIn(withEmail: email, password: password) // If the user is not enrolled with a second factor and provided valid // credentials, sign-in succeeds. // (If your app requires MFA, this could be considered an error // condition, which you would resolve by forcing the user to enroll a // second factor.) // ... } catch let error as AuthErrorCode where error.code == .secondFactorRequired { // Initiate your second factor sign-in flow. (See next step.) // ... } catch { // Other auth error. throw error }
يجب أن يطلب مسار المصادقة المتعددة العوامل في تطبيقك من المستخدم أولاً اختيار العامل الثاني الذي يريد استخدامه. يمكنك الحصول على قائمة بالعوامل الثانية المتوافقة من خلال فحص سمة
hints
مثيلMultiFactorResolver
:let mfaKey = AuthErrorUserInfoMultiFactorResolverKey guard let resolver = error.userInfo[mfaKey] as? MultiFactorResolver else { return } let enrolledFactors = resolver.hints.map(\.displayName)
إذا اختار المستخدم استخدام TOTP، اطلب منه كتابة TOTP المعروض على تطبيق المصادقة واستخدامه لتسجيل الدخول:
let multiFactorInfo = resolver.hints[selectedIndex] switch multiFactorInfo.factorID { case TOTPMultiFactorID: let otpFromAuthenticator = // OTP typed by the user. let assertion = TOTPMultiFactorGenerator.assertionForSignIn( withEnrollmentID: multiFactorInfo.uid, oneTimePassword: otpFromAuthenticator) do { let authResult = try await resolver.resolveSignIn(with: assertion) } catch { // Wrong or expired OTP. Re-prompt the user. } default: return }
إلغاء التسجيل في ميزة "التأكّد من الهوية باستخدام كلمة مرور صالحة لمرة واحدة" (TOTP)
يصف هذا القسم كيفية التعامل مع إلغاء تسجيل مستخدم من مصادقة ثنائية العوامل باستخدام رمز متغيّر الوقت (TOTP).
إذا اشترك مستخدم في خيارات متعددة للمصادقة المتعددة العوامل، وفي حال إلغاء تسجيله
من الخيار الذي تم تفعيله مؤخرًا، سيتلقّى إشعارًاauth/user-token-expired
وسيتم تسجيل خروجه. على المستخدم تسجيل الدخول مرة أخرى وإثبات ملكية
بيانات الاعتماد الحالية، مثل عنوان البريد الإلكتروني وكلمة المرور.
لإلغاء تسجيل المستخدم ومعالجة الخطأ وبدء إعادة المصادقة، استخدِم الرمز التالي:
guard let currentUser = Auth.auth().currentUser else { return }
// Prompt the user to select a factor to unenroll, from this array:
currentUser.multiFactor.enrolledFactors
// ...
// Unenroll the second factor.
let multiFactorInfo = currentUser.multiFactor.enrolledFactors[selectedIndex]
do {
try await currentUser.multiFactor.unenroll(with: multiFactorInfo)
} catch let error as AuthErrorCode where error.code == .invalidUserToken {
// Second factor unenrolled, but the user was signed out. Re-authenticate
// them.
}
الخطوات التالية
- إدارة مستخدمي المصادقة متعددة العوامل برمجيًا باستخدام Admin SDK