يشرح هذا المقال كيفية تنفيذ مفاتيح المرور في التطبيقات الأصلية (iOS + Android). ستتعلم أي نوع من WebView يُنصح به لمصادقة مفاتيح المرور.

Vincent
Created: June 20, 2025
Updated: November 14, 2025

See the original blog version in English here.
60-page Enterprise Passkey Whitepaper:
Learn how leaders get +80% passkey adoption. Trusted by Rakuten, Klarna & Oracle
| النهج | معدل التبني | إنشاء مفاتيح المرور | استخدام مفاتيح المرور | إدارة مفاتيح المرور | التعقيد التقني | دعم OAuth |
|---|---|---|---|---|---|---|
| التنفيذ الأصلي | 🟢🟢🟢 | تبني عالٍ، أفضل تجربة مستخدم، تجربة بيومترية سلسة | مصادقة فورية وصامتة | تحكم أصلي كامل | متوسط-عالي | يتطلب تدفقًا منفصلاً |
| WebView النظام | 🟢🟢 | تبني جيد، تجربة شبيهة بالمتصفح | تجربة مستخدم قياسية للمتصفح، سلسلة مفاتيح مشتركة | إدارة قائمة على المتصفح | منخفض | ممتاز |
| WebView المدمج | 🟢 | تبني أقل، يتطلب المزيد من الإعداد | دعم أصلي على iOS و Android (WebKit 1.12.1+)، لا يوجد واجهة مستخدم شرطية (Conditional UI) | تحكم محدود | متوسط-عالي | لا ينطبق |
ملاحظة: غالبًا ما يتم الجمع بين WebView النظام و WebView المدمج، حيث يتولى WebView النظام عملية تسجيل الدخول (مع مشاركة بيانات الاعتماد تلقائيًا)، ثم يعرض WebView المدمج إدارة مفاتيح المرور في الإعدادات.
عوامل اتخاذ القرار الرئيسية:
توفر المنصات المحمولة الحديثة ثلاثة أساليب متميزة لدمج مفاتيح المرور في تطبيقك الأصلي، لكل منها مقايضات مختلفة من حيث تجربة المستخدم والتعقيد التقني والتوافق مع OAuth:
التنفيذ الأصلي: بناء تدفقات مفاتيح المرور مباشرة في تطبيقك باستخدام واجهات برمجة التطبيقات (APIs) الخاصة بالمنصة (AuthenticationServices على iOS، و Credential Manager على Android). يوفر أفضل تجربة للمستخدم مع مصادقة بيومترية سلسة، ولكنه يتطلب جهدًا تقنيًا متوسطًا إلى عاليًا في التنفيذ.
WebView النظام: استخدام مكون المتصفح الخاص بالمنصة (ASWebAuthenticationSession / SFSafariViewController على iOS، و Chrome Custom Tabs على Android) للتعامل مع المصادقة. ممتاز لتدفقات تسجيل الدخول القائمة على OAuth ويشارك بيانات الاعتماد مع متصفح النظام.
WebView المدمج: تضمين عرض ويب قابل للتخصيص (WKWebView على iOS، و WebView على Android) داخل تطبيقك لإعادة استخدام مصادقة الويب مع هيكل تطبيق أصلي. يوفر مظهرًا شبيهًا بالتطبيقات الأصلية بدون أشرطة URL وتحكم كامل في واجهة المستخدم الخاصة بعرض الويب. يتطلب إعدادًا إضافيًا بما في ذلك الأذونات والصلاحيات (iOS)، وتهيئة WebView مع AndroidX WebKit 1.12.1+ (Android) لتمكين وظائف مفاتيح المرور.
يعتمد الخيار الصحيح على بنية المصادقة في تطبيقك، وما إذا كنت تستخدم موفري OAuth، ومقدار التحكم الذي تحتاجه في واجهة المستخدم، وما إذا كنت تبني تطبيقًا أصليًا بالكامل أو تعيد استخدام مكونات الويب.
Recent Articles
يوفر التنفيذ الأصلي لمفاتيح المرور تجربة المستخدم المثلى، مع تدفقات مصادقة مدمجة مباشرة في واجهة المستخدم الخاصة بتطبيقك باستخدام واجهات برمجة التطبيقات الخاصة بالمنصة. يستفيد المستخدمون من مربعات الحوار الأصلية للمنصة، والتحقق البيومتري السلس، وأسرع أوقات تسجيل دخول ممكنة.
متى تختار التنفيذ الأصلي:
preferImmediatelyAvailableCredentials لعرض طبقة عرض مفاتيح المرور تلقائيًا عند
توفر مفاتيح المرور، مما يوفر أسرع تجربة تسجيل دخول دون الحاجة إلى إدخال المعرّفالميزة الرئيسية: preferImmediatelyAvailableCredentials()
يمكن للتطبيقات الأصلية الاستفادة من preferImmediatelyAvailableCredentials() لإنشاء طبقة
عرض تلقائية لمفاتيح المرور تظهر فور بدء تشغيل التطبيق عند توفر مفاتيح المرور. يوفر هذا
التدفق الذي لا يتطلب اسم مستخدم أسرع تجربة تسجيل دخول ممكنة - يرى المستخدمون مفاتيح المرور
الخاصة بهم على الفور دون إدخال معرّف أولاً. هذه الإمكانية حصرية للتطبيقات الأصلية وغير
متوفرة في متغيرات WebView.
بينما يمكن لتطبيقات WebView استخدام الواجهة الشرطية (Conditional UI) (اقتراحات مفاتيح المرور في حقول الإدخال)، فإن طبقة العرض التلقائية في التطبيقات الأصلية توفر تجربة مستخدم متفوقة مع معدلات استخدام أعلى لمفاتيح المرور لأن المصادقة تبدأ فور تشغيل التطبيق.
نظرة عامة على المتطلبات الفنية:
يتطلب التكامل الأصلي لمفاتيح المرور ثقة تشفيرية بين تطبيقك ونطاق الويب. بدونها، سيرفض نظام التشغيل جميع عمليات 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 تعمل في تطبيقات الويب)
يواجه تنفيذ مفاتيح المرور أصليًا تحديات ودروسًا مستفادة مهمة: يمكن أن يؤدي التكامل على مستوى نظام التشغيل إلى ظهور مشكلات عبر أجهزة وإصدارات أنظمة تشغيل مختلفة.
apple-app-site-association (المستخدم لربط بيانات اعتماد التطبيق/الويب) والاختلافات
الدقيقة في واجهة المستخدم في بعض مطالبات المقاييس الحيوية لمصنعي المعدات الأصلية (OEM)
على Android.بينما يمكنك تنفيذ مفاتيح المرور باستخدام واجهات برمجة التطبيقات الخام للمنصة، فإن SDKs المصممة خصيصًا تسرع بشكل كبير من عملية التطوير من خلال التعامل مع تعقيدات WebAuthn، والحالات الخاصة، وتوفير قياسات مدمجة عن بعد. توفر SDKs أيضًا واجهات قابلة للمحاكاة لاختبار الوحدات (وهو أمر بالغ الأهمية حيث لا يمكنك اختبار المقاييس الحيوية في المحاكيات).
توصية: بالنسبة للتطبيقات الأصلية، نوصي باستخدام Corbado SDKs (iOS Swift Passkey SDK، Android Kotlin Passkey SDK) التي تتعامل مع الحالات الخاصة العديدة التي تم اكتشافها من خلال عمليات النشر الإنتاجية، وتوفر قياسات عن بعد واختبارات إضافية.
Igor Gjorgjioski
Head of Digital Channels & Platform Enablement, VicRoads
Corbado proved to be a trusted partner. Their hands-on, 24/7 support and on-site assistance enabled a seamless integration into VicRoads' complex systems, offering passkeys to 5 million users.
مفاتيح مرور يتبناها الملايين، وبسرعة. ابدأ مع منصة التبني من Corbado.
ابدأ التجربة المجانيةتستخدم WebView النظام مكون المتصفح الأصلي للمنصة للتعامل مع المصادقة داخل تطبيقك. على عكس التطبيقات الأصلية بالكامل، تعرض WebView النظام محتوى الويب باستخدام متصفح النظام الفعلي (Safari على iOS، و Chrome على Android)، مع الحفاظ على ملفات تعريف الارتباط المشتركة، وبيانات الاعتماد المحفوظة، ومؤشرات الأمان المألوفة للمتصفح.
متى تختار WebView النظام:
المزايا الرئيسية:
مكونات المنصة:
ASWebAuthenticationSession (موصى به لتدفقات المصادقة) أو
SFSafariViewController (للتصفح العام)اعتمدت شركات كبرى مثل Google و GitHub هذا النهج لإضافة تسجيل الدخول بمفتاح المرور إلى تطبيقات الهاتف المحمول الخاصة بهم عبر طبقات WebView فوق صفحات المصادقة على الويب الحالية. يعمل هذا جيدًا عندما لا تكون إعادة بناء المصادقة الأصلية بالكامل ممكنة على الفور.
يوفر iOS مكونين رئيسيين لـ WebView النظام للمصادقة:
ASWebAuthenticationSession (موصى به للمصادقة):
SFSafariViewController (للتصفح العام):
| الميزة | ASWebAuthenticationSession | SFSafariViewController |
|---|---|---|
| حالة الاستخدام الأساسية | تدفقات المصادقة | تصفح الويب العام |
| OAuth/OIDC | ممتاز | جيد |
| دعم مفاتيح المرور | نعم | نعم |
| التخصيص | محدود | الحد الأدنى |
إذا كان تطبيقك يستخدم تسجيل الدخول القائم على OAuth، فإن ASWebAuthenticationSession
هو الخيار الموصى به لأنه مصمم خصيصًا لسيناريوهات المصادقة ويوفر أفضل توازن بين الأمان
وتجربة المستخدم.
توفر Chrome Custom Tabs (CCT) تجربة مصادقة مدعومة بـ Chrome داخل تطبيقك:
الميزات الرئيسية:
تكامل OAuth: Chrome Custom Tabs هي المكافئ في Android لـ ASWebAuthenticationSession في iOS، حيث توفر دعمًا ممتازًا لـ OAuth مع الحفاظ على الوصول إلى مفاتيح المرور المخزنة.
توفر WebView المدمجة تحكمًا كاملاً في عرض محتوى الويب داخل تطبيقك، مما يسمح بالتعامل المباشر مع ملفات تعريف الارتباط والجلسات والتنقل بدون شريط URL. ومع ذلك، يأتي هذا التحكم مع متطلبات فنية إضافية لتمكين وظائف مفاتيح المرور.
متى تختار WebView المدمج:
سياق مهم:
تستخدم العديد من التطبيقات نهجًا هجينًا: يتعامل WebView النظام مع مصادقة OAuth الأولية (حيث تعمل مفاتيح المرور بسلاسة)، ثم ينتقل إلى WebView المدمج بعد المصادقة لإدارة مفاتيح المرور في الإعدادات. تظهر التحديات عند محاولة استخدام مفاتيح المرور مباشرة داخل WebView المدمجة.
المتطلبات الفنية:
تتطلب WebView المدمجة إعدادًا إضافيًا مقارنة بـ WebView النظام:
مكونات المنصة:
WKWebViewandroid.webkit.WebViewالمقايضات:
عند تنفيذ مفاتيح المرور عبر WebView، من الضروري فهم التمييز بين WebView النظام و WebView المدمج. كل من الأساليب الثلاثة الموضحة أعلاه (التنفيذ الأصلي، WebView النظام، و WebView المدمج) تخدم حالات استخدام مختلفة.
على iOS، لديك خيارات متعددة لعرض محتوى الويب داخل التطبيق:
على Android، الخيارات الرئيسية هي:
android.webkit.WebView)، وهي في الأساس
متصفح صغير يمكن تضمينه في أنشطتك. إنه قابل للتخصيص بشكل كبير ولكنه يعمل في عملية تطبيقك.في الأقسام التالية، سنتعمق قليلاً في أنواع WebView هذه لنظامي iOS و Android، ونناقش أيها قد يكون الأنسب لتدفقات مصادقة مفاتيح المرور.
توفر منصة Apple خيارات WebView الثلاثة المذكورة أعلاه. سيؤثر اختيارك على مدى سلاسة استخدام مفاتيح المرور داخل التطبيق:
لاختبار سلوك WebView المختلف في iOS، نوصي بتطبيق WebView - WKWebView and UIWebView rendering.
WKWebView هو مكون WebView متعدد الاستخدامات لنظام iOS. يمكن للمطورين تضمين WKWebView لعرض محتوى الويب بدرجة عالية من التحكم في واجهة المستخدم والسلوك. يستخدم WKWebView نفس محرك العرض مثل Safari، لذا فهو عالي الأداء ويدعم ميزات الويب الحديثة. نظريًا، يمكن لـ WKWebView التعامل مع WebAuthn (وبالتالي مفاتيح المرور) إذا تم تكوينه بشكل صحيح، ولكن لاحظ أن بعض ميزات المتصفح المتقدمة قد تكون مقيدة لأسباب أمنية. شيء واحد يجب الانتباه إليه هو أن WKWebView افتراضيًا لا يشارك ملفات تعريف الارتباط أو بيانات سلسلة المفاتيح مع Mobile Safari. قد يضطر المستخدمون إلى تسجيل الدخول من جديد لأن جلسة WebView الخاصة بهم معزولة عن جلسة Safari. أيضًا، نظرًا لأن محتوى WKWebView يمكن تخصيصه بالكامل بواسطة التطبيق، لا يرى المستخدم شريط عنوان أو واجهة مستخدم Safari - وهو أمر رائع للعلامة التجارية، ولكنه يعني أن لدى المستخدم إشارات أقل للتحقق من شرعية الصفحة (مصدر قلق لمكافحة التصيد الاحتيالي (phishing)). حتى أن بعض التطبيقات أساءت استخدام WKWebView لحقن نصوص برمجية أو تغيير المحتوى (على سبيل المثال، لوحظ أن TikTok يقوم بحقن JavaScript للتتبع عبر متصفحه داخل التطبيق)، لذا يجب على المرء توخي الحذر لاستخدام 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 أيضًا. |
| الثغرات الأمنية | - آمن: آمن بطبيعته بسبب وضع الحماية (sandboxing) الخاص بتطبيقات Apple، ولكن السلوك والأمان يعتمدان على تنفيذ التطبيق. ثغرات محتملة إذا لم يتم تنفيذه بشكل صحيح. | - أكثر أمانًا: يستفيد من ميزات الأمان المضمنة في Safari، بما في ذلك مكافحة التصيد الاحتيالي وتحذيرات المواقع الخبيثة. يعتبر بشكل عام أكثر أمانًا لعرض محتوى الويب من WKWebView بسبب هذه الميزات وألفة المستخدم مع Safari. |
| أخرى | - ميزات غير متوفرة: قد لا تكون بعض ميزات المتصفح (مثل WebAuthn) متاحة بالكامل بسبب مخاوف أمنية وتشغيل WKWebView في سياق التطبيق. - حقن JavaScript: تقوم بعض التطبيقات، مثل TikTok، بحقن JavaScript للتتبع في WKWebView داخل التطبيق، أو تقييد تحكم المستخدم (مثل Facebook) - مشكلات الخصوصية: المزيد من آراء المجتمع بشأن الخصوصية | - لا يوجد حقن JavaScript: لا يسمح بتنفيذ JavaScript من التطبيق، مما يعزز الأمان والخصوصية. كما أنه لا يدعم تنبيهات أو تأكيدات JavaScript، مما قد يؤثر على تجربة المستخدم في بعض صفحات الويب. - وضع القارئ: يوفر وضع القارئ نسخة نظيفة وسهلة القراءة من المقالات. |
SFAuthenticationSession / ASWebAuthenticationSession – هذه الفئات (الأخيرة هي الاسم الأحدث المتوافق مع Swift) مصممة خصيصًا لتدفقات تسجيل الدخول مثل OAuth أو OpenID Connect. عندما تحتاج إلى مصادقة مستخدم عبر صفحة ويب (ربما إلى موفر هوية خارجي)، فإن هذه الجلسات هي الخيار الموصى به على iOS. إنها تشبه إلى حد كبير SFSafariViewController من حيث أنها تستخدم متصفح Safari تحت الغطاء وتشارك ملفات تعريف الارتباط/التخزين مع Safari. الفرق الرئيسي هو أن SFAuthenticationSession ستطالب المستخدم دائمًا بأن التطبيق يريد المصادقة باستخدام صفحة ويب (لتوعية المستخدم) وستستخدم تلقائيًا جلسة Safari الحالية للمستخدم إذا كانت متاحة.
الفائدة هي تجربة تسجيل دخول موحد (SSO) سلسة - إذا كان المستخدم قد سجل الدخول بالفعل إلى الموفر في Safari، فيمكن لهذه الجلسة استخدام ملف تعريف الارتباط هذا لتجنب تسجيل دخول آخر. بالنسبة لمفاتيح المرور، هذا مهم لأنه يعني أن أي بيانات اعتماد لمفتاح المرور مخزنة في Safari/iCloud Keychain يمكن استخدامها هنا أيضًا. الإرشادات الرسمية من Apple هي استخدام ASWebAuthenticationSession لأي شيء يشبه تدفق تسجيل الدخول. الإيجابيات هي الخصوصية المعززة (لا يرى تطبيقك أبدًا بيانات الاعتماد أو ملفات تعريف الارتباط، Safari يتعامل معها) ودعم تسجيل الدخول الموحد المدمج. السلبية هي أنها تقتصر على تدفقات المصادقة (لن تستخدمها فقط لعرض محتوى ويب عشوائي في تطبيقك). باختصار، إذا اخترت نهج WebView على iOS، فإن ASWebAuthenticationSession هو عادة الخيار الأفضل لتنفيذ مفاتيح المرور لأنه آمن، ويشارك الحالة مع Safari، ومصمم خصيصًا للمصادقة.
على 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)، فيمكن لـ Custom Tab الوصول إليه. سيرى المستخدم أيضًا عنوان URL الفعلي ومؤشرات الأمان، مما يبني الثقة. غالبًا ما يكون الأداء أفضل - يمكن "تسخين" Chrome في الخلفية لتحميل أسرع. والأهم من ذلك، أن الأمان قوي: نظرًا لأنه في الأساس تطبيق Chrome، فإن أشياء مثل Google Safe Browsing تحمي الجلسة، ولا يمكن لتطبيقك حقن نصوص برمجية عشوائية في الصفحة (مما يمنع هجمات معينة).
الجانب السلبي هو أنه يتطلب أن يكون لدى المستخدم 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 فقط على جانب واحد من الشاشة، بينما يعرض باقي الشاشة التطبيق الأصلي | |
| تجربة المطور | - قابلية تخصيص عالية: يوفر خيارات/احتياجات تخصيص واسعة. - التفاعلية: يوفر العديد من واجهات برمجة التطبيقات للتفاعل مع محتوى الويب وإدارة تفاعلات المستخدم. | - قابلية التخصيص: يسمح بتخصيص لون شريط الأدوات، وزر الإجراء، وشريط الأدوات السفلي، وعناصر القائمة المخصصة، والرسوم المتحركة للدخول/الخروج. - رد الاتصال (Callback): يسلم رد اتصال إلى التطبيق عند حدوث تنقل خارجي. - ميزات الأمان: يوفر ميزات جاهزة للاستخدام، مما يلغي الحاجة إلى إدارة الطلبات أو منح الأذونات أو مخازن ملفات تعريف الارتباط. | |
| الأداء | - أداء متوسط: قد لا يقدم نفس مستوى أداء Chrome Custom Tabs (CCT) | - التسخين المسبق: يتضمن التسخين المسبق للمتصفح في الخلفية والتحميل التكهني لعناوين URL لتعزيز وقت تحميل الصفحة. - الأولوية: يمنع طرد التطبيقات التي تطلق علامة تبويب مخصصة أثناء استخدامها عن طريق رفع أهميتها إلى مستوى "المقدمة". | |
| الثقة والتعرف | - عنوان 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 استخدام WebView لتسجيل دخول المستخدمين إلى حسابات Google |
بغض النظر عن نهج التنفيذ الذي تختاره، يجب تلبية متطلبات فنية معينة لتمكين وظائف مفاتيح المرور. يقدم هذا القسم إرشادات شاملة حول تكوين ملفات الربط المعروفة (well-known association files)، وصلاحيات iOS، وتكوين Android WebView.
ملاحظة حول الأجهزة المدارة: يتغير سلوك مفاتيح المرور بشكل كبير على الأجهزة المدارة حيث تتحكم سياسات إدارة الأجهزة المحمولة (MDM) في تخزين بيانات الاعتماد.
تتطلب تدفقات WebView الأصلية والمدمجة ملفات ربط لإنشاء ثقة تشفيرية بين تطبيقك ونطاق الويب. لا يتطلب 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
يتطلب التنفيذ الأصلي و WebView المدمج قدرة النطاقات المرتبطة لربط تطبيقك بنطاق الويب الخاص بك. لا يتطلب 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>
| النهج | النطاقات المرتبطة مطلوبة | تكوين إضافي |
|---|---|---|
| التنفيذ الأصلي | نعم | تنفيذ مخصص |
| WebView النظام | غير مطلوب | يعمل إعداد الويب الافتراضي |
| WebView المدمج | نعم | يتطلب تكوين AndroidX WebKit 1.12.1+ |
نطاقات متعددة: إذا كان تطبيقك يحتاج إلى العمل مع نطاقات متعددة، فقد تحتاج إلى طلبات الأصل المرتبطة (Related Origin Requests - ROR).
اكتسبت Android Embedded WebViews دعم WebAuthn الأصلي مع AndroidX WebKit 1.12، مما يلغي الحاجة إلى كود جسر JavaScript مخصص. لا يتطلب WebView النظام (Chrome Custom Tabs) أي تكوين - تعمل بيانات الاعتماد تلقائيًا.
المتطلبات:
التنفيذ:
import androidx.webkit.WebSettingsCompat import androidx.webkit.WebViewFeature // Check if Web Authentication is supported if (WebViewFeature.isFeatureSupported(WebViewFeature.WEB_AUTHENTICATION)) { // Enable Web Authentication WebSettingsCompat.setWebAuthenticationSupport( webView.settings, WebSettingsCompat.WEB_AUTHENTICATION_SUPPORT_FOR_APP ) // Enable JavaScript webView.settings.javaScriptEnabled = true }
نقاط رئيسية:
WebViewFeature.WEB_AUTHENTICATION في وقت
التشغيلmediation:"conditional" (الملء
التلقائي لمفتاح المرور في حقول الإدخال) لا يعمل في WebView المدمجملاحظات الإصدار:
قبل AndroidX WebKit 1.12.0، لم يكن دعم WebAuthn الأصلي موجودًا في WebView المدمج. كان على الفرق إما:
إذا كنت بحاجة إلى دعم إصدارات Android الأقدم أو الأجهزة التي لا تحتوي على حزم APK محدثة لـ WebView، فراجع دليل تكامل WebView مع Credential Manager الخاص بـ Android للحصول على نهج كود الجسر. ومع ذلك، نوصي بشدة باستخدام نهج WebKit 1.12.1+ الأصلي للتطبيقات الحديثة.
توصية: استخدم دعم WebAuthn الأصلي مع AndroidX WebKit 1.12.1+. إذا لم يكن متاحًا في وقت التشغيل، فارجع إلى Chrome Custom Tabs التي توفر دعمًا ممتازًا لمفاتيح المرور مع بيانات اعتماد مشتركة.
عند تنفيذ مفاتيح المرور في التطبيقات الأصلية، تحتاج إلى إنشاء ثقة بين تطبيقك ونطاق(ات) الويب. يغطي هذا القسم كيفية التعامل مع النطاقات الفردية، والنطاقات المتعددة المرتبطة (ROR)، وكيفية التحقق من تكوين ملفات الربط well-known بشكل صحيح.
للتطبيقات التي تستخدم نطاقًا واحدًا (مثل 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، فيجب على كلا النطاقين:
قبل الإطلاق، تحقق من أن ملفات well-known الخاصة بك مهيأة بشكل صحيح ويمكن الوصول إليها. توفر Apple و Google عناوين URL اختبارية قائمة على CDN للتحقق من توفر الملفات:
| النطاق | التحقق من ملف AASA لـ Apple | التحقق من روابط الأصول الرقمية لـ 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 أعلاهنقطة مهمة في الاختبار: تأكد من أن جميع النطاقات لديها ملفات well-known مهيأة بشكل صحيح. يمكن أن يؤدي ملف مفقود أو مهيأ بشكل خاطئ على أي نطاق إلى كسر وظيفة مفتاح المرور لذلك النطاق.
يعتمد اختيار نهج التنفيذ الصحيح على بنية المصادقة في تطبيقك، ومتطلبات OAuth، والحاجة إلى التحكم في الجلسة. استخدم شجرة القرار هذه لتحديد أفضل مسار للمضي قدمًا.
ابدأ بهذه الأسئلة الرئيسية:
هل يستخدم تطبيقك تسجيل الدخول القائم على OAuth (OAuth2، OIDC، موفرو تسجيل الدخول الاجتماعي)؟
ASWebAuthenticationSessionهل ترغب في إعادة استخدام مصادقة الويب في غلاف شبيه بالأصلي (بدون شريط URL، تحكم كامل في واجهة المستخدم)؟
WKWebView + صلاحيات النطاقات المرتبطةWebView + تكوين AndroidX WebKit 1.12.1+هل تبني تطبيقًا أصليًا جديدًا أو لديك شاشات تسجيل دخول أصلية؟
هل لديك مصادقة ويب حالية ترغب في إعادة استخدامها؟
إليك كيفية أداء كل نهج عبر الأبعاد الرئيسية:
| النهج | إنشاء مفاتيح المرور | استخدام مفاتيح المرور | إدارة مفاتيح المرور | التعقيد التقني | دعم OAuth | وقت الإعداد |
|---|---|---|---|---|---|---|
| التنفيذ الأصلي | تبني عالٍ تجربة بيومترية سلسة، أفضل تجربة مستخدم | فوري، صامتpreferImmediatelyAvailableCredentials يتيح عرضًا تلقائيًا عند بدء التطبيق | تحكم أصلي كامل التكامل مع إعدادات التطبيق | متوسط-عالي واجهات برمجة تطبيقات خاصة بالمنصة | يتطلب تنفيذ تدفق OAuth منفصل | أسابيع إلى شهور |
| WebView النظام | تبني جيد تجربة شبيهة بالمتصفح، مألوفة | تجربة مستخدم قياسية للمتصفح واجهة شرطية (Conditional UI) في حقول الإدخال، سلسلة مفاتيح مشتركة | قائم على المتصفح يدير المستخدمون عبر المتصفح | منخفض الحد الأدنى من الكود الأصلي | ممتاز مصمم خصيصًا لـ OAuth | أيام إلى أسابيع |
| WebView المدمج | تبني أقل يتطلب تكوينًا | دعم WebAuthn الأصلي WebKit 1.12.1+، لا توجد واجهة شرطية (Conditional UI) | تحكم محدود لا يوجد تكامل أصلي | متوسط-عالي تكوين WebView + أذونات | يتطلب تكوينًا | 1-2 أسبوع |
شرح الأبعاد:
الموصى به: WebView النظام
إذا كان تطبيقك يصادق عبر OAuth2، OIDC أو موفري تسجيل الدخول الاجتماعي (Google، GitHub، Microsoft، إلخ)، فإن WebView النظام هو الخيار الأمثل:
ASWebAuthenticationSession مصمم خصيصًا لتدفقات OAuthمثال: تستخدم تطبيقات السفر مثل kayak.com و kayak.de OAuth للمصادقة. يسمح لهم WebView النظام بالحفاظ على بنيتهم التحتية الحالية لـ OAuth مع إضافة دعم مفاتيح المرور من خلال صفحات مصادقة الويب الخاصة بهم.
الموصى به: نهج هجين
استخدم WebView النظام للمصادقة الأولية عبر OAuth، ثم WebView المدمج لجلسات ما بعد المصادقة:
متى تستخدمه: التطبيقات التي تصادق عبر OAuth ولكنها تحتاج بعد ذلك إلى عرض محتوى ويب مصادق عليه حيث تكون المعالجة المباشرة للجلسة مطلوبة.
الموصى به: التنفيذ الأصلي
هل تبني من الصفر أو لديك شاشات أصلية؟ اذهب إلى التنفيذ الأصلي بالكامل:
preferImmediatelyAvailableCredentials لعرض طبقة عرض مفتاح
المرور التلقائية عند بدء تشغيل التطبيق - حصري للتطبيقات الأصلية ويوفر أعلى معدلات
التحويلللتطبيقات الجديدة: نوصي بشدة ببناء تسجيل دخول أصلي من اليوم الأول. يؤهلك للحصول على تجربة مستخدم مثلى ويتجنب عمليات الترحيل المستقبلية من WebView إلى الأصلي.
الموصى به: ترحيل مرحلي
يسمح هذا النهج المرحلي بإجراء تحسينات تدريجية دون تعطيل المستخدمين الحاليين.
| المتطلب | أصلي | WebView النظام | WebView المدمج |
|---|---|---|---|
| ملفات Well-known (AASA/assetlinks) | مطلوب | غير مطلوب | مطلوب |
| النطاقات المرتبطة في iOS | مطلوب | غير مطلوب | مطلوب |
| مكتبة Android WebKit | لا ينطبق | غير مطلوب | مطلوب (1.12.1+) |
| معرف الطرف المعتمد (Relying Party ID) | يجب أن يطابق النطاق | يجب أن يطابق النطاق | يجب أن يطابق النطاق |
راجع القسم 5 للحصول على إرشادات تكوين مفصلة.
يتطلب اختبار مفاتيح المرور في التطبيقات الأصلية نهجًا منظمًا متعدد الطبقات. اتبع هرم الاختبار: اختبارات الوحدة (منطق معزول)، اختبارات التكامل (عملية WebAuthn على المحاكيات)، و اختبارات النظام (من البداية إلى النهاية على الأجهزة المادية).
فئات الاختبار الأساسية:
للحصول على إرشادات اختبار شاملة بما في ذلك استراتيجيات الأتمتة، والمشكلات الخاصة بالمنصة، وقائمة تحقق كاملة قبل الإطلاق.
فكر في مطالبة المستخدمين بإنشاء مفاتيح مرور بعد تسجيل الدخول التقليدي الناجح (كلمة المرور، OAuth). هذا النهج التدريجي للتحويل:
مثال: بعد تسجيل الدخول عبر OAuth باستخدام WebView النظام، أظهر مطالبة أصلية: "هل ترغب في تمكين تسجيل دخول أسرع باستخدام Face ID؟" إذا تم القبول، قم بإنشاء مفتاح مرور من خلال صفحة الويب المحملة في WebView النظام.
يعد تحديد كيفية تنفيذ مفاتيح المرور - عبر التنفيذ الأصلي، أو WebView النظام، أو WebView المدمج - خيار تصميم حاسم يؤثر على الأمان وتجربة المستخدم وتعقيد التطوير. لا توجد إجابة واحدة تناسب الجميع.
للتطبيقات القائمة على OAuth: يعد WebView النظام (ASWebAuthenticationSession، Chrome Custom Tabs) هو نقطة البداية الموصى بها. إنه يوفر دعمًا ممتازًا لـ OAuth، وأقل جهد في التنفيذ، ومشاركة تلقائية لبيانات الاعتماد.
للتطبيقات الأصلية أولاً: انتقل إلى التنفيذ الأصلي عاجلاً وليس آجلاً. يوفر تسجيل الدخول
الأصلي باستخدام مفتاح المرور تجربة المستخدم الأكثر سلاسة مع إمكانيات حصرية مثل
preferImmediatelyAvailableCredentials، والتي تتيح عرض طبقة مفتاح المرور التلقائية عند
بدء تشغيل التطبيق - وهو أمر لا يمكن لتطبيقات WebView توفيره. مع دعم iOS و Android الآن من
الدرجة الأولى لمفاتيح المرور، تُظهر النجاحات الواقعية تبنيًا عاليًا. نضجت الأدوات (بما في
ذلك SDKs مفتوحة المصدر ومكتبات المنصات) لجعل التكامل الأصلي قابلاً للتحقيق في أطر زمنية
معقولة. بينما يجب أن تكون على دراية بسياسات إدارة الأجهزة، والمزامنة عبر الأجهزة، ومقدمي
الخدمات من جهات خارجية، يمكن إدارة هذه التحديات بهندسة واختبار دقيقين. والنتيجة هي تسجيل
دخول للتطبيق يسعد المستخدمين بسهولته وسرعته مع تحسين الأمان بشكل كبير.
لمتطلبات إطار WebView المدمج: يستخدم WebView المدمج بشكل شائع في سيناريوهين واقعيين. أولاً، غالبًا ما تستخدم التطبيقات القائمة على OAuth WebView النظام لتدفق تسجيل الدخول الأولي، ثم تنتقل إلى WebView المدمج لعرض خيارات إدارة مفاتيح المرور في شاشات الإعدادات حيث يلزم التحكم في الجلسة - على الرغم من أن بعض التطبيقات تبسط هذا عن طريق الاحتفاظ بـ WebView النظام لكلا التدفقين. ثانيًا، التطبيقات التي قامت بالفعل بتضمين تدفق المصادقة الخاص بها في إطارات WebView قبل اعتماد مفاتيح المرور تواصل هذا النمط من أجل الاتساق. يتطلب WebView المدمج مع دعم WebAuthn الأصلي (AndroidX WebKit 1.12.1+) تكوينًا وإعدادًا (أذونات، صلاحيات، إعدادات WebView) ولكنه لم يعد بحاجة إلى كود جسر JavaScript مخصص. لاحظ أن الواجهة الشرطية (Conditional UI) غير مدعومة في WebView المدمج. اختر هذا النهج عند الحفاظ على أنماط المصادقة المدمجة الحالية أو عندما تحتاج إلى التحكم في الجلسة/ملفات تعريف الارتباط لشاشات ما بعد المصادقة.
في النهاية، تمثل مفاتيح المرور في التطبيقات الأصلية قفزة هائلة إلى الأمام في كل من راحة المستخدم وأمانه. سواء تم تنفيذها عبر Native أو System WebView أو Embedded WebView، فإنها تقضي على مخاطر التصيد الاحتيالي وأعباء إدارة كلمات المرور لمستخدميك. تُظهر التطبيقات الواقعية مثل تكامل مفاتيح المرور في تطبيق VicRoads الأصلي أن الأساليب الأصلية أولاً تحقق أعلى نسبة تبني ورضا للمستخدم عند تنفيذها بشكل صحيح مع ميزات مثل طبقات مفاتيح المرور التلقائية. باتباع أفضل الممارسات للمصادقة سهلة الاستخدام واختيار نهج التنفيذ الذي يتناسب مع بنية تطبيقك - الأصلي أولاً للتطبيقات الجديدة، أو WebView النظام لتدفقات OAuth، أو 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 للاختبار، تحقق من نوع
WebViewCorbado Native SDKs:
وثائق المنصة:
أدوات التحقق:
Related Articles
Passkey Tutorial: How to Implement Passkeys in Web Apps
Vincent - December 7, 2023
The High-Level Architecture of an Integrated Passkey Flow
Janina - December 21, 2022
Table of Contents