Bu dokümanda, WebAuthn'da userVerification
öğesinin ne olduğu 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'daki "kullanıcı doğrulaması" nedir?
Geçiş anahtarları, ortak anahtar kriptografisine dayalı olarak oluşturulur. Geçiş anahtarı oluşturduğunuzda herkese açık-özel anahtar çifti oluşturulur, özel anahtar geçiş anahtarı sağlayıcısı tarafından depolanır ve ortak anahtar, depolanmak üzere bağlı tarafın (RP) sunucusuna döndürülür. Sunucu, eşlenmiş ortak anahtarı kullanarak aynı geçiş anahtarı tarafından imzalanan bir imzayı doğrulayarak kullanıcının kimliğini doğrulayabilir. Ortak anahtar kimlik bilgilerindeki "kullanıcı mevcut" (UP) işareti, kimlik doğrulama sırasında birisinin cihazla etkileşime geçtiğini kanıtlar.
Kullanıcı doğrulaması, kimlik doğrulama sırasında yalnızca bir kişinin değil, doğru kişinin de bulunduğunu onaylamayı amaçlayan isteğe bağlı bir güvenlik katmanıdır. Akıllı telefonlarda bu işlem genellikle ekran kilidi mekanizması (ör. biyometri, PIN veya şifre) kullanılarak yapılır. Kullanıcı doğrulamasının 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'nin sunucuda nasıl doğrulandığı
Kullanıcı varlığı (UP) ve kullanıcı tarafından doğrulanmış (UV) Boole işaretleri, kimlik doğrulayıcı veri alanında sunucuya gönderilir. 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 doğrulanabilir. İmza geçerli olduğu sürece sunucu işaretlerin orijinal olduğunu düşünebilir.
Geçiş anahtarı kaydı ve kimlik doğrulamasında sunucu, yukarı işaretin true
olduğunu ve gereksinime bağlı olarak UV işaretinin true
veya false
olup olmadığını incelemelidir.
userVerification
parametresini belirtme
RP, WebAuthn spesifikasyonuna göre hem kimlik bilgisi oluşturma hem de onaylama için userVerification
parametresiyle kullanıcı doğrulaması isteyebilir. Sırasıyla 'preferred'
, 'required'
veya 'discouraged'
kabul edilir. Yani sırasıyla:
'preferred'
(varsayılan): Cihazda bir kullanıcı doğrulama yöntemi kullanmak tercih edilir ancak mevcut değilse atlanabilir. Yanıt kimlik bilgisi, kullanıcı doğrulaması yapılmışsatrue
ve UV gerçekleştirilmediysefalse
UV işareti değerini içerir.'required'
: Cihazda bulunan bir kullanıcı doğrulama yönteminin çağrılması gerekir. Mevcut değilse istek yerel olarak başarısız olur. Bu, yanıt kimlik bilgilerinin UV işaretitrue
olarak ayarlanmış şekilde her zaman döndürüleceği anlamına gelir.'discouraged'
: Kullanıcı doğrulama yöntemi kullanılması önerilmez. Ancak, cihaza bağlı olarak kullanıcı doğrulaması yine de gerçekleştirilebilir ve UV işaretitrue
veyafalse
içerebilir.
Geçiş anahtarı oluşturma için ö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 gereksinimlerinize ve 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'
kullanın.
Kullanıcı doğrulamasının korumadan çok ihtiyatlı olduğu ortamlar vardır. Örneğin, Touch ID'nin kullanılamadığı macOS'te (cihazın desteklemediği, devre dışı bırakıldığı veya cihaz kapaklı modda olduğu için) kullanıcıdan bunun yerine sistem şifresini girmesi istenir. Bu soruna neden olur ve kullanıcı, kimlik doğrulamasını tamamen terk edebilir. Pürüzleri ortadan kaldırmak sizin için daha önemliyse userVerification='preferred'
özelliğini kullanın.
userVerification='preferred'
kullanıldığında, kullanıcı doğrulaması başarıyla gerçekleştirilmişse 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ı istenir ve ortak anahtar kimlik bilgisi bir false
UV işareti içerir.
UV işareti bu şekilde risk analizinizde bir sinyal olabilir. Oturum açma girişimi diğer faktörler nedeniyle riskli görünüyorsa, kullanıcı doğrulaması gerçekleştirilmemişse kullanıcıya ek oturum açma sorgulamaları sunmak isteyebilirsiniz.
userVerification='required'
ne zaman kullanılır?
Hem üst hem de UV'nin kesinlikle gerekli olduğunu düşünüyorsanız userVerification='required'
kullanın.
Bu seçeneğin olumsuz bir yönü, kullanıcının oturum açarken daha fazla zorluk yaşamasıdır. Örneğin, Touch ID'nin kullanılamadığı macOS'te, kullanıcıdan sistem şifresini girmesi istenir.
userVerification='required'
sayesinde, kullanıcı doğrulamasının cihazda gerçekleştirildiğinden emin olabilirsiniz. Sunucunun UV işaretinin true
olduğunu doğruladığından emin olun.
Sonuç
Geçiş anahtarı kullanan taraflar, kullanıcı doğrulamasını kullanarak cihaz sahibinin oturum açma olasılığını ölçebilir. Yedek oturum açma mekanizmasının kullanıcı akışını ne kadar kritik etkilediğine bağlı olarak kullanıcı doğrulamasını zorunlu kılmayı veya isteğe bağlı yapmayı tercih eder. Sunucunun, geçiş anahtarı kullanıcı kimlik doğrulaması için YUKARI işaretini ve UV işaretini kontrol ettiğinden emin olun.