یک تأییدیه پرداخت امن ثبت کنید

برای استفاده از تأیید پرداخت امن (SPC) در تراکنش، مشتری باید ابتدا یک احراز هویت ثبت کند. این فرآیند با افزودن پسوند پرداخت بسیار شبیه به فرآیند ثبت WebAuthn است.

در این مقاله، بانک‌های صادرکننده که به عنوان طرف‌های متکی (RPs) عمل می‌کنند، می‌توانند نحوه اجرای ثبت SPC را بیاموزند. تجربه کاربر در نمای کلی تأیید پرداخت امن توضیح داده شده است.

ثبت نام تأیید پرداخت امن چگونه کار می کند؟

SPC به عنوان یک افزونه برای استاندارد WebAuthn ساخته شده است.

از آوریل 2022، SPC فقط از تأییدکننده‌های پلتفرم تأییدکننده کاربر (UVPA) روی دسک‌تاپ پشتیبانی می‌کند. این بدان معناست که مشتری باید روی دسکتاپ یا لپ‌تاپ با احراز هویت تعبیه‌شده مانند:

  • قابلیت باز کردن قفل از جمله Touch ID در دستگاه macOS
  • Windows Hello در یک دستگاه ویندوز

دستگاه را ثبت کنید

ثبت دستگاه توسط طرف متکی (RP) باید از یک فرآیند تأیید کاربر به اندازه کافی قوی پیروی کند. RP باید مطمئن شود که مشتری با استفاده از احراز هویت قوی وارد وب سایت شده است تا حساب به راحتی ربوده نشود. مراقب باشید: کمبود امنیت در این فرآیند SPC را نیز در معرض خطر قرار می دهد.

هنگامی که RP با موفقیت مشتری را تأیید کرد، مشتری اکنون می تواند یک دستگاه را ثبت کند.

گردش کار ثبت نام معمولی در وب سایت طرف متکی

تشخیص ویژگی

قبل از درخواست از مشتری برای ثبت دستگاه، 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 را با شرایط زیر دنبال کنید:

  • Authenticator پلت فرم مورد نیاز است: authenticatorSelection.authenticatorAttachment platform است.
  • تأیید کاربر مورد نیاز است: authenticatorSelection.userVerification required است.
  • اعتبارنامه های قابل کشف (کلیدهای ساکن) مورد نیاز است: authenticatorSelection.residentKey required است.

علاوه بر این، یک پسوند «پرداخت» را با isPayment: true . مشخص کردن این پسوند بدون رعایت الزامات فوق یک استثنا ایجاد می کند

چند نکته دیگر:

  • rp.id : نام میزبان RP. قسمت eTLD+1 دامنه باید با جایی که در حال ثبت است مطابقت داشته باشد. می توان از آن برای احراز هویت در دامنه هایی که با eTLD+1 مطابقت دارند استفاده کرد.
  • user.id : عبارت باینری از شناسه کاربر. همان شناسه پس از احراز هویت موفقیت‌آمیز بازگردانده می‌شود، بنابراین RP باید یک شناسه کاربر ثابت دارنده کارت ارائه کند.
  • excludeCredentials : آرایه ای از اعتبارنامه ها به طوری که RP بتواند از ثبت هویت یکسان اجتناب کند.

برای اطلاعات بیشتر در مورد فرآیند ثبت 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.
}

پس از ثبت نام موفقیت آمیز، RP اعتبارنامه ای را برای ارسال به سرور برای تأیید دریافت می کند.

تایید ثبت نام

در سرور، RP باید اعتبار را تأیید کند و کلید عمومی را برای استفاده بعدی نگه دارد. فرآیند ثبت نام در سمت سرور مانند یک ثبت نام معمولی WebAuthn است. هیچ چیز اضافی برای مطابقت با SPC مورد نیاز نیست.

ثبت نام از داخل iframe

اگر پرداخت کننده دستگاه خود را در RP (صادرکننده پرداخت) ثبت نکرده باشد، پرداخت کننده می تواند در وب سایت تاجر ثبت نام کند. پس از احراز هویت موفقیت‌آمیز در حین خرید، RP می‌تواند از پرداخت‌کننده درخواست کند دستگاه خود را به‌طور غیرمستقیم و از داخل یک 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")
    

مراحل بعدی

هنگامی که دستگاهی در طرف متکی ثبت شد، مشتری می‌تواند با استفاده از تأییدیه پرداخت امن، پرداخت‌ها را در وب‌سایت تاجر تأیید کند.