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.
Ö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.
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:
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ğininpayment
ve WebAuthn kaydını çağıran RP kaynağını içerdiğinden emin olun.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.
- Güvenli Ödeme Onayı ile kimlik doğrulama hakkında bilgi edinin
- Güvenli Ödeme Onayı'na genel bakışı okuyun.