Güvenli Ödeme Onayı Kaydet

Bir işlemde Güvenli Ödeme Onayı'nı (SPC) kullanmak için müşterinin önce bir kimlik doğrulayıcı kaydetmesi gerekir. Bu süreç, ödeme uzantısı eklenmiş WebAuthn kayıt sürecine çok benzer.

Bu makalede, güvenen taraf (RP) olarak hareket eden veren bankalar, SPC kaydını nasıl uygulayacaklarını öğrenebilir. Kullanıcı deneyimi, Güvenli Ödeme Onayı'na genel bakış bölümünde daha ayrıntılı olarak açıklanmıştır.

Güvenli Ödeme Onayı kaydı nasıl çalışır?

SPC, WebAuthn standardının bir uzantısı olarak tasarlanmıştır.

Nisan 2022'den itibaren SPC yalnızca masaüstünde Kullanıcı Doğrulama Platformu Kimlik Doğrulayıcılarını (UVPA) desteklemektedir. Bu, müşterinin aşağıdakiler gibi yerleşik bir kimlik doğrulayıcıya sahip bir masaüstü veya dizüstü bilgisayarda olması gerektiği anlamına gelir:

  • macOS cihazlarda Touch ID dahil kilidi açma özelliği
  • Windows cihazda Windows Hello

Cihazı kaydetme

Güvenen tarafın (RP) bir cihazı kaydettirmesi, yeterince güçlü bir kullanıcı doğrulama sürecini izlemelidir. Hesabın ele geçirilmesini önlemek için RP, müşterinin web sitesinde güçlü bir kimlik doğrulama yöntemiyle oturum açtığından emin olmalıdır. Dikkatli olun: Bu süreçte güvenliğin olmaması SPC'yi de riske atar.

RP, müşterinin kimliğini başarıyla doğruladıktan sonra müşteri cihaz kaydedebilir.

Güvenen tarafın web sitesinde tipik kayıt iş akışı

Özellik algılama

Kısıtlanmış taraf, müşteriden cihazı kaydettirmesini istemeden önce tarayıcının SPC'yi destekleyip desteklemediğini kontrol etmelidir.

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

Kimlik doğrulayıcı kaydetme

Bir cihazı SPC'ye kaydettirmek için aşağıdaki şartlarla birlikte WebAuthn kayıt sürecini uygulayın:

  • Platform kimlik doğrulayıcısı gereklidir: authenticatorSelection.authenticatorAttachment, platform olmalıdır.
  • Kullanıcı doğrulaması gereklidir: authenticatorSelection.userVerification, required'dır.
  • Bulanık kimlik bilgileri (yerleşik anahtarlar) gereklidir: authenticatorSelection.residentKey, required olmalıdır.

Ayrıca, isPayment: true ile bir "ödeme" uzantısı belirtin. Yukarıdaki koşulları karşılamadan bu uzantıyı belirtmek istisna oluşturur

Diğer bazı noktalar:

  • rp.id: RP'nin ana makine adıdır. Alan adının eTLD+1 bölümü, kayıtlı olduğu yerle eşleşmelidir. eTLD+1 ile eşleşen alanlarda kimlik doğrulama için kullanılabilir.
  • user.id: Kullanıcı tanımlayıcının ikili ifadesi. Kimlik doğrulama başarılı olduğunda aynı tanımlayıcı döndürülür. Bu nedenle, RP kart sahibinin tutarlı bir kullanıcı tanımlayıcısını sağlamalıdır.
  • excludeCredentials: RP'nin aynı kimlik doğrulayıcıyı kaydettirmesini önlemek için bir kimlik bilgisi dizisi.

WebAuthn kayıt süreci hakkında daha fazla bilgi için webauthn.guide adresini ziyaret edin.

Örnek kayıt kodu:

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

Kayıt işlemi başarıyla tamamlandıktan sonra RP, doğrulama için sunucuya göndereceği bir kimlik bilgisi alır.

Kaydı doğrulama

Sunucuda, RP kimlik bilgisini doğrulamalı ve daha sonra kullanmak üzere ortak anahtarı saklamalıdır. Sunucu tarafı kayıt işlemi, sıradan bir WebAuthn kaydıyla aynıdır. SPC'ye uymak için başka bir işlem gerekmez.

Bir iFrame içinden kayıt

Ödeme yapan kullanıcı, cihazını RP'ye (ödemeyi veren kuruluş) kaydetmediyse satıcının web sitesine kaydolabilir. RP, satın alma işlemi sırasında başarılı bir kimlik doğrulamasından sonra, ödeme yapan kullanıcıdan cihazını bir iframe içinden dolaylı olarak kaydettirmesini isteyebilir.

Ödeme sırasında satıcının web sitesinde kayıt iş akışı.

Bunun için satıcı veya ebeveyn, İzinler Politikası'nı kullanarak bir iframe içinde bu işleme açıkça izin vermelidir. Veren kuruluş, iframe içinde kimlik doğrulayıcıyı kaydetmek için aynı adımları uygular.

Satıcının kayda izin vermesi için iki yaklaşım vardır:

  1. Satıcı alanından sunulan HTML'deki iFrame etiketi bir allow özelliği ekler:

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

    allow özelliğinin payment ve WebAuthn kaydını çağıran RP kaynağını içerdiğinden emin olun.

  2. Ana çerçeve belgesi (satıcı alanından yayınlanır), Permissions-Policy HTTP başlığıyla gönderilir:

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

Sonraki adımlar

Bir cihaz güvenen tarafa kaydedildikten sonra müşteri, Güvenli Ödeme Onayı'nı kullanarak satıcının web sitesinde ödemeleri onaylayabilir.