يمكن الآن لواجهة برمجة التطبيقات WebOTP API تلقّي كلمات المرور التي تُستخدَم لمرة واحدة من داخل إطارات iframe.
تُستخدَم عادةً كلمات المرور لمرة واحدة (OTP) المرسَلة عبر الرسائل القصيرة SMS لإثبات ملكية أرقام الهواتف، مثلاً كخطوة ثانية في المصادقة أو لإثبات ملكية الدفعات على الويب. ومع ذلك، فإنّ التبديل بين المتصفّح وتطبيق الرسائل القصيرة لنسخ رمز OTP ولصقه أو إدخاله يدويًا يسهّل ارتكاب الأخطاء ويزيد من صعوبة تجربة المستخدم.
تمنح واجهة برمجة التطبيقات WebOTP API المواقع الإلكترونية إمكانية الحصول على كلمة المرور لمرة واحدة من رسالة قصيرة وإدخالها تلقائيًا في النموذج للمستخدمين بنقرة واحدة فقط بدون تبديل التطبيق. يتم تنسيق الرسالة القصيرة بشكل خاص وربطها بالمصدر، ما يقلل من احتمالات سرقة كلمة المرور لمرة واحدة من خلال المواقع الإلكترونية المخادعة أيضًا.
كانت إحدى حالات الاستخدام التي لم يتمّت إتاحتها بعد في WebOTP هي استهداف مصدر داخل إطار iframe. ويُستخدَم هذا الإجراء عادةً لتأكيد الدفع، خاصةً باستخدام 3D Secure. بعد أن أصبحت WebOTP API تتضمّن التنسيق المشترَك للسماح بإطارات div مضمّنة من مصادر مختلفة، أصبحت الآن توفّر رسائل OTP مرتبطة بنطاقات متداخلة اعتبارًا من الإصدار 91 من Chrome.
آلية عمل واجهة برمجة التطبيقات WebOTP
إنّ WebOTP API نفسها بسيطة بما يكفي:
…
const otp = await navigator.credentials.get({
otp: { transport:['sms'] }
});
…
يجب تنسيق رسالة SMS باستخدام رموًز صالحة لمرة واحدة ومرتبطة بالمصدر.
Your OTP is: 123456.
@web-otp.glitch.me #12345
يُرجى ملاحظة أنّ السطر الأخير يحتوي على المصدر الذي سيتم ربطه به مسبوقًا برمز @
يليه رمز OTP مسبوقًا برمز #
.
عند وصول الرسالة النصية، ينبثق شريط معلومات يطلب من المستخدم
إثبات ملكية رقم هاتفه. بعد أن ينقر المستخدم على الزر Verify
، يعيد المتصفّح توجيه رمز OTP تلقائيًا إلى الموقع الإلكتروني ويحلّ navigator.credentials.get()
. يمكن للموقع الإلكتروني بعد ذلك استخراج رمز OTP وإكمال
عملية إثبات الملكية.
تعرَّف على أساسيات استخدام WebOTP في مقالة إثبات ملكية أرقام الهواتف على الويب باستخدام واجهة برمجة التطبيقات WebOTP API.
حالات استخدام إطارات iframe المتعددة المصادر
إنّ إدخال كلمة مرور صالحة لمرة واحدة في نموذج داخل إطار iframe من مصدر مختلف هو أمر شائع في سيناريوهات الدفع. تتطلّب بعض جهات إصدار بطاقات الائتمان خطوة تحقّق إضافية لتحقق من هوية المدفوع له. يُعرف هذا الإجراء باسم 3D Secure، ويتم عادةً عرض النموذج في إطار iframe على الصفحة نفسها كما لو كان جزءًا من عملية الدفع.
على سبيل المثال:
- يزور مستخدم الموقع الإلكتروني
shop.example
لشراء حذاء باستخدام بطاقة ائتمان. - بعد إدخال رقم بطاقة الائتمان، يعرض مقدّم خدمة الدفع المدمج
bank.example
نموذجًا في إطار iframe يطلب من المستخدم إثبات ملكية رقم هاتفه للدفع بسرعة. - تُرسِل
bank.example
رسالة قصيرة إلى المستخدم تتضمّن كلمة مرور صالحة لمرة واحدة (OTP) كي يتمكّن من إدخالها لإثبات هويته.
كيفية استخدام WebOTP API من إطار iframe متعدد المصادر
لاستخدام WebOTP API من داخل إطار iframe من مصدر مختلف، عليك تنفيذ أمرين:
- أضِف تعليقات توضيحية على كلّ من مصدر الإطار العلوي ومصدر iframe في محتوى الرسالة القصيرة.
- عليك ضبط سياسة الأذونات للسماح لإطار iframe من مصدر مختلف بتلقّي رمز OTP من المستخدم مباشرةً.
يمكنك تجربة الإصدار التجريبي بنفسك على الرابط https://web-otp-iframe-demo.stackblitz.io.
إضافة تعليقات توضيحية إلى مصادر البيانات المرتبطة بالرسالة النصية SMS
عند استدعاء WebOTP API من داخل إطار iframe، يجب أن تشمل الرسالة النصية عبر الرسائل القصيرة
مصدر الإطار العلوي مسبوقًا برمز @
متبوعًا برمز OTP مسبوقًا برمز #
متبوعًا بمصدر إطار iframe مسبوقًا برمز @
.
@shop.example #123456 @bank.exmple
ضبط سياسة الأذونات
لاستخدام WebOTP في إطار iframe من مصدر مختلف، على مُدرِج المحتوى منح إذن الوصول إلى واجهة برمجة التطبيقات هذه من خلال سياسة أذونات بيانات اعتماد otp لتجنُّب أي سلوك غير مقصود. بشكل عام، هناك طريقتان لتحقيق هذا الهدف:
- من خلال عنوان HTTP:
Permissions-Policy: otp-credentials=(self "https://bank.example")
- من خلال سمة iframe
allow
:
<iframe src="https://bank.example/…" allow="otp-credentials"></iframe>
اطّلِع على مزيد من الأمثلة عن كيفية تحديد سياسة أذونات .
المحاذير
مستويات التداخل
في الوقت الحالي، لا يتيح Chrome سوى طلبات WebOTP API من إطارات iframe من مصادر متعددة التي لها مصدر فريد واحد فقط في سلسلة أسلافها. في السيناريوهات التالية:
- a.com -> b.com
- a.com -> b.com -> b.com
- a.com -> a.com -> b.com
- a.com -> b.com -> c.com
إنّ استخدام WebOTP في b.com متاح، ولكنّ استخدامه في c.com غير متاح.
يُرجى العلم أنّ السيناريو التالي غير متاح أيضًا بسبب عدم توفّر الطلب ومع تعقيدات تجربة المستخدم.
- a.com -> b.com -> a.com (يُجري طلبات بيانات من واجهة برمجة التطبيقات WebOTP API)
إمكانية التشغيل التفاعلي
على الرغم من أنّ محرّكات المتصفّحات غير Chromium لا تُنفِّذ WebOTP API،
يستخدم Safari تنسيق الرسائل القصيرة
نفسه مع ميزة input[autocomplete="one-time-code"]
. في Safari، بعد وصول رسالة
قصيرة تتضمّن تنسيق رمز مُحدَّد المصدر لمرة واحدة مع مصدر
مطابق، تقترح لوحة المفاتيح إدخال الرمز المُحدَّد لمرّة واحدة في حقل الإدخال.
اعتبارًا من نيسان (أبريل) 2021، يتيح Safari استخدام iframe مع تنسيق SMS فريد باستخدام
%
.
ومع ذلك، بما أنّ مناقشة المواصفات انتهت باستخدام @
بدلاً من ذلك، نأمل أن يؤدي
تنفيذ تنسيق الرسائل القصيرة المتوافق إلى توحيد المعايير.
ملاحظات
إنّ ملاحظاتك قيّمة جدًا في تحسين WebOTP API، لذا ننصحك بتجربة هذه الواجهة وإعلامنا برأيك.
الموارد
- إثبات ملكية أرقام الهواتف على الويب باستخدام واجهة برمجة التطبيقات Web OTP API
- أفضل الممارسات المتعلّقة بنموذج كلمة المرور لمرة واحدة (OTP) عبر الرسائل القصيرة
- WebOTP API
- الرموز المخصّصة لمصدر معيّن والتي تُستخدم لمرة واحدة ويتم إرسالها عبر الرسائل القصيرة SMS
الصورة مقدمة من rupixen.com على Unsplash