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

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

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

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

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

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

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

تسجيل الجهاز

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

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

سير العمل المعتاد للتسجيل على الموقع الإلكتروني للطرف الموثوق به

رصد الميزات

قبل أن تطلب من العميل تسجيل الجهاز، يجب أن يتأكّد الجهة المحظورة من أنّ المتصفّح يتوافق مع وحدة التحكّم في الملفات (SPC).

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.
  }
});

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

لتسجيل جهاز في SPC، اتّبِع عملية تسجيل 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 العادية. ولا يلزم أي إجراء إضافي للامتثال لمعيار SPC.

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

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

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

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

تتوفّر طريقتان يتيح للتاجر السماح بالتسجيل:

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

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

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

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

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

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

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