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

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.

macOS'te iCloud Anahtar Zinciri'ndeki kullanıcı doğrulama iletişim kutusunun ekran görüntüsü. İletişim kutusunda, kimlik doğrulama isteyen kaynak ve kullanıcı adı gösterilerek kullanıcıdan Touch ID ile oturum açması istenir. İ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.
Chrome for Android'deki kullanıcı doğrulama iletişim kutusunun ekran görüntüsü. İletişim kutusunda, kullanıcıdan yüz tanıma veya parmak izi algılama özelliğini kullanarak kimliğini doğrulaması istenir ve kimlik doğrulama isteğinde bulunan kaynak gösterilir. Sol altta PIN kullanarak doğrulama seçeneği bulunur.
Android Chrome'da kullanıcı doğrulama iletişim kutusu.

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.

Kimlik doğrulama veri yapısının gösterimi. Veri yapısının her bölümü 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" (BAYRAKLAR) bölümü, soldan sağa "ED", "AT", "0", "BS", "BE", "UV", "0" ve "UP" olarak etiketlenmiş olası bayrakların listesini gösterecek şekilde genişletilir.
Ortak anahtar kimlik bilgisindeki Authenticator veri alanları.

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ıysa true UV işareti değerini, UV yapılmadıysa false 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şareti true 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ş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?

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.

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

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.