kullanıcıDoğrulama ile ilgili ayrıntılı inceleme

Bu belgede, WebAuthn'da userVerification'nin 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ı ele alınmaktadır.

WebAuthn'da "kullanıcı doğrulaması" nedir?

Geçiş anahtarları, ortak anahtar kriptografisine dayanır. Geçiş anahtarı oluşturularak bir açık-özel anahtar çifti oluşturulur. Özel anahtar, geçiş anahtarı sağlayıcısı tarafından depolanır ve ortak anahtar, güvenen tarafın (RP) sunucusuna depolanması için döndürülür. Sunucu, eşlenen 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 bir kullanıcının cihazla etkileşime geçtiğini kanıtlar.

Kullanıcı doğrulaması, kullanıcı varlığının belirttiği gibi herhangi bir kişinin değil, kimlik doğrulama sırasında doğru kişinin bulunduğunu doğrulamaya çalışan isteğe bağlı bir güvenlik katmanıdır. Akıllı telefonlarda bu işlem genellikle ekran kilidi mekanizması (biyometrik, 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 raporlanır.

macOS'teki iCloud Anahtar Zinciri'nde kullanıcı doğrulama iletişim kutusunun ekran görüntüsü. İletişim kutusu, kimlik doğrulama isteğinde bulunan kaynağın yanı sıra kullanıcı adını görüntüleyerek kullanıcıdan Dokunma Kimliği'ni kullanarak oturum açmasını ister. İletişim kutusunun sağ üst kısmında "İptal" etiketli bir düğme bulunur.
macOS'teki iCloud Anahtar Zinciri'nde kullanıcı doğrulama iletişim kutusu.
Android için Chrome'daki kullanıcı doğrulama iletişim kutusunun ekran görüntüsü. İletişim kutusu, kullanıcıdan yüz tanıma veya parmak izi algılama özelliğini kullanarak kimliğini doğrulamasını ister ve kimlik doğrulama isteğinde bulunan kaynağı gösterir. Sol altta PIN kullanarak doğrulama seçeneği bulunur.
Android Chrome'da kullanıcı doğrulama iletişim kutusu.

UP ve UV'nin sunucuda nasıl doğrulandığı

Kullanıcı varlığı (UP) ve kullanıcı doğrulaması (UV) doğrulama ağı işaretleri, kimlik doğrulayıcı veri alanında sunucuya sinyal gönderir. 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şaretleri orijinal olarak kabul edebilir.

Kimlik doğrulama veri yapısının tasviri. Veri yapısının her bölümünde soldan sağa doğru "RP ID HASH" (32 bayt), "FLAGS" (1 bayt), "COUNTER" (4 bayt, büyük endian uint32), "ATTESTE CRED. DATA' (varsa değişken uzunlukta) ve "EXTENSIONS" (varsa değişken uzunlukta (CBOR)). "FLAGS" (İşaretler) bölümü, soldan sağa doğru etiketlenmiş olası işaretlerin listesini gösterecek şekilde genişletilir: "ED", "AT", "0", "BS", "BE", "UV", "0" ve "UP".
Ortak anahtar kimlik bilgisindeki Authenticator veri alanları.

Geçiş anahtarı kaydı ve kimlik doğrulama sırasında sunucu, UP işaretinin true olup olmadığını ve UV işaretinin şarta bağlı olarak true veya false olup olmadığını kontrol etmelidir.

userVerification parametresini belirtme

WebAuthn spesifikasyonuna göre, RP hem kimlik bilgisi oluşturma hem de beyan sırasında userVerification parametresi ile 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): Cihaz üzerinde bir kullanıcı doğrulama yöntemi kullanılması tercih edilir ancak bu yöntem kullanılamıyorsa atlanabilir. Yanıt kimlik bilgisi, kullanıcı doğrulaması gerçekleştirildiyse true, gerçekleştirilmediyse false değerine sahip bir UV işareti içerir.
  • 'required': Cihazda kullanılabilen bir kullanıcı doğrulama yönteminin çağrılması gerekir. Böyle bir cihaz yoksa istek yerel olarak başarısız olur. Bu, yanıt kimlik bilgisinin her zaman UV işaretçisi true olarak ayarlanmış şekilde döndürüldüğü anlamına gelir.
  • '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şareti true veya false 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?

Kullanıcı deneyimine korumaya göre öncelik veriyorsanız userVerification='preferred' simgesini kullanın.

Kullanıcı doğrulamasının korumadan daha fazla soruna yol açtığı ortamlar vardır. Örneğin, Touch ID'nin kullanılamadığı macOS'te (cihaz desteklemediği, devre dışı bırakıldığı veya kapaklı modda olduğu için) kullanıcıdan bunun yerine sistem şifresini girmesi istenir. Bu durum, kullanıcının kimlik doğrulamayı tamamen bırakmasına neden olabilir. Sorunları ortadan kaldırmak sizin için daha önemliyse userVerification='preferred' seçeneğini kullanın.

macOS'te Touch ID kullanılamadığında görünen geçiş anahtarı iletişim kutusunun ekran görüntüsü. İletişim kutusu, kimlik doğrulama isteyen kaynak ve kullanıcı adı gibi bilgileri içerir. İletişim kutusunun sağ üst kısmında "İptal" etiketli bir düğme bulunur.
Touch ID kullanılamadığında macOS'te görüntülenen geçiş anahtarı iletişim kutusu.

userVerification='preferred' ile UV işareti, kullanıcı doğrulaması başarıyla gerçekleştirilirse 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 bilgisinde false UV işareti bulunur.

UV işareti, risk analizinizde bir sinyal olabilir. 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 sorguları sunabilirsiniz.

userVerification='required' ne zaman kullanılır?

Hem UP hem de UV'nin kesinlikle gerekli olduğunu düşünüyorsanız userVerification='required' değerini kullanın.

Bu seçeneğin dezavantajı, kullanıcının oturum açarken daha fazla sorun yaşama olasılığıdır. Örneğin, Touch ID'nin kullanılamadığı macOS'te kullanıcıdan sistem şifresini girmesi istenir.

userVerification='required' ile cihazda kullanıcı doğrulamasının yapıldığından emin olabilirsiniz. Sunucunun UV işaretinin true olduğunu doğruladığından emin olun.

Sonuç

Şifre anahtarına dayalı taraflar, kullanıcı doğrulamasından 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ını zorunlu kılmak veya isteğe bağlı hale getirmek onların seçimidir. Sunucunun, geçiş anahtarı kullanıcı kimlik doğrulaması için UP işaretini ve UV işaretini kontrol ettiğinden emin olun.