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

Yayınlanma tarihi: 15 Ocak 2025

WebAuthn, karma protokol için Bluetooth ile etkileşim, geçiş anahtarı sağlayıcılarla iletişim ve otomatik doldurmada geçiş anahtarı önerme gibi benzersiz özellikler sunar. Ancak farklı istemciler ve kimlik doğrulayıcılar, WebAuthn özellikleri için farklı destek düzeyleri sunar. Bu farklılık, kullanıcı deneyiminin parçalanmasına neden olabilir. Bazı kullanıcılar hatalarla karşılaşabilir veya belirli kimlik doğrulama seçeneklerini kullanamayabilir. Geliştiricilerin istemci özelliklerini belirlemesine olanak tanımak, bu varyasyonlara uyum sağlayan daha sağlam 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. Yöntem, desteklenen özelliklerin listesini içeren bir söz döndürür. Bu sayede geliştiriciler, istemcinin belirli özelliklerine göre kimlik doğrulama deneyimlerini ve iş akışlarını özelleştirebilir.

Uyumluluk

Browser Support

  • Chrome: 133.
  • Edge: 133.
  • Firefox: 135.
  • Safari: 17.4.

Source

getClientCapabilities()

getClientCapabilities(), güvenen tarafların hangi özelliklerin kullanılabildiğ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 kullanılabilirliğini true veya false ile belirten özellikler içeren bir nesneye çözümlenir. Özellik undefined ise kullanılıp kullanılamadığı bilinmiyor demektir.

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ı kimlik bilgisi oluşturmayı daha önce kabul etmişse 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östererek kimlik doğrulama yapabilir. Mevcut eşdeğer PublicKeyCredential.isConditionalMediationAvailable().

hybridTransport

Cihaz, tarayıcının bir kimlik bilgisi oluşturabilmesi ve hibrit protokolü kullanarak cihazlar arası kimlik doğrulama yapabilmesi için Bluetooth'u kullanabilir. Bu genellikle tarayıcının, kullanıcının tarayıp kimlik bilgisi içeren bir telefonla oturum açabilmesi için QR kodu gösterebileceği anlamına gelir.

passkeyPlatformAuthenticator

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

relatedOrigins

Tarayıcı, ilgili kaynaklar dosyasında belirtildiği sürece RP kimliğiyle eşleşmeyen bir kimlik bilgisi oluşturup bu kimlik bilgisiyle kimlik doğrulama yapabilir.

signalAllAcceptedCredentials

Tarayıcı, sunucudaki kullanılabilir kimlik bilgilerini geçiş anahtarı sağlayıcısına bildirebilir. Böylece geçiş anahtarı sağlayıcısı, geçiş anahtarı listesini sunucuyla tutarlı tutabilir.

signalCurrentUserDetails

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

signalUnknownCredential

Tarayıcı, geçiş anahtarı sağlayıcısının sunucudaki silinmiş kimlik bilgilerini bildirmesini sağlayabilir. Böylece geçiş anahtarı sağlayıcı, geçiş anahtarı listesini sunucuyla tutarlı tutabilir.

userVerifyingPlatformAuthenticator

Tarayıcı, bir platform kimlik doğrulayıcıda kimlik bilgisi oluşturabilir ve kimlik doğrulama 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ılabilir uzantıları da belirleyebilir.

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

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

Daha fazla bilgi

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