تسجيل تأكيد الدفع الآمن

لاستخدام ميزة "تأكيد الدفع الآمن" (SPC) في معاملة، على العميل أولاً تسجيل معتمِد. تتشابه هذه العملية إلى حد كبير مع عملية تسجيل WebAuthn ، مع إضافة إضافة ميزة الدفع.

في هذه المقالة، يمكن للبنوك المُصدِرة التي تعمل بصفتها جهات مُعتمَدة (RP) التعرّف على كيفية تنفيذ تسجيل SPC. يمكنك الاطّلاع على مزيد من المعلومات عن تجربة المستخدم في نظرة عامة على ميزة "تأكيد الدفع الآمن".

كيف يعمل تسجيل ميزة "تأكيد الدفع الآمن"؟

تم إنشاء بروتوكول SPC كإضافة إلى معيار WebAuthn.

اعتبارًا من نيسان (أبريل) 2022، لا يتيح "البرنامج المشترك لأمان المنصات" سوى أدوات مصادقة منصّة التحقّق من المستخدمين (UVPA) على أجهزة الكمبيوتر المكتبي. وهذا يعني أنّه يجب أن يستخدم العميل جهاز كمبيوتر مكتبي أو كمبيوتر محمول مزوّدًا بمصادق مثبّت، مثل:

  • ميزة فتح الجهاز، بما في ذلك ميزة Touch ID على جهاز macOS
  • ميزة Windows Hello على جهاز Windows

تسجيل الجهاز

يجب أن يتّبع الطرف الموثوق به (RP) عملية تسجيل جهاز معيّن تهدف إلى إثبات هوية المستخدم بشكلٍ قوي بما يكفي. على مقدّم الخدمة التأكّد من تسجيل العميل الدخول إلى الموقع الإلكتروني باستخدام مصادقة قوية كي لا يتم اختراق حسابه بسهولة. يُرجى الانتباه إلى أنّ عدم اتّباع إجراءات الأمان في هذه العملية يعرض ميزة "مراقبة الجودة في الوقت الفعلي" للخطر أيضًا.

بعد أن يُثبِت مقدّم الخدمة هوية العميل بنجاح، يمكن للعميل الآن تسجيل جهاز.

سير العمل المعتاد للتسجيل على الموقع الإلكتروني للجهة المُعتمَدة

رصد الميزات

قبل أن يطلب مقدّم الخدمة من العميل تسجيل الجهاز، عليه التأكّد من أنّ المتصفّح يتوافق مع ميزة "التسجيل من نقطة البيع".

const isSecurePaymentConfirmationSupported = async () => {
  if (!'PaymentRequest' in window) {
    return [false, 'Payment Request API is not supported'];
  }

  try {
    // The data below is the minimum required to create the request and
    // check if a payment can be made.
    const supportedInstruments = [
      {
        supportedMethods: "secure-payment-confirmation",
        data: {
          // RP's hostname as its ID
          rpId: 'rp.example',
          // A dummy credential ID
          credentialIds: [new Uint8Array(1)],
          // A dummy challenge
          challenge: new Uint8Array(1),
          instrument: {
            // Non-empty display name string
            displayName: ' ',
            // Transparent-black pixel.
            icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wlseKgAAAABJRU5ErkJggg==',
          },
          // A dummy merchant origin
          payeeOrigin: 'https://non-existent.example',
        }
      }
    ];

    const details = {
      // Dummy shopping details
      total: {label: 'Total', amount: {currency: 'USD', value: '0'}},
    };

    const request = new PaymentRequest(supportedInstruments, details);
    const canMakePayment = await request.canMakePayment();
    return [canMakePayment, canMakePayment ? '' : 'SPC is not available'];
  } catch (error) {
    console.error(error);
    return [false, error.message];
  }
};

isSecurePaymentConfirmationSupported().then(result => {
  const [isSecurePaymentConfirmationSupported, reason] = result;
  if (isSecurePaymentConfirmationSupported) {
    // Display the payment button that invokes SPC.
  } else {
    // Fallback to the legacy authentication method.
  }
});

تسجيل تطبيق مصادقة

لتسجيل جهاز في خدمة "الوصول المُدار إلى الخدمات"، اتّبِع عملية تسجيل WebAuthn مع مراعاة الخطوات التالية:

  • يجب استخدام معتمِد المصادقة في النظام الأساسي: authenticatorSelection.authenticatorAttachment هو platform.
  • يجب إثبات هوية المستخدم: authenticatorSelection.userVerification هو required.
  • يجب توفُّر بيانات الاعتماد القابلة للاكتشاف (مفاتيح الجهاز) على النحو التالي: authenticatorSelection.residentKey هي required.

