getClientCapabilities() ile daha basit WebAuthn özellik algılama

Yayınlanma tarihi: 15 Ocak 2025

WebAuthn, karma protokol için Bluetooth ile etkileşim, şifre anahtarı sağlayıcılarla iletişim ve otomatik doldurma özelliğinde şifre anahtarı önerme gibi benzersiz özellikler sunar. Ancak farklı istemciler ve kimlik doğrulayıcılar, WebAuthn özellikleri için farklı düzeylerde destek sunar. Bu tutarsızlık, bazı kullanıcıların hatalarla karşılaşabileceği veya belirli kimlik doğrulama seçeneklerini kullanamayacağı dağınık bir kullanıcı deneyimine yol açabilir. Geliştiricilerin istemci özelliklerini belirlemelerine olanak tanıyarak bu varyasyonlara uyum sağlayan daha güçlü kimlik doğrulama akışları oluşturmalarını sağlar.

PublicKeyCredential.getClientCapabilities() yöntemi, güvenen tarafların tarayıcı tarafından hangi WebAuthn özelliklerinin desteklendiğini belirlemesine olanak tanır. Bu yöntem, desteklenen özelliklerin listesine çözüm bulan bir promise döndürür. Böylece geliştiriciler, kimlik doğrulama deneyimlerini ve iş akışlarını istemcinin belirli özelliklerine göre özelleştirebilir.

Uyumluluk

Browser Support

  • Chrome: not supported.
  • Edge: not supported.
  • Firefox: not supported.
  • Safari: 17.4.

getClientCapabilities()

getClientCapabilities(), güvenen tarafların hangi özelliklerin kullanılabileceğini belirlemesine olanak tanıyan bir WebAuthn API'sidir. API'yi kullanmak için PublicKeyCredential.getClientCapabilities() işlevini çağırmanız gerekir. Döndürülen söz, her biri true veya false ile kullanılabilirliğini belirten özellikler içeren bir nesneye çözümlenir. Özellik undefined ise kullanılabilirliği bilinmemektedir.

if (window.PublicKeyCredential &&
  if (PublicKeyCredential.getClientCapabilities) {
    const capabilities = await PublicKeyCredential.getClientCapabilities();
    if (capabilities.conditionalGet === true &&
        capabilities.passkeyPlatformAuthenticator === true) {
      // The browser supports passkeys and the conditional mediation.
    }
  }
}

conditionalCreate

Kullanıcı daha önce kimlik bilgisi oluşturmaya izin verdiyse tarayıcı, belirgin bir modal kullanıcı arayüzü olmadan kimlik bilgisi oluşturabilir.

conditionalGet

Tarayıcı, belirgin bir modal kullanıcı arayüzü yerine otomatik doldurma iletişim kutusunun bir parçası olarak geçiş anahtarlarını görüntüleyerek kimlik doğrulaması yapabilir. Mevcut eşdeğer PublicKeyCredential.isConditionalMediationAvailable().

hybridTransport

Cihaz, tarayıcı tarafından kimlik bilgisi oluşturulması ve karma protokol kullanılarak cihazlar arası kimlik doğrulaması yapılması için Bluetooth'u kullanabilir. Bu genellikle, kullanıcının tarayabileceği ve kimlik bilgisi içeren bir telefonla oturum açabileceği bir QR kodunu tarayıcıda gösterebileceği anlamına gelir.

passkeyPlatformAuthenticator

Tarayıcı, bir kimlik bilgisi oluşturabilir ve karma protokol aracılığıyla kullanıcı doğrulaması yapan bir platform kimlik doğrulayıcısı veya bunu destekleyen başka bir cihaz üzerinden kimlik doğrulaması yapabilir. hybridTransport || userVerifyingPlatformAuthenticator etiketine eş değer.

relatedOrigins

Tarayıcı, ilgili kökler dosyasında belirtildiği sürece RP kimliğiyle eşleşmeyen bir kimlik bilgisi oluşturabilir ve bu kimlikle kimlik doğrulaması yapabilir.

signalAllAcceptedCredentials

Tarayıcı, sunucudaki mevcut kimlik bilgilerini geçiş anahtarı sağlayıcıya bildirebilir. Böylece geçiş anahtarı sağlayıcı, geçiş anahtarı listesini sunucuda tutarlı tutabilir.

signalCurrentUserDetails

Tarayıcı, sunucudaki kullanıcı adı ve görünen ad gibi kullanıcı bilgilerini geçiş anahtarı sağlayıcıya gönderebilir. Böylece geçiş anahtarı sağlayıcı, geçiş anahtarı bilgilerini sunucuda tutarlı tutabilir.

signalUnknownCredential

Tarayıcı, sunucuda silinen kimlik bilgilerini geçiş anahtarı sağlayıcıya bildirebilir. Böylece geçiş anahtarı sağlayıcı, geçiş anahtarı listesini sunucuda tutarlı tutabilir.

userVerifyingPlatformAuthenticator

Tarayıcı, platform kimlik doğrulayıcısında kimlik bilgisi oluşturabilir ve kimlik doğrulaması yapabilir. Bu, tarayıcının karma protokolü desteklediği anlamına gelmez. Mevcut eşdeğer PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable().

extensions

RP'ler, getClientCapabilities() ile kullanılabilen uzantıları da belirleyebilir.

if (capabilities['extension:appid'] === true) {
  // appId extension is supported
}

Tanımlayıcının önüne extension: ve ardından bir uzantı adı eklenir. Uzantı adları için IANA'da tanımlanan WebAuthn Uzantısı Tanımlayıcıları'na bakın.

Daha fazla bilgi

Geçiş anahtarları hakkında daha fazla bilgi edinmek için Geçiş anahtarları ile şifresiz giriş başlıklı makaleyi inceleyin.