تمت ترجمة هذه الصفحة تلقائياً. اقرأ النسخة الأصلية باللغة الإنجليزية هنا.
الورقة البيضاء للمؤسسات حول Passkeys. إرشادات عملية وأنماط إطلاق ومؤشرات KPI لبرامج passkeys.
| النهج | الاعتماد | إنشاء مفاتيح المرور | استخدام مفاتيح المرور | إدارة مفاتيح المرور | التعقيد الفني | دعم OAuth |
|---|---|---|---|---|---|---|
| التنفيذ الأصلي (Native Implementation) | 🟢🟢🟢 | اعتماد عالٍ، أفضل تجربة مستخدم، القياسات الحيوية السلسة | مصادقة فورية وصامتة | تحكم أصلي كامل | متوسط-مرتفع | يتطلب تدفق منفصل |
| System WebView | 🟢🟢 | اعتماد جيد، تجربة تشبه المتصفح | تجربة مستخدم المتصفح القياسية، سلسلة مفاتيح مشتركة | إدارة قائمة على المتصفح | منخفض | ممتاز |
| Embedded WebView | 🟢 | اعتماد أقل، يتطلب المزيد من الإعداد | دعم أصلي لـ iOS و Android (WebKit 1.12.1+)، لا يوجد Conditional UI | تحكم محدود | متوسط-مرتفع | غير متوفر |
ملاحظة: غالباً ما يتم الجمع بين System و Embedded WebView حيث يتولى System WebView تسجيل الدخول (مع المشاركة التلقائية لبيانات الاعتماد)، ثم يعرض Embedded WebView إدارة مفاتيح المرور في الإعدادات.
عوامل القرار الرئيسية:
توفر منصات الأجهزة المحمولة الحديثة ثلاثة أساليب متميزة لدمج مفاتيح المرور في تطبيقك الأصلي، ولكل منها مقايضات مختلفة لتجربة المستخدم والتعقيد الفني وتوافق OAuth:
التنفيذ الأصلي (Native Implementation): قم ببناء تدفقات مفتاح المرور مباشرة في تطبيقك باستخدام واجهات برمجة تطبيقات النظام الأساسي (iOS AuthenticationServices، Android Credential Manager). يوفر أفضل تجربة مستخدم مع مصادقة بيومترية سلسة، ولكنه يتطلب جهداً تقنياً متوسطاً إلى عالياً للتنفيذ.
System WebView: استخدم مكون متصفح المنصة (iOS ASWebAuthenticationSession / SFSafariViewController، Android Chrome Custom Tabs) للتعامل مع المصادقة. ممتاز لتدفقات تسجيل الدخول المستندة إلى OAuth ويشارك بيانات الاعتماد مع متصفح النظام.
Embedded WebView: قم بتضمين طريقة عرض ويب قابلة للتخصيص (iOS WKWebView، Android WebView) داخل تطبيقك لإعادة استخدام مصادقة الويب مع هيكل تطبيق أصلي. يوفر مظهراً يشبه الأصلي بدون أشرطة عناوين URL وتحكماً كاملاً في واجهة مستخدم عرض الويب. يتطلب إعداداً إضافياً بما في ذلك الأذونات والاستحقاقات (iOS)، وتكوين WebView مع AndroidX WebKit 1.12.1+ (Android) لتمكين وظيفة مفتاح المرور.
يعتمد الاختيار الصحيح على بنية المصادقة الخاصة بتطبيقك، وما إذا كنت تستخدم موفري OAuth، ومقدار التحكم الذي تحتاجه في واجهة المستخدم وما إذا كنت تبني تطبيقاً أصلياً بالكامل أو تعيد استخدام مكونات الويب.
أحدث المقالات
♟️
لماذا تحتاج إلى قابلية الملاحظة للمصادقة في إدارة هويات وصول العملاء (CIAM)
🔑
شرح Device Bound Session Credentials (DBSC)
📖
Relying Party ID (rpID) لتقنية WebAuthn ومفاتيح المرور: النطاقات والتطبيقات الأصلية
♟️
استراتيجية مفاتيح المرور: لماذا سيفشل تطبيق مفتاح المرور الخاص بك
🔑
ما الذي يجعل التعامل الآمن مع المستندات أمراً ضرورياً للمؤسسات الحديثة؟
يوفر تنفيذ مفتاح المرور الأصلي تجربة المستخدم المثلى، مع تدفقات المصادقة المضمنة مباشرة في واجهة مستخدم تطبيقك باستخدام واجهات برمجة التطبيقات الخاصة بالنظام الأساسي. يستفيد المستخدمون من مربعات حوار المنصة الأصلية، والتحقق البيومتري السلس وأسرع أوقات تسجيل الدخول الممكنة.
متى تختار التنفيذ الأصلي:
preferImmediatelyAvailableCredentials لـ
عرض تراكب مفتاح المرور تلقائياً
عند توفر مفاتيح المرور، مما يوفر أسرع تجربة تسجيل دخول دون الحاجة إلى إدخال معرفالميزة الرئيسية: preferImmediatelyAvailableCredentials()
يمكن لتطبيقات التنفيذ الأصلي الاستفادة من preferImmediatelyAvailableCredentials() لإنشاء
تراكب مفتاح مرور تلقائي
يظهر فور بدء تشغيل التطبيق عندما تتوفر مفاتيح المرور. يوفر هذا التدفق الخالي من اسم
المستخدم أسرع تجربة تسجيل دخول ممكنة - يرى المستخدمون مفاتيح المرور الخاصة بهم على الفور
دون إدخال معرف أولاً. هذه الإمكانية حصرية للتطبيقات الأصلية وغير متوفرة في متغيرات
WebView.
يوضح المخطط أدناه كيف توفر المصادقة الأصلية رحلة مستخدم أسرع مقارنة بنهج Conditional UI في WebView:
يوفر التراكب التلقائي للتنفيذ الأصلي تجربة مستخدم فائقة مع معدلات استخدام أعلى لمفاتيح المرور نظراً لأن المصادقة تبدأ فور تشغيل التطبيق، بينما تتطلب تطبيقات WebView من المستخدمين التفاعل مع حقول الإدخال أولاً.
نظرة عامة على المتطلبات الفنية:
يتطلب تكامل مفتاح المرور الأصلي ثقة التشفير بين تطبيقك ومجال الويب الخاص بك. بدونها، سيرفض نظام التشغيل جميع عمليات WebAuthn. المتطلبات الرئيسية:
/.well-known/الفائدة الكبرى: تعمل مفاتيح المرور التي تم إنشاؤها على موقع الويب الخاص بك بسلاسة في تطبيقك والعكس صحيح.
يتضمن تنفيذ مفاتيح المرور محلياً على iOS إطار عمل AuthenticationServices من Apple، والذي يوفر واجهة برمجة تطبيقات لعمليات WebAuthn:
المكونات الرئيسية:
ASAuthorizationController: يدير تدفق المصادقةASAuthorizationPlatformPublicKeyCredentialProvider: ينشئ طلبات مفتاح المرورنصائح التطوير
?mode=developer بعنوان URL الخاص بـ AASA لفرض جلب جديديستخدم التنفيذ الأصلي لمفتاح المرور في Android واجهة برمجة تطبيقات Credential Manager (أو واجهة برمجة تطبيقات FIDO2 الأقدم للتوافق مع الإصدارات السابقة):
المكونات الرئيسية:
CredentialManager: واجهة برمجة التطبيقات المركزية لجميع عمليات بيانات الاعتمادCreatePublicKeyCredentialRequest: لتسجيل مفتاح المرورGetCredentialRequest: لمصادقة مفتاح المرورملاحظة: يفتقر Android حالياً إلى اقتراحات لوحة المفاتيح Conditional UI الخاصة بـ iOS في التطبيقات الأصلية (على الرغم من أن Conditional UI يعمل في تطبيقات الويب)
يواجه تنفيذ مفاتيح المرور أصلياً تحديات ودروساً مستفادة مهمة: يمكن أن يؤدي التكامل على مستوى نظام التشغيل إلى ظهور مشكلات عبر أجهزة وإصدارات مختلفة من نظام التشغيل.
في حين أنه يمكنك تنفيذ مفاتيح المرور باستخدام واجهات برمجة التطبيقات الخام الخاصة بالمنصة، فإن حزم SDK المصممة خصيصاً تعمل على تسريع عملية التطوير بشكل كبير من خلال التعامل مع تعقيدات WebAuthn، والحالات الطرفية وتوفير القياس عن بعد المدمج. تقدم حزم SDK أيضاً واجهات قابلة للمحاكاة لاختبار الوحدة (أمر بالغ الأهمية نظراً لأنه لا يمكنك اختبار المقاييس الحيوية في المحاكيات).
التوصية: بالنسبة للتطبيقات الأصلية، نوصي باستخدام حزم SDK الخاصة بـ Corbado (iOS Swift Passkey SDK، Android Kotlin Passkey SDK) والتي تتعامل مع العديد من الحالات الطرفية المكتشفة من خلال عمليات النشر الإنتاجية، وتوفر قياساً عن بعد إضافياً واختباراً.
Igor Gjorgjioski
Head of Digital Channels & Platform Enablement, VicRoads
We hit 80% mobile passkey activation across 5M+ users without replacing our IDP.
See how VicRoads scaled passkeys to 5M+ users — alongside their existing IDP.
Read the case studyتستخدم System WebViews مكون المتصفح الأصلي للمنصة للتعامل مع المصادقة داخل تطبيقك. على عكس التطبيقات الأصلية بالكامل، تعرض System WebViews محتوى الويب باستخدام متصفح النظام الفعلي (Safari على iOS، Chrome على Android)، مع الحفاظ على ملفات تعريف الارتباط المشتركة وبيانات الاعتماد المحفوظة ومؤشرات أمان المتصفح المألوفة.
متى تختار System WebView:
المزايا الرئيسية:
مكونات المنصة:
ASWebAuthenticationSession (موصى به لتدفقات المصادقة) أو
SFSafariViewController (للتصفح العام)تبنت شركات كبرى مثل Google و GitHub هذا النهج لإضافة تسجيل الدخول بمفتاح المرور إلى تطبيقات الأجهزة المحمولة الخاصة بها عبر تراكبات WebView على صفحات مصادقة الويب الحالية. يعمل هذا بشكل جيد عندما لا تكون إعادة بناء المصادقة الأصلية بالكامل ممكنة على الفور.
يوفر iOS مكونين رئيسيين لـ System WebView للمصادقة:
ASWebAuthenticationSession (موصى به للمصادقة):
SFSafariViewController (للتصفح العام):
| الميزة | ASWebAuthenticationSession | SFSafariViewController |
|---|---|---|
| حالة الاستخدام الأساسية | تدفقات المصادقة | تصفح الويب العام |
| OAuth/OIDC | ممتاز | جيد |
| دعم مفتاح المرور | نعم | نعم |
| التخصيص | محدود | الحد الأدنى |
إذا كان تطبيقك يستخدم تسجيل الدخول المستند إلى OAuth، فإن ASWebAuthenticationSession
هو الخيار الموصى به لأنه مصمم خصيصاً لسيناريوهات المصادقة ويوفر أفضل توازن بين الأمان
وتجربة المستخدم.
توفر Chrome Custom Tabs (CCT) تجربة مصادقة مدعومة من Chrome داخل تطبيقك:
الميزات الرئيسية:
تكامل OAuth: تعد Chrome Custom Tabs بمثابة مكافئ Android لـ ASWebAuthenticationSession في iOS، مما يوفر دعماً ممتازاً لـ OAuth مع الحفاظ على الوصول إلى مفاتيح المرور المخزنة.
جرّب passkeys في عرض مباشر.
توفر Embedded WebViews تحكماً كاملاً في عرض محتوى الويب داخل تطبيقك، مما يسمح بالمعالجة المباشرة لملفات تعريف الارتباط والجلسات والتنقل بدون شريط URL. ومع ذلك، يأتي هذا التحكم مع متطلبات فنية إضافية لتمكين وظيفة مفتاح المرور.
متى تختار Embedded WebView:
سياق مهم:
تستخدم العديد من التطبيقات نهجاً هجيناً: يتعامل System WebView مع مصادقة OAuth الأولية (حيث تعمل مفاتيح المرور بسلاسة)، ثم ينتقل إلى Embedded WebView لما بعد المصادقة لإدارة مفاتيح المرور في الإعدادات. تنشأ التحديات عند محاولة استخدام مفاتيح المرور مباشرة داخل Embedded WebViews.
المتطلبات الفنية:
تتطلب Embedded WebViews إعداداً إضافياً مقارنة بـ System WebViews:
مكونات المنصة:
WKWebViewandroid.webkit.WebViewالمقايضات:
عند تنفيذ مفاتيح المرور عبر WebViews، فإن فهم التمييز بين System WebViews و Embedded WebViews أمر بالغ الأهمية. الأساليب الثلاثة الموضحة أعلاه (التنفيذ الأصلي، System WebView، و Embedded WebView) تخدم كل منها حالات استخدام مختلفة.
على iOS، لديك خيارات متعددة لعرض محتوى الويب داخل التطبيق:
على Android، الخيارات الرئيسية هي:
android.webkit.WebView)، وهي في الأساس
متصفح صغير يمكن تضمينه في أنشطتك. إنها قابلة للتخصيص للغاية ولكنها تعمل في عملية تطبيقك.في الأقسام التالية، سنتعمق قليلاً في أنواع WebView هذه لنظامي iOS و Android، ونناقش أيها قد يكون الأنسب لتدفقات مصادقة مفتاح المرور.
اشترك في Passkeys Substack للحصول على آخر الأخبار.
توفر منصة Apple خيارات WebView الثلاثة المذكورة أعلاه. سيؤثر اختيارك على مدى سلاسة استخدام مفاتيح المرور داخل التطبيق:
لاختبار سلوك WebView المختلف في iOS، نوصي بالتطبيق WebView - WKWebView and UIWebView rendering.
WKWebView هو مكون WebView متعدد الاستخدامات لنظام iOS. يمكن للمطورين تضمين WKWebView لتقديم محتوى ويب بدرجة عالية من التحكم في واجهة المستخدم والسلوك. يستخدم WKWebView نفس محرك العرض مثل Safari، لذلك فهو عالي الأداء ويدعم ميزات الويب الحديثة. من الناحية النظرية، يمكن لـ WKWebView التعامل مع WebAuthn (وبالتالي مفاتيح المرور) إذا تم تكوينه بشكل صحيح، ولكن لاحظ أن بعض ميزات المتصفح المتقدمة قد تكون مقيدة لأسباب أمنية. أحد الأشياء التي يجب الانتباه إليها هو أن WKWebView افتراضياً لا يشارك ملفات تعريف الارتباط أو بيانات سلسلة المفاتيح مع Mobile Safari. قد يضطر المستخدمون إلى تسجيل الدخول من جديد لأن جلسة WebView الخاصة بهم معزولة عن جلسة Safari. أيضاً، نظراً لأن محتوى WKWebView يمكن تخصيصه بالكامل بواسطة التطبيق، لا يرى المستخدم شريط عنوان أو واجهة مستخدم Safari - وهو أمر رائع للعلامة التجارية، ولكنه يعني أن لدى المستخدم إشارات أقل للتحقق من شرعية الصفحة (مخاوف تتعلق بمكافحة التصيد الاحتيالي). أساءت بعض التطبيقات استخدام WKWebView لإدخال نصوص برمجية أو تغيير المحتوى (على سبيل المثال، لوحظ أن TikTok يقوم بإدخال JS تتبع عبر المتصفح داخل التطبيق)، لذلك يجب على المرء أن يكون حذراً لاستخدام WKWebView بطريقة آمنة وجديرة بثقة المستخدم.
يوفر SFSafariViewController تجربة Safari داخل التطبيق. عندما تفتح عنوان URL باستخدام SFSafariViewController، يكون الأمر أشبه بفتحه في متصفح Safari الحقيقي، باستثناء أن المستخدم يظل داخل واجهة مستخدم تطبيقك. الميزة بالنسبة لمفاتيح المرور كبيرة: نظراً لأنه Safari بشكل أساسي، يمكن الوصول إلى iCloud Keychain الخاص بالمستخدم ومفاتيح المرور المحفوظة. لاحظ أن ملفات تعريف الارتباط لا تتم مشاركتها على iOS 11+. وهذا يعني أنه إذا كان لدى المستخدم بالفعل مفتاح مرور لموقعك، فيمكن لـ Safari العثور عليه وحتى عرض الإكمال التلقائي لـ Conditional UI لتسجيل الدخول السهل. SFSafariViewController أقل قابلية للتخصيص (لا يمكنك تغيير شريط الأدوات الخاص به كثيراً)، ولكنه يتعامل تلقائياً مع الكثير من ميزات الأمان والخصوصية. يتم عرض شريط URL، مكتملاً برمز القفل لـ HTTPS، مما يمنح المستخدمين الثقة بأنهم على النطاق الصحيح. بشكل عام، يعتبر SFSafariViewController أكثر أماناً من WKWebView الخام وهو أسهل في التنفيذ (توفره Apple كمكون جاهز). المقايضة الرئيسية هي التضحية ببعض التحكم في الشكل والمظهر. بالنسبة لتدفق المصادقة، عادةً ما يكون هذا مقبولاً. الأولوية هنا هي الأمان وسهولة تسجيل الدخول، والتي يتفوق فيها SFSafariViewController باستخدام سياق Safari.
| WKWebView | SFSafariViewController | |
|---|---|---|
| تجربة المستخدم | - شعور أصلي: قد يشعر المستخدمون أن محتوى الويب هو جزء أصلي من التطبيق لأن المطورين يمكنهم تخصيص الشكل والمظهر لمطابقة تصميم التطبيق. - الملء التلقائي: الملء التلقائي بالبيانات من Safari ممكن | - سلسة: تجربة مستخدم سلسة باستخدام إعدادات Safari للمستخدم مما يضمن تصفح ويب ثابت بين التطبيق الأصلي والمتصفح. |
| تجربة المطور | - قابلة للتخصيص للغاية: يتوفر تخصيص وتكوين واسع النطاق - مرن: العديد من واجهات برمجة التطبيقات للتفاعل مع محتوى الويب | - قابلة للتخصيص بشكل متوسط: خيارات تخصيص محدودة، خاصة بالمقارنة مع WKWebView، - بسيط: أبسط في التنفيذ مقارنة بـ WKWebView |
| الأداء | - بطيء إلى حد ما: اعتماداً على التنفيذ ومحتوى الويب، يمكن تحسين سرعات التحميل، ولكن قد تظل أبطأ مقارنة بـ SFSafariViewController بسبب المعالجة الإضافية للميزات والتفاعلات المخصصة. | - سريع إلى حد ما: يقدم عادةً أداءً أفضل حيث يستفيد من محرك Safari، المحسن للسرعة والكفاءة، مما يوفر أوقات تحميل سريعة لصفحات الويب. |
| الثقة والاعتراف | - عرض URL غير مطلوب: لا يعرض WKWebView غالباً عنوان URL، مما يجعل من الصعب على المستخدمين التحقق من صفحة الويب. إمكانية قيام التطبيقات الضارة بتقليد هذا السلوك والتصيد لبيانات الاعتماد. | - تجربة تشبه المتصفح: يعرض صفحات الويب باستخدام Safari، مما يوفر تجربة "تشبه المتصفح". يمكن للمستخدمين رؤية عنوان URL والوصول إلى ميزات الملء التلقائي في Safari، مما قد يغرس مزيداً من الثقة بسبب الواجهة المألوفة. |
| العزل | - منفصل: يتم فصل ملفات تعريف الارتباط والجلسات عن Safari؛ لن يتم تسجيل دخول المستخدمين تلقائياً إلى WKWebView. | - منفصل: يتم فصل ملفات تعريف الارتباط والجلسات عن Safari؛ لن يتم تسجيل دخول المستخدمين تلقائياً إلى SFSafariViewController أيضاً. |
| نقاط الضعف | - آمن: آمن بطبيعته بسبب وضع الحماية الخاص بتطبيقات Apple، ولكن السلوك والأمان يعتمدان على تنفيذ التطبيق. نقاط ضعف محتملة إذا لم يتم التنفيذ بشكل صحيح. | - أكثر أماناً: يستفيد من ميزات الأمان المدمجة في Safari، بما في ذلك مكافحة التصيد الاحتيالي والتحذيرات من مواقع الويب الضارة. يُعتبر عموماً أكثر أماناً لعرض محتوى الويب من WKWebView بسبب هذه الميزات وإلمام المستخدم بـ Safari. |
| أخرى | - ميزات غير متوفرة: قد لا يمكن الوصول إلى بعض ميزات المتصفح (مثل WebAuthn) بالكامل بسبب مخاوف أمنية وتشغيل WKWebView في سياق التطبيق. - حقن JavaScript: تقوم بعض التطبيقات، مثل TikTok بإدخال JavaScript للتتبع في WKWebView داخل التطبيق، أو تقييد تحكم المستخدم (مثل Facebook) - مشكلات الخصوصية: المزيد من تعليقات المجتمع بخصوص الخصوصية | - لا يوجد حقن JavaScript: لا يسمح بتنفيذ JavaScript من التطبيق، مما يعزز الأمان والخصوصية. كما أنه لا يدعم تنبيهات أو تأكيدات JavaScript، مما قد يؤثر على تجربة المستخدم على صفحات ويب معينة. - وضع القارئ: يوفر وضع القارئ للحصول على نسخة نظيفة وسهلة القراءة من المقالات. |
SFAuthenticationSession / ASWebAuthenticationSession – تم بناء هذه الفئات (والأخيرة هي الاسم الأحدث المتوافق مع Swift) خصيصاً لتدفقات تسجيل الدخول مثل OAuth أو OpenID Connect. عندما تحتاج إلى مصادقة مستخدم عبر صفحة ويب (ربما لمزود هوية IdP خارجي)، فإن هذه الجلسات هي الخيار الموصى به على iOS. إنها تشبه إلى حد كبير SFSafariViewController في أنها تستخدم متصفح Safari خلف الكواليس وتشارك ملفات تعريف الارتباط/التخزين مع Safari. يكمن الاختلاف الرئيسي في أن SFAuthenticationSession سيطالب المستخدم دائماً بأن التطبيق يريد المصادقة باستخدام صفحة ويب (لوعي المستخدم) وسيستخدم تلقائياً جلسة Safari الحالية للمستخدم إذا كانت متوفرة.
الفائدة هي تجربة SSO سلسة - إذا كان المستخدم مسجلاً الدخول بالفعل إلى المزود في Safari، يمكن لهذه الجلسة استخدام ملف تعريف الارتباط هذا لتجنب تسجيل دخول آخر. بالنسبة لمفاتيح المرور، يعد هذا مهماً لأنه يعني أنه يمكن استخدام أي بيانات اعتماد مفتاح مرور مخزنة في Safari/iCloud Keychain هنا أيضاً. إرشادات Apple الرسمية هي استخدام ASWebAuthenticationSession لأي شيء يشبه تدفق تسجيل الدخول. الايجابيات هي الخصوصية المعززة (لا يرى تطبيقك أبداً بيانات الاعتماد أو ملفات تعريف الارتباط، بل يتعامل Safari معها) ودعم SSO المدمج. السلبية هي أنها تقتصر على تدفقات المصادقة (لن تستخدمها فقط لتقديم محتوى ويب عشوائي في تطبيقك). باختصار، إذا اخترت نهج WebView على iOS، فإن ASWebAuthenticationSession هو الخيار الأفضل عادةً لتنفيذ مفاتيح المرور لأنه آمن ويشارك الحالة مع Safari ومصمم خصيصاً للمصادقة.
اطلع على عدد الأشخاص الذين يستخدمون passkeys فعلياً.
على Android، يكون قرار WebView بين WebView الكلاسيكي و Chrome Custom Tabs:
لاختبار سلوك WebView المختلف في Android، نوصي بالتطبيق WebView vs Chrome Custom Tabs.
Android WebView (android.webkit.WebView) هو مكون يتيح لك تضمين صفحات الويب في تخطيط نشاطك. إنه مشابه لـ WKWebView في أنه يمنحك التحكم الكامل: يمكنك اعتراض التنقل وإدخال JavaScript وتخصيص واجهة المستخدم وما إلى ذلك. يعمل أيضاً ضمن عملية تطبيقك. استخدام WebView لمفاتيح المرور يعني أن تطبيقك يُحمل صفحة تسجيل الدخول إلى الويب الخاصة بك، ويمكن أن تبدأ تلك الصفحة مراسم مفتاح مرور WebAuthn. يدعم Android WebView الحديث WebAuthn (شريطة أن يكون تنفيذ WebView للجهاز محدثاً عبر Android System WebView أو مكون Chrome). أحد الاعتبارات الرئيسية: افتراضياً، لا يشارك Android WebView ملفات تعريف الارتباط أو بيانات الاعتماد المخزنة مع متصفح Chrome الخاص بالمستخدم. لذا فإن أي مفتاح مرور يتم إنشاؤه أو استخدامه في WebView قد لا يكون معروفاً لمتصفح Chrome، والعكس صحيح. يمكن أن يكون هذا العزل مفيداً للأمان (لا يمكن لتطبيقك قراءة ملفات تعريف ارتباط المتصفح)، ولكنه قد يجبر المستخدمين على تسجيل الدخول مرة أخرى إذا تمت مصادقتهم بالفعل في Chrome. المشكلة الأخرى هي الثقة. لا يُظهر WebView العادي عنوان URL أو رمز قفل SSL، لذلك يجب على المستخدمين الوثوق بتطبيقك تماماً لعدم استهدافهم بالتصيد الاحتيالي. حظرت Google حتى استخدام WebView لتسجيل الدخول إلى Google OAuth بسبب مخاطر التصيد المحتملة. من ناحية الأداء، تعمل WebViews بشكل جيد، لكنها قد تكون أبطأ أو تستهلك ذاكرة أكثر من استخدام المتصفح الافتراضي للمستخدم، خاصة إذا كانت تحميل صفحات ثقيلة.
Chrome Custom Tabs (CCT) هي نهج هجين. إنها تسمح لتطبيقك بفتح صفحة معروضة بواسطة Chrome تبدو وكأنها جزء من تطبيقك. يمكنك تخصيص لون شريط الأدوات وإضافة شعار التطبيق وما إلى ذلك، ولكن يتم عرض المحتوى بواسطة Chrome في عملية منفصلة. بالنسبة لمفاتيح المرور، تمتلك CCTs العديد من الفوائد: فهي تشارك ملفات تعريف الارتباط وبيانات الاعتماد الخاصة بالمستخدم مع Chrome، مما يعني أنه إذا قام المستخدم بحفظ مفتاح مرور عبر Chrome (Google Password Manager)، فيمكن لعلامة التبويب المخصصة الوصول إليه. سيرى المستخدم أيضاً عنوان URL الفعلي ومؤشرات الأمان، مما يبني الثقة. غالباً ما يكون الأداء أفضل - يمكن "تحمية" Chrome في الخلفية للتحميل السريع. والأهم من ذلك، الأمان قوي: نظراً لأنه تطبيق Chrome بشكل أساسي، فإن أشياء مثل التصفح الآمن من Google تحمي الجلسة، ولا يمكن لتطبيقك إدخال نصوص برمجية عشوائية في الصفحة (مما يمنع هجمات معينة).
الجانب السلبي هو أنه يتطلب من المستخدم أن يكون لديه Chrome (أو متصفح مدعوم) مثبتاً ومحدثاً. يمتلكه معظم مستخدمي Android، ولكن في بعض الأجهزة في مناطق معينة، قد يكون هذا مشكلة. بشكل عام، إذا كنت تستخدم نهج ويب مضمن على Android، يوصى باستخدام Chrome Custom Tabs لتدفقات مفتاح المرور، لأنها توفر توازناً جيداً بين التكامل والأمان. في الواقع، إنها مماثلة لـ SFSafariViewController/ASWebAuthSession في iOS من نواح كثيرة - الاستفادة من المتصفح الافتراضي للمصادقة.
(ملاحظة جانبية: WKWebView مقابل SFSafariViewController الخاص بـ Apple و WebView مقابل CCT الخاص بـ Android لديهما العديد من أوجه التشابه. تشترك كل من Safari VC و Chrome Tabs في حالة المتصفح وتوفر أماناً أفضل، في حين تمنحك WKWebView/Android WebView تحكماً أكبر لكنها تعزل محتوى الويب. بالنسبة لمفاتيح المرور، عادة ما يكون من المستحسن مشاركة الحالة (ملفات تعريف الارتباط، مخازن بيانات الاعتماد) حتى يمكن الوصول إلى مفتاح المرور وإنشائه بسلاسة.)
| الميزة | WebView | Chrome Custom Tab |
|---|---|---|
| تجربة المستخدم | - المرونة: يوفر مجموعة غنية من واجهات برمجة التطبيقات للتفاعل مع محتوى الويب وإدارة تفاعلات المستخدم، بما في ذلك التعامل مع مربعات حوار JavaScript وطلبات الإذن. - الاتساق: قد يكون من الصعب إدارة تجربة مستخدم متسقة، خاصة مع محتوى الويب المتنوع. | - ميزات المتصفح: يشارك ميزات مثل Data Saver والإكمال التلقائي المتزامن عبر الأجهزة. - زر الرجوع: يتيح للمستخدمين العودة بسهولة إلى التطبيق باستخدام زر رجوع مدمج. - التبعية: يعتمد على تطبيق Chrome، والذي قد لا يكون متاحاً أو محدثاً على جميع أجهزة المستخدمين - إعادة التوجيه إلى المتصفح: قد تعيد بعض الوظائف توجيه المستخدمين إلى تطبيق Chrome، مما قد يعطل تجربة المستخدم. - علامات التبويب المخصصة الجزئية: يمكن استخدام جزء فقط من الشاشة لعلامة التبويب المخصصة لـ Chrome بينما يعرض الباقي التطبيق الأصلي - الورقة الجانبية: في الوضع الأفقي وعلى الأجهزة ذات الشاشات الكبيرة، يتم عرض علامة تبويب Chrome المخصصة على جانب واحد فقط من الشاشة، بينما يعرض باقي الشاشة التطبيق الأصلي |
| تجربة المطور | - قابلة للتخصيص للغاية: توفر خيارات/احتياجات تخصيص واسعة النطاق. - التفاعلية: توفر العديد من واجهات برمجة التطبيقات للتفاعل مع محتوى الويب وإدارة تفاعلات المستخدم. | - قابلة للتخصيص: يسمح بتخصيص لون شريط الأدوات، وزر الإجراء، وشريط الأدوات السفلي، وعناصر القائمة المخصصة، وحركات الدخول/الخروج. - رد الاتصال: يسلم رد اتصال للتطبيق عند التنقل الخارجي. - ميزات الأمان: يوفر ميزات جاهزة للاستخدام، مما يلغي الحاجة إلى إدارة الطلبات أو منح الأذونات أو مخازن ملفات تعريف الارتباط. |
| الأداء | - أداء متوسط: قد لا يوفر نفس مستوى أداء Chrome Custom Tabs (CCT) | - التحمية المسبقة: تتضمن تحمية مسبقة للمتصفح في الخلفية وتحميل تكهني لعناوين URL لتحسين وقت تحميل الصفحة. - الأولوية: يمنع طرد التطبيقات التي تشغل Custom Tab أثناء استخدامها من خلال رفع أهميتها إلى مستوى "المقدمة". |
| الثقة والاعتراف | - عنوان URL و SSL غير مرئيين: عنوان URL ومعلومات SSL غير مرئية بطبيعتها في WebView. ما لم يقم مطور التطبيق بتنفيذ هذه الميزات، لن يعرف المستخدمون ما إذا كانوا على موقع الويب الصحيح أم أنه موقع تصيد. | - عنوان URL و SSL مرئيان: يستخدم متصفح Chrome الفعلي لعرض الصفحات. يمكن للمستخدمين رؤية عنوان URL وشهادة SSL (مما يشير إلى ما إذا كان الاتصال آمناً). هذا يمكن أن يمنح المستخدمين الثقة بأنهم ليسوا على موقع تصيد. |
| العزل | - يعمل ضمن عملية التطبيق: إذا كان التطبيق يحتوي على ثغرة أمنية تسمح بتنفيذ تعليمات برمجية ضارة، فهناك خطر من احتمال اختراق WebView. ومع ذلك، يتلقى WebView أيضاً تحديثات، ولكن يمكن أن يعتمد سلوكه وأمانه بشكل أكبر على التطبيق الذي يستخدمه. - لا توجد مشاركة لملفات تعريف الارتباط / الجلسات: لا يشارك ملفات تعريف الارتباط أو الجلسات مع المتصفح الرئيسي للجهاز، مما يوفر عزلاً ولكن ربما يتطلب من المستخدمين تسجيل الدخول مرة أخرى. | - يعمل ضمن عملية Chrome: نظراً لكونه جزءاً من Chrome، تعمل Custom Tabs في نفس العملية ولديها نفس تحديثات وميزات أمان Chrome. - جرة ملفات تعريف ارتباط مشتركة ونموذج أذونات: يضمن عدم اضطرار المستخدمين إلى إعادة تسجيل الدخول إلى المواقع أو إعادة منح الأذونات. - إعدادات وتفضيلات Chrome: يستخدم إعدادات وتفضيلات Chrome. |
| نقاط الضعف | - ردود الاتصال لسرقة بيانات الاعتماد: تشمل نقاط الضعف المحتملة أن JavaScript مطلوب أحياناً مما يفتح الباب لتطبيقات أخرى لتشغيل تعليمات برمجية ضارة، مثل تسجيل ردود الاتصال التي تحاول اعتراض أسماء المستخدمين وكلمات المرور. - التصيد الاحتيالي: بالإضافة إلى ذلك، يمكن لتطبيق ضار فتح صفحة ويب أخرى تحاكي تدفق الارتباط في محاولة تصيد احتيالي. | - التصفح الآمن من Google: يستخدم ميزة التصفح الآمن من Google لحماية كل من المستخدم والجهاز من المواقع الخطرة. - زخرفة متصفح آمنة: يضمن أن المستخدم يرى دائماً عنوان URL الدقيق الذي يتفاعل معه ويمكنه عرض معلومات شهادة موقع الويب، مما يقلل من مخاطر التصيد الاحتيالي. علاوة على ذلك، لا تسمح علامات التبويب المخصصة بحقن JavaScript. |
| أخرى | - حظرت Google تطبيقات WebViews لتسجيل دخول المستخدمين إلى حسابات Google |
بغض النظر عن نهج التنفيذ الذي تختاره، يجب استيفاء متطلبات فنية معينة لتمكين وظيفة مفتاح المرور. يوفر هذا القسم إرشادات شاملة حول تكوين ملفات الارتباط المعروفة، واستحقاقات iOS، وتكوين Android WebView.
ملاحظة حول الأجهزة المُدارة: يتغير سلوك مفتاح المرور بشكل كبير على الأجهزة المُدارة حيث تتحكم سياسات إدارة الأجهزة المحمولة (MDM) في تخزين بيانات الاعتماد. لاختبار مفاتيح المرور على الأجهزة المُدارة، راجع مفاتيح المرور على أجهزة iOS و Android المُدارة.
تتطلب تدفقات التنفيذ الأصلي و Embedded WebView ملفات ارتباط لإنشاء ثقة تشفير بين تطبيقك ومجال الويب الخاص بك. لا يتطلب System WebView (ASWebAuthenticationSession) و Chrome Custom Tabs ربط التطبيق بالموقع.
ينشئ ملف AASA الاتصال بين تطبيق iOS الخاص بك ومجال الويب الخاص بك، مما يتيح لمفاتيح المرور العمل عبر كلتا المنصتين.
موقع الملف: https://yourdomain.com/.well-known/apple-app-site-association
متطلبات التكوين:
/.well-known/apple-app-site-association على نطاقكapplication/json.well-knownمثال لملف AASA:
{ "webcredentials": { "apps": ["TEAMID123.com.example.app"] } }
التخزين المؤقت لـ AASA واختباره:
تقوم Apple بتخزين ملفات AASA مؤقتاً بقوة (من 24 إلى 48 ساعة) باستخدام CDN، مما قد يحبط عملية التطوير والاختبار. لتجاوز التخزين المؤقت أثناء التطوير:
?mode=developer إلى النطاق المرتبط في Xcode⚠️ هام: لا تستخدم ?mode=developer في إصدارات الإنتاج. هذه المعلمة مخصصة للتطوير
فقط - استخدامها في الإنتاج سيمنع iOS من اكتشاف ملف AASA الخاص بك بشكل صحيح، مما يؤدي إلى
كسر وظيفة مفتاح المرور.
التحقق من الصحة: استخدم أداة التحقق من AASA الخاصة بـ Apple للتحقق من تكوينك.
يستخدم Android روابط الأصول الرقمية (Digital Asset Links) للتحقق من العلاقة بين تطبيقك وموقع الويب الخاص بك.
موقع الملف: https://yourdomain.com/.well-known/assetlinks.json
متطلبات التكوين:
/.well-known/assetlinks.json على نطاقكapplication/jsonمثال لملف assetlinks.json:
[ { "relation": [ "delegate_permission/common.handle_all_urls", "delegate_permission/common.get_login_creds" ], "target": { "namespace": "android_app", "package_name": "com.example.app", "sha256_cert_fingerprints": [ "AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99" ] } } ]
التحقق من الصحة: استخدم مولد روابط الأصول الرقمية من Google لإنشاء التكوين الخاص بك والتحقق منه.
تتطلب تطبيقات iOS استحقاقات (Entitlements) مناسبة للوصول إلى وظيفة مفتاح المرور. تختلف المتطلبات قليلاً بناءً على نهج التنفيذ الخاص بك.
يحدد ملف الاستحقاقات (غالباً ما يسمى Runner.entitlements في تطبيقات
Flutter أو YourApp.entitlements في مشاريع iOS الأصلية)
أذونات وقدرات خاصة يمنحها نظام Apple. بالنسبة لمفاتيح المرور، يقوم هذا الملف بتكوين
النطاقات المرتبطة (Associated Domains).
موقع الملف: عادةً في مشروع Xcode الخاص بك في ios/Runner/Runner.entitlements
يتطلب التنفيذ الأصلي و Embedded WebView قدرة Associated Domains لربط تطبيقك بمجال الويب الخاص بك. لا يتطلب System WebView (ASWebAuthenticationSession) ذلك لأنه يعمل في سياق Safari.
الإعداد في Xcode:
webcredentials:مثال على التكوين:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.developer.associated-domains</key> <array> <string>webcredentials:yourdomain.com</string> <string>webcredentials:subdomain.yourdomain.com</string> </array> </dict> </plist>
| النهج | هل يتطلب Associated Domains | تكوين إضافي |
|---|---|---|
| التنفيذ الأصلي | نعم | تنفيذ مخصص |
| System WebView | غير مطلوب | يعمل إعداد الويب الافتراضي |
| Embedded WebView | نعم | يتطلب تكوين AndroidX WebKit 1.12.1+ |
نطاقات متعددة: إذا كان تطبيقك يحتاج إلى العمل مع نطاقات متعددة، فقد تحتاج إلى طلبات الأصل ذات الصلة (ROR).
تدعم Android Embedded WebViews مفاتيح المرور من خلال نهجين متميزين: النهج الأحدث المستند إلى WebKit (القسم 5.3.1) ونهج جسر JavaScript الأقدم (القسم 5.3.2). لا يتطلب System WebView (Chrome Custom Tabs) أي تكوين - تعمل بيانات الاعتماد تلقائياً.
يوفر Android عينات WebView رسمية لمفاتيح المرور توضح كلا نهجي التنفيذ.
تكامل WebKit الحديث مع التعامل الأصلي مع مفتاح المرور. يوفر هذا النهج دعماً أصلياً لـ WebAuthn دون الحاجة إلى رمز جسر مخصص.
عينة رسمية: Webkit WebView MainActivity
المتطلبات:
التنفيذ:
import androidx.webkit.WebSettingsCompat import androidx.webkit.WebViewFeature // تحقق مما إذا كانت مصادقة الويب مدعومة if (WebViewFeature.isFeatureSupported(WebViewFeature.WEB_AUTHENTICATION)) { // تمكين مصادقة الويب WebSettingsCompat.setWebAuthenticationSupport( webView.settings, WebSettingsCompat.WEB_AUTHENTICATION_SUPPORT_FOR_APP ) // تمكين JavaScript webView.settings.javaScriptEnabled = true }
النقاط الرئيسية:
WebViewFeature.WEB_AUTHENTICATION في وقت
التشغيلmediation:"conditional" (الملء التلقائي لمفتاح
المرور في حقول الإدخال) في Embedded WebViewملاحظات الإصدار:
قبل AndroidX WebKit 1.12.0، لم يكن دعم WebAuthn الأصلي موجوداً في Embedded WebView. يستخدم هذا النهج الأقدم جسراً بين الويب والنظام الأصلي للتعامل مع مفاتيح المرور للأجهزة التي لا تدعم Native WebView WebAuthn.
عينات رسمية:
متى يتم استخدامه: دعم إصدارات Android الأقدم أو الأجهزة التي تحتوي على تطبيقات WebView القديمة.
كان على الفرق إما:
للحصول على تنفيذ مفصل، راجع دليل تكامل Android Credential Manager WebView. ومع ذلك، نوصي بشدة باستخدام نهج WebKit 1.12.1+ الأصلي للتطبيقات الحديثة.
التوصية: استخدم دعم WebAuthn الأصلي مع AndroidX WebKit 1.12.1+. إذا لم يكن متاحاً في وقت التشغيل، فارجع إلى Chrome Custom Tabs التي توفر دعماً ممتازاً لمفتاح المرور مع بيانات الاعتماد المشتركة.
عند تنفيذ مفاتيح المرور في التطبيقات الأصلية، تحتاج إلى بناء الثقة بين تطبيقك ومجال (مجالات) الويب الخاص بك. يغطي هذا القسم كيفية التعامل مع النطاقات الفردية، والنطاقات المتعددة ذات الصلة (ROR) وكيفية التحقق من تكوين ملفات الارتباط المعروفة بشكل صحيح.
بالنسبة للتطبيقات التي تستخدم نطاقاً واحداً (مثل kayak.com)، تحتاج إلى:
webcredentials:kayak.comالأصول ذات الصلة (ROR) هي ميزة WebAuthn تسمح لمجموعة واحدة من مفاتيح المرور بالعمل عبر
نطاقات متعددة ذات صلة (مثل kayak.com، kayak.de، kayak.co.uk). يستخدم
ROR نقطة النهاية
/.well-known/webauthn على كل موقع لتحديد الأصول ذات الصلة، وليس ملفات AASA أو
assetlinks.
النقاط الرئيسية:
/.well-known/webauthn مع قائمة الأصول ذات الصلةمثال على التكوين:
إذا كان تطبيقك يعمل مع kayak.com و kayak.de، فيجب على كلا النطاقين:
قبل البث المباشر، تحقق من تكوين ملفاتك المعروفة بشكل صحيح وإمكانية الوصول إليها. توفر Apple و Google عناوين URL لاختبار CDN للتحقق من توفر الملف:
| المجال | التحقق من AASA من Apple | التحقق من Digital Asset Links من Google |
|---|---|---|
| kayak.com | اختبار ملف AASA تحقق مما إذا كان بإمكان Apple CDN جلب ملفك | اختبار assetlinks.json تحقق من إمكانية وصول Google إلى روابط الأصول الخاصة بك |
| kayak.de | اختبار ملف AASA تحقق مما إذا كان بإمكان Apple CDN جلب ملفك | اختبار assetlinks.json تحقق من إمكانية وصول Google إلى روابط الأصول الخاصة بك |
استخدام عناوين URL للاختبار هذه:
?nocache=1 من Apple استرداداً جديداً، متجاوزة ذاكرة التخزين المؤقت لـ CDNkayak.com أو kayak.de بنطاقك الخاص في أنماط عناوين URL أعلاهنقطة مهمة للاختبار: تأكد من أن جميع المجالات تحتوي على ملفات معروفة مكونة بشكل صحيح. يمكن أن يؤدي أي ملف مفقود أو تم تكوينه بشكل خاطئ على أي مجال إلى كسر وظيفة مفتاح المرور لهذا المجال.
مزيد من المعلومات: معرف Relying Party لـ WebAuthn في التطبيقات الأصلية
يعتمد اختيار نهج التنفيذ الصحيح على بنية المصادقة لتطبيقك، ومتطلبات OAuth، والحاجة إلى التحكم في الجلسة. استخدم شجرة القرار هذه لتحديد أفضل مسار للمضي قدماً.
يرشدك المخطط الانسيابي التالي خلال تحديد نهج التنفيذ الصحيح بناءً على متطلبات تطبيقك:
مرجع سريع لكل مسار:
إليك كيفية أداء كل نهج عبر الأبعاد الرئيسية:
| النهج | إنشاء مفاتيح المرور | استخدام مفاتيح المرور | إدارة مفاتيح المرور | التعقيد الفني | دعم OAuth | وقت الإعداد |
|---|---|---|---|---|---|---|
| التنفيذ الأصلي | اعتماد عالٍ سلس بيومتري، أفضل تجربة مستخدم | فوري، صامت يُمكن preferImmediatelyAvailableCredentials التراكب التلقائي عند بدء التطبيق | تحكم أصلي كامل التكامل مع إعدادات التطبيق | متوسط-مرتفع واجهات برمجة التطبيقات الخاصة بالمنصة | يتطلب تنفيذ تدفق OAuth منفصل | أسابيع إلى شهور |
| System WebView | اعتماد جيد تجربة تشبه المتصفح، مألوفة | تجربة مستخدم المتصفح القياسية Conditional UI في حقول الإدخال، سلسلة مفاتيح مشتركة | قائمة على المتصفح يدير المستخدمون عبر المتصفح | منخفض الحد الأدنى من التعليمات البرمجية الأصلية | ممتاز مصمم خصيصاً لـ OAuth | أيام إلى أسابيع |
| Embedded WebView | اعتماد أقل يتطلب تكويناً | دعم WebAuthn الأصلي WebKit 1.12.1+، لا يوجد Conditional UI | تحكم محدود لا يوجد تكامل أصلي | متوسط-مرتفع تكوين WebView + أذونات | يتطلب تكويناً | أسبوع إلى أسبوعين |
شروحات الأبعاد:
موصى به: System WebView
إذا كان تطبيقك يصادق عبر OAuth2 أو OIDC أو موفري تسجيل الدخول الاجتماعي (Google، GitHub، Microsoft، إلخ)، فإن System WebView هو الخيار الأمثل:
ASWebAuthenticationSession خصيصاً لتدفقات OAuthمثال: تستخدم تطبيقات السفر مثل kayak.com و kayak.de OAuth للمصادقة. يسمح لهم System WebView بالحفاظ على البنية التحتية الحالية لـ OAuth الخاصة بهم مع إضافة دعم مفتاح المرور من خلال صفحات مصادقة الويب الخاصة بهم.
موصى به: النهج الهجين
استخدم System WebView لمصادقة OAuth الأولية، ثم Embedded WebView لجلسات ما بعد المصادقة:
متى يتم الاستخدام: التطبيقات التي تصادق عبر OAuth ولكنها تحتاج بعد ذلك إلى عرض محتوى ويب مصادق عليه حيث تتطلب المعالجة المباشرة للجلسة.
موصى به: التنفيذ الأصلي
هل تبني من الصفر أو لديك شاشات أصلية؟ اذهب للأصلي بالكامل:
preferImmediatelyAvailableCredentials لعرض
تراكب مفتاح مرور تلقائي عند بدء التطبيق -
حصري للتطبيقات الأصلية ويوفر أعلى معدلات التحويلللتطبيقات الجديدة: نوصي بشدة بإنشاء تسجيل دخول أصلي من اليوم الأول. يهيئك للحصول على تجربة مستخدم مثالية ويتجنب عمليات الترحيل المستقبلية من WebView إلى التطبيق الأصلي.
موصى به: الترحيل المرحلي
يوضح المخطط التالي مسار الترحيل المتزايد:
تعتمد كل مرحلة على المرحلة السابقة، مما يسمح بإجراء تحسينات تدريجية دون تعطيل المستخدمين الحاليين.
| المتطلب | التنفيذ الأصلي | System WebView | Embedded WebView |
|---|---|---|---|
| الملفات المعروفة (AASA/assetlinks) | مطلوب | غير مطلوب | مطلوب |
| النطاقات المرتبطة (Associated Domains) في iOS | مطلوب | غير مطلوب | مطلوب |
| مكتبة Android WebKit | لا ينطبق | غير مطلوب | مطلوب (1.12.1+) |
| معرف Relying Party | يجب أن يتطابق مع النطاق | يجب أن يتطابق مع النطاق | يجب أن يتطابق مع النطاق |
راجع القسم 5 للحصول على إرشادات التكوين التفصيلية.
يتطلب اختبار مفاتيح المرور في التطبيقات الأصلية نهجاً منظماً متعدد الطبقات. اتبع هرم الاختبار: اختبارات الوحدة (منطق معزول)، اختبارات التكامل (مراسم WebAuthn على المحاكيات)، و اختبارات النظام (شاملة على الأجهزة الفعلية).
فئات الاختبار الأساسية:
للحصول على إرشادات اختبار شاملة بما في ذلك استراتيجيات الأتمتة والمشكلات الخاصة بالنظام الأساسي وقائمة مرجعية كاملة قبل الإصدار، راجع دليلنا المخصص: اختبار تدفقات مفتاح المرور في تطبيقات iOS و Android الأصلية.
فكر في مطالبة المستخدمين بإنشاء مفاتيح مرور بعد تسجيل الدخول التقليدي الناجح (كلمة المرور، OAuth). نهج التحويل التدريجي هذا:
مثال: بعد تسجيل الدخول عبر OAuth من خلال System WebView، اعرض مطالبة أصلية: "هل تريد تمكين تسجيل الدخول الأسرع باستخدام Face ID؟" في حالة القبول، أنشئ مفتاح مرور من خلال صفحة ويب محملة في System WebView.
يعد اتخاذ قرار بشأن كيفية تنفيذ مفاتيح المرور - عبر التنفيذ الأصلي أو System WebView أو Embedded WebView خياراً مهماً للتصميم يؤثر على الأمان وتجربة المستخدم وتعقيد التطوير. لا توجد إجابة واحدة تناسب الجميع.
بالنسبة للتطبيقات المستندة إلى OAuth: يعد System WebView (ASWebAuthenticationSession، Chrome Custom Tabs) نقطة البداية الموصى بها. إنه يوفر دعماً ممتازاً لـ OAuth، وجهداً أدنى في التنفيذ، ومشاركة تلقائية لبيانات الاعتماد.
بالنسبة للتطبيقات الأصلية أولاً: انتقل إلى التنفيذ الأصلي عاجلاً وليس آجلاً. يوفر
تسجيل الدخول بمفتاح المرور الأصلي تجربة المستخدم الأكثر سلاسة مع إمكانات حصرية مثل
preferImmediatelyAvailableCredentials، والتي تتيح
التراكب التلقائي لمفتاح المرور عند بدء التطبيق -
وهو أمر لا تستطيع تطبيقات WebView توفيره. مع توفير iOS و Android الآن دعماً من الدرجة
الأولى لمفاتيح المرور، تظهر النجاحات في العالم الحقيقي اعتماداً عالياً. نضجت الأدوات (بما
في ذلك حزم SDK مفتوحة المصدر ومكتبات المنصات) لجعل التكامل الأصلي قابلاً للتحقيق في أطر
زمنية معقولة. بينما يجب أن تكون على دراية بسياسات إدارة الأجهزة، والمزامنة عبر الأجهزة،
وموفري الجهات الخارجية، يمكن إدارة هذه التحديات بهندسة واختبار دقيقين. والنتيجة هي تسجيل
دخول للتطبيق يسعد المستخدمين بسهولته وسرعته مع تحسين الأمان بشكل كبير.
لمتطلبات إطار Embedded WebView: يشيع استخدام Embedded WebView في سيناريوهين واقعيين. أولاً، غالباً ما تستخدم التطبيقات المستندة إلى OAuth طريقة System WebView لتدفق تسجيل الدخول الأولي، ثم تقوم بالتبديل إلى Embedded WebView لعرض خيارات إدارة مفتاح المرور في شاشات الإعدادات حيث يلزم التحكم في الجلسة - على الرغم من أن بعض التطبيقات تبسط ذلك من خلال الاحتفاظ بـ System WebView لكلا التدفقين. ثانياً، تستمر التطبيقات التي قامت بالفعل بتضمين تدفق المصادقة الخاص بها في إطارات WebView قبل اعتماد مفاتيح المرور في هذا النمط من أجل الاتساق. يتطلب Embedded WebView مع دعم WebAuthn الأصلي (AndroidX WebKit 1.12.1+) تكويناً وإعداداً (أذونات، استحقاقات، إعدادات WebView) ولكنه لم يعد يحتاج إلى رمز جسر JavaScript مخصص. لاحظ أن Conditional UI غير مدعوم في Embedded WebView. اختر هذا النهج عند الحفاظ على أنماط المصادقة المضمنة الحالية أو عندما تحتاج إلى التحكم في الجلسة/ملفات تعريف الارتباط لشاشات ما بعد المصادقة.
في النهاية، تمثل مفاتيح المرور في التطبيقات الأصلية قفزة هائلة إلى الأمام في كل من راحة المستخدم والأمان. سواء تم تنفيذها عبر النظام الأصلي، أو System WebView، أو Embedded WebView، فإنها تقضي على مخاطر التصيد الاحتيالي وأعباء إدارة كلمات المرور للمستخدمين. تثبت التطبيقات في العالم الحقيقي مثل دمج مفتاح مرور تطبيق VicRoads الأصلي أن الأساليب الأصلية أولاً تحقق أعلى نسبة اعتماد ورضا للمستخدم عند تنفيذها بشكل صحيح مع ميزات مثل التراكبات التلقائية لمفتاح المرور. باتباع أفضل الممارسات للمصادقة سهلة الاستخدام واختيار نهج التنفيذ الذي يطابق بنية تطبيقك - أصلي أولاً للتطبيقات الجديدة، أو System WebView لتدفقات OAuth، أو Embedded WebView للأنماط المضمنة الحالية - يمكنك تقديم عمليات تسجيل دخول بيومترية بدون كلمة مرور تدرك حقاً رؤية مفاتيح المرور: مصادقة بسيطة وآمنة وممتعة للجميع.
إذا كانت مفاتيح المرور لا تعمل في تطبيقك الأصلي، فتحقق من هذه المشكلات الشائعة حسب نهج التنفيذ:
application/json.well-knownhttps://your-domain.com (ليس app://)webcredentials:yourdomain.comASWebAuthenticationSession (موصى به) أو SFSafariViewController?mode=developer أثناء التطوير (قم بإزالته للإنتاج)WebViewFeature.WEB_AUTHENTICATIONsetWebAuthenticationSupport() مع
WEB_AUTHENTICATION_SUPPORT_FOR_APP"NotAllowedError: The request is not allowed by the user agent or the platform in the current context"
setWebAuthenticationSupport()لا تظهر أي مطالبة بمفتاح مرور
?mode=developer على iOS للاختبار، تحقق من
نوع WebViewللحصول على تصحيح مفصل، راجع مقالتنا حول Relying Party IDs في التطبيقات الأصلية.
مأزق شائع: بيئات التجهيز ذات الوصول المقيد (إدراج عناوين IP في القائمة البيضاء، أو VPN فقط) ستفشل لأنه يجب أن تتمكن شبكات CDN التابعة لـ Apple و Google من جلب ملفات الارتباط الخاصة بك.
https://app-site-association.cdn-apple.com/a/v1/your-staging-domain.com?nocache=1https://digitalassetlinks.googleapis.com/v1/statements:list/?source.web.site=https://your-staging-domain.com&relation=delegate_permission/common.handle_all_urlsنطاق فرعي للتجهيز مع rpID للإنتاج:
إذا كانت بيئة التجهيز الخاصة بك (مثل stg.login.example.com) تستخدم مجال الإنتاج كـ rpID
(مثل example.com)، فإن بحث AASA يحدث على مجال rpID، وليس النطاق الفرعي للتجهيز الخاص
بك. هذا يعني:
مثال (بيئات متعددة تشترك في AASA واحد):
{ "webcredentials": { "apps": [ "TEAMID123.com.example.app", "TEAMID123.com.example.app.dev", "TEAMID123.com.example.app.stg", "TEAMID123.com.example.app.pre" ] } }
التوصية: استخدم rpID تجهيز منفصل يطابق مجال التجهيز الخاص بك لتجنب تداخل بيانات الاعتماد بين البيئات. يتطلب هذا ملفات AASA يمكن الوصول إليها بشكل عام على مجال التجهيز.
توضيح ?mode=developer:
تتخطى المعلمة ?mode=developer في Associated Domains ذاكرة التخزين المؤقت لـ CDN الخاصة
بـ Apple ولكن لا تتخطى متطلبات إمكانية الوصول. لا يزال يجب أن يكون ملف AASA الخاص بك
قابلاً للوصول من الجهاز (ليس من خلال CDN الخاص بـ Apple، ولكن بشكل مباشر). يساعد هذا أثناء
التطوير عند تكرار تغييرات AASA، ولكنه لن يساعد إذا كان خادم التجهيز الخاص بك مدرجاً في
القائمة البيضاء لـ IP.
حزم Corbado Native SDKs:
وثائق المنصة:
أدوات التحقق من الصحة:
Corbado هي Passkey Intelligence Platform لفِرَق CIAM التي تُدير المصادقة الاستهلاكية على نطاق واسع. نُمكّنك من رؤية ما لا تستطيع سجلات IDP وأدوات التحليل العامة إظهاره: أي الأجهزة وإصدارات أنظمة التشغيل والمتصفحات ومديري بيانات الاعتماد تدعم passkeys، ولماذا لا تتحوّل عمليات التسجيل إلى عمليات دخول، وأين يفشل تدفق WebAuthn، ومتى يُعطّل تحديث نظام التشغيل أو المتصفح تسجيل الدخول بصمت — كل ذلك دون استبدال Okta أو Auth0 أو Ping أو Cognito أو IDP الداخلي لديك. منتجان: Corbado Observe يُضيف observability للـ passkeys وأي طريقة دخول أخرى. Corbado Connect يُقدّم managed passkeys مع تحليلات مدمجة (إلى جانب IDP الخاص بك). تُشغّل VicRoads passkeys لأكثر من 5 ملايين مستخدم مع Corbado (تفعيل passkey بنسبة +80%). تحدث مع خبير Passkey →
يعتمد الاختيار على بنية المصادقة الخاصة بك. إذا كان تطبيقك يستخدم OAuth2 أو OIDC، فإن System WebView (ASWebAuthenticationSession على iOS أو Chrome Custom Tabs على Android) يتطلب أقل جهد في التنفيذ ولا يتطلب إعداد ملف ربط. بالنسبة للتطبيقات الأصلية الجديدة، يوفر التنفيذ الأصلي تجربة مستخدم فائقة، بينما يناسب Embedded WebView التطبيقات التي تقوم بالفعل بتضمين المصادقة في إطار WebView وتحتاج إلى التحكم في الجلسة أو ملفات تعريف الارتباط بعد تسجيل الدخول.
يستفيد SFSafariViewController من محرك Safari، ويعرض شريط URL مع مؤشرات SSL ويوفر حماية من التصيد الاحتيالي، مما يجعله أكثر موثوقية لتدفقات المصادقة. يوفر WKWebView المزيد من تخصيص واجهة المستخدم ولكنه يحتوي على مخزن ملفات تعريف ارتباط معزول منفصل عن Safari، ويتطلب استحقاقات Associated Domains وملف AASA لتمكين مفاتيح المرور، ولا يعرض شريط URL، مما يقلل من إشارات ثقة المستخدم.
تشارك Chrome Custom Tabs ملفات تعريف الارتباط وبيانات الاعتماد المخزنة مع متصفح Chrome الخاص بالمستخدم، مما يعني أن مفاتيح المرور المحفوظة في Google Password Manager يمكن الوصول إليها أثناء المصادقة. يحتوي Android WebView القياسي على مخزن ملفات تعريف ارتباط معزول، ولا يعرض مؤشرات URL أو SSL، وقد حظرته Google صراحةً لتسجيلات الدخول إلى حساب Google بسبب مخاطر التصيد الاحتيالي.
إذا كان لدى المستخدم مدير بيانات اعتماد تابع لجهة خارجية مثل 1Password تم تعيينه كموفر نشط له، فغالباً ما يعترض إنشاء مفتاح المرور وتخزينه، مع إعطاء الأولوية على مدير بيانات الاعتماد الأصلي للمنصة (iCloud Keychain أو Google Password Manager). وهذا يعني أن مفاتيح المرور قد يتم تخزينها في تطبيق الطرف الثالث بدلاً من سلسلة مفاتيح المنصة، مما يؤثر على مزامنة الأجهزة المتعددة وسلوك إدارة مفتاح المرور.
عندما تقوم سياسات MDM بتعطيل مزامنة بيانات الاعتماد، تصبح مفاتيح المرور مرتبطة بالجهاز ولا يمكنها الانتقال إلى جهاز بديل، على عكس سيناريوهات المستهلك النموذجية. يجب أن تخطط التطبيقات التي تستهدف بيئات الشركات لآليات مصادقة احتياطية مثل كلمة المرور أو تسجيل الدخول بالرابط السحري للتعامل مع الحالات التي يتلقى فيها المستخدم جهازاً مُداراً جديداً.
مقالات ذات صلة
جدول المحتويات