بالإضافة إلى ذلك، حدِّد إضافة "الدفع" باستخدام isPayment: true. سيؤدي تحديد هذه الإضافة بدون استيفاء المتطلبات أعلاه إلى طرح استثناء.

في ما يلي بعض التحذيرات الأخرى:

  • rp.id: اسم مضيف الجهة المحظورة يجب أن يتطابق جزء النطاق العلوي العام (eTLD)+1 من النطاق مع المكان الذي يتم تسجيله فيه. ويمكن استخدامه للقيام بالمصادقة على النطاقات التي تتطابق مع eTLD+1.
  • user.id: تعبير ثنائي لمعرّف المستخدِم سيتم عرض المعرّف نفسه في حال نجاح المصادقة، لذا على مقدّم الخدمة تقديم معرّف مستخدم متّسق لحائز البطاقة.
  • excludeCredentials: مصفوفة من بيانات الاعتماد حتى يتمكّن مقدّم الخدمة من تجنُّب تسجيل معرّف الهوية نفسه.

لمزيد من المعلومات عن عملية تسجيل WebAuthn، يُرجى الرجوع إلى webauthn.guide.

مثال على رمز التسجيل:

const options = {
  challenge: new Uint8Array([21...]),
  rp: {
    id: "rp.example",
    name: "Fancy Bank",
  },
  user: {
    id: new Uint8Array([21...]),
    name: "jane.doe@example.com",
    displayName: "Jane Doe",
  },
  excludeCredentials: [{
    id: new Uint8Array([21...]),
    type: 'public-key',
    transports: ['internal'],
  }, ...],
  pubKeyCredParams: [{
    type: "public-key",
    alg: -7 // "ES256"
  }, {
    type: "public-key",
    alg: -257 // "RS256"
  }],
  authenticatorSelection: {
    userVerification: "required",
    residentKey: "required",
    authenticatorAttachment: "platform",
  },
  timeout: 360000,  // 6 minutes

  // Indicate that this is an SPC credential. This is currently required to
  // allow credential creation in an iframe, and so that the browser knows this
  // credential relates to SPC.
  extensions: {
    "payment": {
      isPayment: true,
    }
  }
};

try {
  const credential = await navigator.credentials.create({ publicKey: options });
  // Send new credential info to server for verification and registration.
} catch (e) {
  // No acceptable authenticator or user refused consent. Handle appropriately.
}

بعد التسجيل بنجاح، يتلقّى مقدّم طلب المصادقة بيانات اعتماد لإرسالها إلى الخادم لإثبات صحتها.

إثبات صحة التسجيل

على الخادم، يجب أن يُثبت مقدّم الخدمة صحة بيانات الاعتماد ويحتفظ بالمفتاح العام ل استخدامه لاحقًا. عملية التسجيل من جهة الخادم هي نفسها عملية تسجيل WebAuthn العادية. ليس عليك اتّخاذ أي إجراء إضافي للامتثال لسياسة الخصوصية.

التسجيل من داخل إطار iframe

إذا لم يسجِّل المدفِّع جهازه لدى مُصدِّر بطاقة الدفع، يمكنه تسجيله على الموقع الإلكتروني للتاجر. بعد المصادقة بنجاح أثناء عملية شراء، يمكن لمسؤول المعالجة أن يطلب من المسؤول عن الدفع تسجيل جهازه بشكل غير مباشر من داخل إطار iframe.

سير عمل التسجيل على موقع تاجر إلكتروني أثناء الدفع

لإجراء ذلك، على التاجر أو أحد الوالدَين السماح صراحةً بهذا الإجراء ضمن ملف vimeo iframe باستخدام سياسة الأذونات. يتّبع المُصدِر الخطوات نفسها لتسجيل معرّف مصادقة داخل إطار iframe.

هناك طريقتان للسماح للتاجر بالتسجيل:

  1. تضيف علامة iframe في ملف HTML الذي يتم عرضه من نطاق التاجر سمة allow:

    <iframe name="iframe" allow="payment https://spc-rp.glitch.me"></iframe>
    

    تأكَّد من أنّ سمة allow تحتوي على payment ومصدر مقدّم الخدمة الذي يُنشئ عملية تسجيل WebAuthn.

  2. يتم إرسال مستند الإطار الرئيسي (الذي يتم عرضه من نطاق التاجر) باستخدام عنوان HTTP‏ Permissions-Policy:

    Permissions-Policy: payment=(self "https://spc-rp.glitch.me")
    

الخطوات التالية

بعد تسجيل جهاز لدى الجهة المُعتمَدة، يمكن للعميل تأكيد الدفعات على الموقع الإلكتروني للتاجر باستخدام ميزة "تأكيد الدفع الآمن".