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

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

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

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

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

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

  • ميزة فتح القفل، بما في ذلك رقم التعريف باللمس على جهاز يعمل بنظام التشغيل macOS
  • Windows Hello على جهاز Windows

تسجيل الجهاز

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

بعد مصادقة الجهة المحظورة بنجاح للعميل، يمكن للعميل الآن تسجيل الجهاز.

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

رصد الميزات

قبل أن تطلب من العميل تسجيل الجهاز، يجب أن يتحقّق الجهة المحظورة من أن المتصفّح يتوافق مع 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.

عليك أيضًا تحديد إضافة "payment" باستخدام 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 وأصل الجهة المحظورة التي تستدعي تسجيل WebAuthn.

  2. يتم إرسال مستند الإطار الرئيسي (المقدَّم من نطاق التاجر) مع عنوان HTTP يتضمّن العنصر Permissions-Policy:

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

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

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