רישום אישור של תשלום מאובטח

כדי להשתמש ב'אישור תשלום מאובטח' (SPC) בעסקה, הלקוח צריך קודם כול רושמים מאמת חשבונות. התהליך הזה דומה מאוד לתהליך של WebAuthn תהליך הרשמה, עם תוספת של הארכת תשלום.

במאמר הזה, מנפיקים בנקים שפועלים כצדדים סומכים (RP) יכולים ללמוד כדי להטמיע רישום SPC. חוויית המשתמש מוסברת בפירוט סקירה כללית של אישור תשלום מאובטח

איך פועלת ההרשמה לאישור תשלום מאובטח?

SPC בנוי כהרחבה לתקן WebAuthn.

החל מאפריל 2022, ב-SPC יש תמיכה רק בכלים לאימות פלטפורמות לאימות משתמשים (UVPA) במחשב. כלומר, הלקוח צריך להשתמש במחשב שולחני או במחשב נייד באמצעות מאמת מוטמע כמו:

  • תכונה לביטול נעילה כולל Touch ID במכשיר macOS
  • Windows Hello במכשיר Windows

רישום המכשיר

רישום המכשיר על ידי הגורם הנסמך תהליך אימות משתמש מספיק חזק. הגורם המוגבל (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 לפי דרישות:

  • צריך להגדיר את מאמת הפלטפורמה: authenticatorSelection.authenticatorAttachment היא platform.
  • צריך לאמת את המשתמש: authenticatorSelection.userVerification היא required.
  • נדרשים פרטי כניסה שניתנים לגילוי (מפתחות תושבות): authenticatorSelection.residentKey היא required.

בנוסף, מציינים 'תשלום' התוסף עם isPayment: true. ציון תוסף זה, מבלי לעמוד בדרישות שלמעלה, יגרום לחריגה

כמה נקודות נוספות:

  • rp.id: שם המארח של הגורם המוגבל. החלק 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")
    

השלבים הבאים

לאחר שרושמים מכשיר לצד הנסמך, הלקוח יכול לאשר תשלומים באתר של המוכר באמצעות אישור תשלום מאובטח.