Bu belgede, WebAuthn'de userVerification
nedir ve geçiş anahtarı oluşturma veya kimlik doğrulama sırasında userVerification
belirtildiğinde ortaya çıkan tarayıcı davranışları açıklanmaktadır.
WebAuthn'de "kullanıcı doğrulaması" nedir?
Geçiş anahtarları, ortak anahtar kriptografisi üzerine kuruludur. Geçiş anahtarı oluşturduğunuzda ortak ve özel anahtardan oluşan bir anahtar çifti oluşturulur. Özel anahtar, geçiş anahtarı sağlayıcı tarafından saklanır. Ortak anahtar ise saklanmak üzere güvenen tarafın (RP) sunucusuna döndürülür. Sunucu, eşleştirilmiş ortak anahtarı kullanarak aynı geçiş anahtarıyla imzalanmış bir imzayı doğrulayarak kullanıcının kimliğini doğrulayabilir. Ortak anahtar kimlik bilgisindeki "kullanıcı mevcut" (UP) işareti, kimlik doğrulama sırasında cihazla etkileşimde bulunulduğunu kanıtlar.
Kullanıcı doğrulaması, kullanıcı varlığı doğrulamasında olduğu gibi sadece bir kişinin değil, kimlik doğrulama sırasında doğru kişinin bulunduğunu onaylamayı amaçlayan isteğe bağlı bir güvenlik katmanıdır. Akıllı telefonlarda bu işlem genellikle biyometrik, PIN veya şifre gibi ekran kilidi mekanizması kullanılarak yapılır. Kullanıcı doğrulaması yapılıp yapılmadığı, geçiş anahtarı kaydı ve kimlik doğrulama sırasında kimlik doğrulayıcı verilerinde döndürülen "UV" işaretinde bildirilir.


UP ve UV sunucuda nasıl doğrulanır?
Kullanıcı varlığı (UP) ve kullanıcı tarafından doğrulandı (UV) Boole işaretleri, kimlik doğrulayıcı verileri alanında sunucuya bildirilir. Kimlik doğrulama sırasında, kimlik doğrulayıcı veri alanının içeriği, depolanan ortak anahtar kullanılarak imza doğrulanarak onaylanabilir. İmza geçerli olduğu sürece sunucu, işaretleri gerçek olarak kabul edebilir.

Geçiş anahtarı kaydı ve kimlik doğrulama sırasında sunucu, gereksinime bağlı olarak UP işaretinin true
veya false
, UV işaretinin ise true
veya false
olup olmadığını incelemelidir.
userVerification
parametresini belirtme
WebAuthn spesifikasyonuna göre RP, hem kimlik bilgisi oluşturma hem de onaylama sırasında userVerification
parametresiyle kullanıcı doğrulaması isteyebilir. 'preferred'
, 'required'
veya 'discouraged'
değerlerini kabul eder. Bu değerler sırasıyla şu anlamlara gelir:
'preferred'
(varsayılan): Cihazda kullanıcı doğrulama yöntemi kullanmak tercih edilir ancak kullanılamıyorsa atlanabilir. Yanıt kimlik bilgisi, kullanıcı doğrulaması yapıldıysatrue
UV işareti değerini, UV yapılmadıysafalse
değerini içerir.'required'
: Cihazda bulunan bir kullanıcı doğrulama yönteminin çağrılması gerekir. Böyle bir dosya yoksa istek yerel olarak başarısız olur. Bu durumda, yanıt kimlik bilgisi her zaman UV işaretitrue
olarak ayarlanmış şekilde döndürülür.'discouraged'
: Kullanıcı doğrulama yöntemi kullanılması önerilmez. Ancak cihaza bağlı olarak kullanıcı doğrulaması yine de yapılabilir ve UV işaretitrue
veyafalse
içerebilir.
Geçiş anahtarı oluşturmaya yönelik örnek kod:
const publicKeyCredentialCreationOptions = {
// ...
authenticatorSelection: {
authenticatorAttachment: 'platform',
residentKey: 'required',
requireResidentKey: true,
userVerification: 'preferred'
}
};
const credential = await navigator.credentials.create({
publicKey: publicKeyCredentialCreationOptions
});
Geçiş anahtarı kimlik doğrulaması için örnek kod:
const publicKeyCredentialRequestOptions = {
challenge: /* Omitted challenge data... */,
rpId: 'example.com',
userVerification: 'preferred'
};
const credential = await navigator.credentials.get({
publicKey: publicKeyCredentialRequestOptions
});
userVerification
için hangi seçeneği tercih etmelisiniz?
Kullanmanız gereken userVerification
değeri, uygulama gereksinimlerinizin yanı sıra kullanıcı deneyimi ihtiyaçlarınıza bağlıdır.
userVerification='preferred'
ne zaman kullanılır?
Koruma yerine kullanıcı deneyimine öncelik veriyorsanız userVerification='preferred'
seçeneğini kullanın.
Kullanıcı doğrulaması, korumadan daha fazla sorun yaratan bir ortam olabilir. Örneğin, Touch ID'nin kullanılamadığı macOS'te (cihaz desteklemediği, devre dışı bırakıldığı veya clamshell modunda olduğu için) kullanıcıdan bunun yerine sistem şifresini girmesi istenir. Bu durum, kullanıcıların kimlik doğrulama sürecini tamamen bırakmasına neden olabilir. Sürtünmeyi ortadan kaldırmak sizin için daha önemliyse userVerification='preferred'
simgesini kullanın.

userVerification='preferred'
ile kullanıcı doğrulaması başarılı bir şekilde gerçekleştirilirse UV işareti true
, kullanıcı doğrulaması atlanırsa false
olur. Örneğin, Touch ID'nin kullanılamadığı macOS'te kullanıcıdan kullanıcı doğrulamasını atlamak için bir düğmeyi tıklamasını ister ve ortak anahtar kimlik bilgisi bir false
UV işareti içerir.
UV işareti, risk analizinizde bir sinyal olarak kullanılabilir. Oturum açma denemesi, diğer faktörler nedeniyle riskli görünüyorsa kullanıcı doğrulaması yapılmadıysa kullanıcıya ek oturum açma sorgulamaları sunabilirsiniz.
userVerification='required'
ne zaman kullanılır?
Hem UP hem de UV'nin kesinlikle gerekli olduğunu düşünüyorsanız userVerification='required'
kullanın.
Bu seçeneğin dezavantajı, kullanıcının oturum açarken daha fazla zorluk yaşayabilmesidir. Örneğin, Touch ID'nin kullanılamadığı macOS'te kullanıcıdan sistem şifresini girmesi istenir.
userVerification='required'
ile kullanıcı doğrulamasının cihazda yapılmasını sağlayabilirsiniz. Sunucunun, UV işaretinin true
olduğunu doğruladığından emin olun.
Sonuç
Geçiş anahtarı kullanan taraflar, kullanıcı doğrulamadan yararlanarak cihaz sahibinin oturum açma olasılığını ölçebilir. Yedek oturum açma mekanizmasının kullanıcı akışını ne kadar etkilediğine bağlı olarak kullanıcı doğrulaması gerektirip gerektirmemek reklamverenin tercihine bağlıdır. Sunucunun, geçiş anahtarı kullanıcı kimlik doğrulaması için UP ve UV işaretlerini kontrol ettiğinden emin olun.