सुरक्षित पेमेंट की पुष्टि करें

किसी लेन-देन में सुरक्षित पेमेंट पुष्टि (एसपीसी) का इस्तेमाल करने के लिए, ग्राहक को ज़रूरी शर्तें पूरी करनी होंगी सबसे पहले, पुष्टि करने वाले को रजिस्टर करें. यह प्रोसेस, WebAuthn से काफ़ी मिलती-जुलती है इसके लिए, आपको रजिस्ट्रेशन प्रोसेस के दौरान पेमेंट एक्सटेंशन जोड़ना होगा.

इस लेख में, भरोसेमंद पक्षों के तौर पर काम करने वाले, कार्ड जारी करने वाले बैंक (आरपी) यह जान सकते हैं कि SPC रजिस्ट्रेशन लागू करने के लिए. उपयोगकर्ता अनुभव के बारे में ज़्यादा जानकारी यहां दी गई है पेमेंट सुरक्षित तरीके से किए जाने की पुष्टि के बारे में खास जानकारी.

सुरक्षित तरीके से पेमेंट की पुष्टि करने वाला रजिस्ट्रेशन कैसे काम करता है?

SPC को WebAuthn स्टैंडर्ड के लिए एक्सटेंशन के तौर पर बनाया गया है.

अप्रैल 2022 से, SPC सिर्फ़ उपयोगकर्ता की पुष्टि करने वाले प्लैटफ़ॉर्म पर पुष्टि करने वाले ऐप्लिकेशन के साथ काम करता है (UVPA) नहीं होगा. इसका मतलब है कि यह ज़रूरी है कि ग्राहक के पास डेस्कटॉप या लैपटॉप हो साथ में जोड़े गए पुष्टि करने वाले टूल का इस्तेमाल करें, जैसे:

  • macOS डिवाइस पर, Touch ID जैसी सुविधा अनलॉक करें
  • Windows डिवाइस पर Windows Hello

डिवाइस को रजिस्टर करें

डिवाइस के लिए भरोसा करने वाले पक्ष (आरपी) के रजिस्ट्रेशन का पालन करने के लिए, उपयोगकर्ता की पुष्टि करने की काफ़ी मज़बूत प्रक्रिया है. आरपी को यह पक्का करना होगा कि ग्राहक ने पुष्टि करने के मज़बूत तरीके का इस्तेमाल करके वेबसाइट में साइन इन किया है, ताकि खाता आसानी से हाइजैक नहीं होता. सावधान: इस प्रक्रिया में सुरक्षा की कमी 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 है.

इसके अलावा, "पेमेंट" तय करें 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 में, Authenticator रजिस्टर करने का तरीका ही जारी करने वाला बैंक या कंपनी अपनाती है.

व्यापारी/कंपनी/कारोबारी, दो तरीकों से रजिस्ट्रेशन की अनुमति दे सकते हैं:

  1. व्यापारी/कंपनी के डोमेन से दिखाए गए एचटीएमएल में मौजूद iframe टैग, एक allow एट्रिब्यूट जोड़ता है:

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

    पक्का करें कि allow एट्रिब्यूट में payment मौजूद हो और आरपी का ऑरिजिन, जिससे WebAuthn रजिस्ट्रेशन को शुरू किया जाता हो.

  2. व्यापारी/कंपनी के डोमेन से पेश किया गया पैरंट फ़्रेम दस्तावेज़, Permissions-Policy एचटीटीपी हेडर के साथ भेजा जाता है:

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

अगले चरण

भरोसेमंद पक्ष के साथ डिवाइस के रजिस्टर हो जाने के बाद, ग्राहक व्यापारी/कंपनी की वेबसाइट पर जाकर, पेमेंट की पुष्टि कर सकता है. इसके लिए, ग्राहक सुरक्षित तरीके से पेमेंट करने की पुष्टि कर सकता है.