See the original blog version in English here.

Looking for a dev-focused passkey reference? Download our Passkeys Cheat Sheet. Trusted by dev teams at Ally, Stanford CS & more.
WebAuthn, passkey'lerin arkasındaki modern standarttır. Geleneksel parolalara güvenmek yerine açık anahtar (public-key) kriptografisini kullanır. Bu sayede kullanıcılar; parmak izi, yüz tanıma gibi biyometrik verilerle veya fiziksel güvenlik anahtarlarıyla kimliklerini doğrulayabilirler. Bu değişim sadece güvenliği artırmakla kalmaz, aynı zamanda parola yönetimi derdini ortadan kaldırarak kullanıcı deneyimini de harika bir seviyeye taşır.
WebAuthn Seviye 3 standardı,
geliştiricilere ve platformlara passkey'leri uygularken daha fazla kontrol ve esneklik
sunmayı amaçlayan yeni istemci yetenekleri (tarayıcı API'si getClientCapabilities()
aracılığıyla alınabilir) sunuyor. Bu güncellemeler, passkey'leri cihazlar, tarayıcılar ve
platformlar arasında entegre etme sürecini basitleştirerek daha akıcı ve tutarlı bir
kullanıcı yolculuğu sağlıyor.
Bu yazıda birlikte şu soruların yanıtlarını keşfedeceğiz:
Yazının sonunda, modern kullanıcı beklentileriyle örtüşen, pürüzsüz ve güvenli kimlik doğrulama akışları oluşturmak için bu özelliklerden nasıl yararlanabileceğinizi tam olarak anlayacaksınız.
WebAuthn istemci yetenekleri, tarayıcıların ve platformların hangi tür WebAuthn işlevlerini desteklediklerini iletmelerine olanak tanıyan bir dizi özelliktir. Basitçe ifade etmek gerekirse, web sitelerine kullanıcının cihazında hangi kimlik doğrulama yöntemlerinin ve ayarlarının kullanılabileceğini bildiren bir "özellik kontrol listesi" gibi çalışırlar. Bu sayede geliştiriciler, kimlik doğrulama akışlarını istemcinin yeteneklerine göre uyarlayabilir ve daha sorunsuz, güvenli bir deneyim sunabilirler.
Örneğin, bir tarayıcı biyometrik kimlik doğrulamayı (Touch ID gibi) desteklediğini sinyallerse, giriş akışınızı kullanıcılara parmak iziyle giriş yapma seçeneği sunacak şekilde tasarlayabilirsiniz. Tarayıcı belirli özellikleri desteklemiyorsa parola veya SMS OTP gibi alternatif (fallback) seçenekler sunabilirsiniz. Pratikte, desteklenmeyen veya yarıda kesilen yetenek yolları genel tarayıcı hataları olarak görünebileceğinden, ekiplerin bu sonuçları açık bir WebAuthn hata sınıflandırmasıyla eşleştirmesi iyi bir fikirdir.
WebAuthn Seviye 3 standardı, passkey
uygulamalarını çok daha yetenekli ve kullanıcı dostu hale getiren birkaç yeni istemci
yeteneği sunar. getClientCapabilities() API çağrısı için ilk destek Safari 17.4'te
tanıtıldı.
Tarayıcıdaki desteği tespit etmek için aşağıdaki kod parçacığı işinize yarayabilir:
// PublicKeyCredential nesnesinin mevcut tarayıcıda desteklenip desteklenmediğini kontrol edin if (typeof PublicKeyCredential === "undefined") { console.log("PublicKeyCredential is not supported in this browser."); } // PublicKeyCredential üzerinde getClientCapabilities metodunun var olup olmadığını kontrol edin if (typeof PublicKeyCredential.getClientCapabilities === "function") { try { let capabilities = await PublicKeyCredential.getClientCapabilities(); console.log(capabilities); } catch (error) { console.error("Error getting client capabilities:", error); } } else { console.log("getClientCapabilities is not supported in this browser"); }
getClientCapabilities(), web sitelerinin ve uygulamaların hangi WebAuthn özelliklerinin
desteklendiğini belirlemek için istemciyi (ör. tarayıcı veya cihaz) sorgulamasına olanak
tanır. Geliştiriciler istemcinin yeteneklerini anlayarak, biyometrik kimlik doğrulama gibi
mevcut özelliklerden yararlanmak için akışları optimize edebilir veya belirli yetenekler
eksikse alternatif yöntemler sunabilirler.
Subscribe to our Passkeys Substack for the latest news.
İşte WebAuthn istemci yeteneklerine ve passkey entegrasyonunu nasıl etkilediklerine yakından bir bakış:
conditionalCreate, belirli koşullara bağlı olarak otomatik passkey oluşturulmasını
sağlar. Bir uygulama, parola yöneticisinin ilgili desteği varsa, parola otomatik doldurma
sırasında passkey'i otomatik olarak oluşturmak için bu yeteneği kullanabilir. Bu özellik,
kullanıcıları parolalardan passkey'lere otomatik olarak geçirerek passkey benimsenmesini
ve kullanımını artırmaya çok yardımcı olur.
conditionalCreate özelliğine benzer şekilde conditionalGet, passkey ile girişleri
otomatik olarak tetikler. Bu, en iyi passkey deneyiminin (UX) sunulması gereken
senaryolarda harikadır; girişi sadece parolasız değil, aynı zamanda kullanıcı adı olmadan
da (usernameless) yapmanızı sağlar. Kullanıcılar bir modal veya açılır menüdeki (dropdown)
passkey'e tıklayıp anında kimlik doğrulayabilir. Geliştiriciler bu yeteneği kullanarak
gereksiz istemleri en aza indirir ve passkey kimlik doğrulamasının yalnızca uygun
olduğunda gerçekleşmesini sağlarlar.
hybridTransport, passkey'lerin farklı cihazlar arasında kullanılabilmesini sağlayarak
cihazlar arası kesintisiz kimlik doğrulamayı (QR kodları ve Bluetooth aracılığıyla) mümkün
kılar. Örneğin, bir kullanıcı masaüstündeki bir hizmette oturum açmak için akıllı
telefonunda kayıtlı bir passkey kullanabilir. Bu, kullanıcıların passkey'leri manuel
olarak aktarmaya veya her cihaz için geleneksel giriş yöntemlerine güvenmeye gerek
kalmadan güvenli bir şekilde kimlik doğrulamasına olanak tanır.
Windows Hello, Face ID veya Touch ID gibi platform authenticator'ları doğrudan cihazlara entegredir. Kullanıcıların biyometrik verilerle veya cihaza özgü diğer yöntemlerle (ör. PIN) kimlik doğrulamasına izin vererek daha hızlı, pürüzsüz ve çok daha güvenli bir passkey deneyimi sunarlar.
Become part of our Passkeys Community for updates & support.
userVerifyingPlatformAuthenticator, passkey doğrulamasının aktif bir parmak izi taraması
veya yüz tanıma gibi bir kullanıcı doğrulaması (user verification) içerdiğinden emin olur
ve böylece ekstra bir güvenlik katmanı sağlar.
relatedOrigins yeteneği, aynı organizasyona ait farklı alan adları (örneğin amazon.com
ve amazon.de) arasında sorunsuz kimlik doğrulamasına izin verir. Şirketiniz birden fazla
alan adını veya farklı alt alan adlarını (subdomains) yönetiyorsa, kullanıcılar bir kez
giriş yapıp tüm mülklere her defasında yeniden doğrulama yapmadan erişebilirler.
Sürtünmeyi azaltan bu yetenek, özellikle uluslararası ortamlarda veya çoklu hizmet
platformlarına sahip işletmeler için çok değerlidir.
signalAllAcceptedCredentials(options) metodu, belirli bir kullanıcı için tüm WebAuthn
kimlik bilgisi (credential) ID'lerinin tam listesini sağlar. Bir gizlilik sızıntısı riski
bulunmadığından, kullanıcı kimliği doğrulandığında
Relying Party'ler (bağlı taraflar) bu metodu
signalUnknownCredential() yerine tercih etmelidir. Bu metot, bağlı olan
authenticator'larda henüz güncellenmemiş olabilecek yeni
değişiklikler de dahil olmak üzere, kullanıcının açık anahtar kimlik bilgilerine dair
kapsamlı bir genel bakış sunar.
Bir örnek üzerinden gidelim: Bir kullanıcının (userId: A), Base64URL ile kodlanmış
kimlikleri X ve Y olan 2 passkey'i olsun. Daha sonra kullanıcı, web hizmetinin
(example.com) hesap ayarlarından X passkey'ini siler (böylece açık anahtar silinir).
Şimdi şu kodu çalıştırın:
PublicKeyCredential.signalAllAcceptedCredentials({ rpId: "example.com", userId: "A", // WebAuthn User Handle, Base64URL. allAcceptedCredentialIds: ["Y"], });
Yukarıdaki kod çalıştırıldığında authenticator aktif durumdaysa, X passkey'ini gelecekteki kimlik doğrulama süreçlerinden siler veya gizler. Ancak kodun çalıştırıldığı anda authenticator bağlı olmayabilir, bu nedenle bağlı tarafların bu kodu periyodik olarak (örneğin her oturum açılışında) çalıştırmaları önerilir.
allAcceptedCredentialIds içinde bulunmayan
passkey'ler geri döndürülemez bir
şekilde silinebilir veya gizlenebilir. Bu yüzden bağlı tarafların geçerli WebAuthn kimlik
ID'lerini listeden asla çıkarmamaya çok dikkat etmesi gerekir. Geçerli bir kimlik ID'si
yanlışlıkla listeden çıkarılırsa, bağlı tarafın passkey'i "görünür" hale getirmek için onu
en kısa sürede yeni bir signalAllAcceptedCredentials(options) çağrısına dahil etmesi
gerekir. Passkey gizlenmek yerine silindiyse, maalesef durumu düzeltmek için yapılabilecek
pek bir şey yoktur.
Want to experiment with passkey flows? Try our Passkeys Debugger.
signalCurrentUserDetails(options) metodu, kullanıcının mevcut adını ve WebAuthn Görünüm
Adını (Display Name) sinyaller. signalCurrentUserDetails(options) çağrıldığında, istemci
bu işlemi gerçekleştirmek için tanımlanmış bir dizi adımı izler.
Örneğimize bakalım: WebAuthn User ID'si A olan bir
kullanıcı, web sitesinin (example.com) hesap ayarlarında adını günceller. Daha sonra
bağlı taraf (relying party) şu kodu çalıştırabilir:
PublicKeyCredential.signalCurrentUserDetails({ rpId: "example.com", userId: "A", // user ID, Base64URL. name: "Yeni kullanici adi", displayName: "Yeni gorunum adi", });
Bunun üzerine authenticator yerel olarak kaydedilmiş passkey'in üst verilerini (metadata) günceller. En büyük avantajı, gelecekteki Conditional UI (Koşullu Kullanıcı Arayüzü) veya passkey otomatik doldurma isteklerinde açılır menünün artık güncellenmiş adı göstermesidir.
signalUnknownCredential(options) metodu, bir WebAuthn kimlik bilgisinin
Relying Party tarafından tanınmadığını (örneğin kullanıcı
passkey'i sildiyse) bildirir. signalAllAcceptedCredentials(options) metodunun aksine,
kabul edilen tam ID listesini ve WebAuthn
User Handle'ı (kullanıcı tanıtıcısı) sağlamayı
gerektirmez. Bu da kimliği doğrulanmamış çağrıcılara karşı olası gizlilik sızıntılarını
önler.
Bunu da bir örnekle açıklayalım: Bir kullanıcı bir web sitesinin (example.com) hesap
ayarlarında X kimliğine sahip passkey'i siler (böylece açık anahtar silinir). Ancak özel
anahtar kullanıcının cihazında hala mevcuttur. Bu, boş bir allowCredentials listesine
sahip gelecekteki bir Conditional UI / passkey otomatik
doldurma giriş isteğinde bu passkey'in hala seçilebileceği anlamına gelir. Açık anahtar
zaten silinmiş olduğu için giriş denemesi başarısız olacaktır, bu nedenle bağlı taraf
şunları çalıştırmalıdır:
PublicKeyCredential.signalUnknownCredential({ rpId: "example.com", credentialId: "X", // kullanıcının az önce denediği ID, Base64URL });
Ardından authenticator, X kimlikli passkey'i gelecekteki denemelerden siler veya gizler.
WebAuthn Seviye 3 standardı henüz taslak aşamasında olduğundan, bu yeni yeteneklerin benimsenmesi henüz tam olarak yaygınlaşmış değil. Çeşitli tarayıcılar bu özellikleri yavaş yavaş uyguluyor ancak destek oranları farklılık gösteriyor. Yukarıda bahsettiğimiz büyük tarayıcılar için güncel destek durumu şöyle:
| Tarayıcı | İstemci Yeteneklerini Destekleyen Sürüm | Notlar |
|---|---|---|
| Chrome | 133 | Chrome Platform Status ve Chromium Bug Tracker üzerinde detayları görebilirsiniz. |
| Safari | 17.4+ | getClientCapabilities() API'sini sunan ilk tarayıcı. Ekim 2024 itibarıyla Safari; conditionalCreate, conditionalMediation, hybridTransport, passkeyPlatformAuthenticator ve userVerifyingPlatformAuthenticator'ı desteklemektedir. |
| Edge | 133 | Chromium 133 tabanlıdır. Chromium Bug Tracker üzerinden takip edilebilir. |
| Firefox | 135 | Mozilla, Firefox 135 ve sonrasında WebAuthn Seviye 3 özelliklerini uygulamaya başladı. |
Seviye 3 olgunlaştıkça ve daha fazla tarayıcı bu özellikleri sundukça benimseme hızı da
artacaktır. Şu anda kaç kullanıcının getClientCapabilities() özelliğinden
yararlanabildiğini görmek isterseniz, ücretsiz State of Passkeys verilerini
inceleyebilirsiniz. Gelişmeleri daha geniş çaplı planlamak için tarayıcı sürüm notlarına
ve ilgili dokümanlara göz atmayı unutmayın.
Want to find out how many people use passkeys?
Bir geliştirici olarak bu yeni yeteneklerin sizin için ne anlama geldiğini ve uygulamanızda bunları nasıl kullanmanız gerektiğini merak edebilirsiniz. Aşağıda bunları en verimli şekilde kullanmanız için bazı öneriler derledik.
Ancak, (Kasım 2024 itibarıyla) henüz tüm tarayıcıların getClientCapabilities() API
çağrısını desteklemediğini unutmayın. Tüm tarayıcılar destekleyene kadar
kullanabileceğiniz bir polyfill paketini GitHub'da bulabilirsiniz.
İstemcinin desteklediği özellikleri sayfa yükleme veya kimlik doğrulama akışının en
başında tespit etmek için getClientCapabilities() metodunu kodunuzda erkenden kullanın.
Bu, deneyimi dinamik olarak özelleştirmenize imkan tanır. Desteklendiğinde platform
tabanlı kimlik doğrulamayı öne çıkarabilir veya desteklenmediğinde SMS OTP ya da donanım
güvenlik anahtarları gibi alternatif yöntemler sunabilirsiniz.
Şu anda parolaları kullanan bir web sitesine veya uygulamaya passkey ekliyorsanız,
conditionalCreate özelliği benimsenme oranınızı ciddi şekilde artırabilir. Arka planda,
uygun bir kimlik bilgisi yöneticisiyle (Ekim 2024 itibarıyla sadece
Apple Passwords) parola otomatik doldurulurken
otomatik olarak bir passkey oluşturulur ve gelecekteki oturumlarda öncelikli olarak tercih
edilir.
Sadece passkey benimsenmesini değil, aynı zamanda passkey kullanım sıklığını da yüksek
tutmak için, cihazın veya tarayıcının conditionalGet özelliğini kontrol ederek
Conditional UI / Passkey Otomatik Doldurma desteği olup
olmadığına bakın. Bu şekilde, işletim sistemi veya tarayıcı tarafından proaktif olarak
önerildiği ve parola doldurmaktan bile daha az çaba gerektirdiği için kullanıcıları
girişlerinde passkey kullanmaya daha kolay teşvik etmiş olursunuz.
Kullanıcıların masaüstünden hizmetinize erişirken bile akıllı telefonları üzerinden (QR
kod ve Bluetooth aracılığıyla) sorunsuzca oturum açmalarını sağlamak için
hybridTransport kullanın.
WebAuthn istemci yetenekleri, passkey konusunda şu anda var olan boşlukları gidermede gerçekten çok önemli bir adımdır. Bu blog yazısında şu temel sorulara yanıt verdik:
getClientCapabilities,
conditionalCreate, hybridTransport ve çok daha fazlası dahil olmak üzere Seviye 3
standardıyla gelen yeni yeteneklere göz attık.Sizi yeni WebAuthn Seviye 3 özelliklerini keşfetmeye ve tarayıcılardaki benimsenme durumunu takip etmeye davet ediyoruz. Eğer passkey'leri uygulamak ve bu gelişmiş yeteneklerden yararlanmak istiyorsanız, uzman rehberliği ve destek için bizimle iletişime geçmekten çekinmeyin.
Desteklenen özellikleri dinamik olarak algılamak için sayfa yükleme veya kimlik doğrulama akışınızın başlarında getClientCapabilities()'i çağırın. Bu size, desteklendiğinde platform tabanlı kimlik doğrulama sunma, desteklenmediğinde ise SMS OTP veya donanım güvenlik anahtarları gibi alternatiflere başvurma imkanı sağlar.
signalAllAcceptedCredentials, geçerli kimlik bilgisi (credential) ID'lerinin tam listesini ve WebAuthn User Handle'ı gerektirir. Bu nedenle, gizlilik sızıntılarını önlemek için yalnızca kullanıcının kimliği doğrulandığında çağrılmalıdır. signalUnknownCredential ise tam listeyi gerektirmeden tanınmayan tek bir kimlik ID'sini bildirir; bu da onu başarısız bir giriş denemesinden sonra gibi kimliği doğrulanmamış senaryolarda güvenli hale getirir.
relatedOrigins yeteneği, örneğin amazon.com ve amazon.de gibi aynı organizasyona ait farklı alan adlarında sorunsuz kimlik doğrulamaya izin verir. Kullanıcılar bir kez giriş yapıp her bir alan adında yeniden kimlik doğrulamasına gerek kalmadan tüm platformlara erişebilirler. Bu da uluslararası ve çoklu hizmet ortamlarındaki sürtünmeyi ortadan kaldırır.
Kasım 2024 itibarıyla tüm tarayıcılar getClientCapabilities()'i desteklemiyor. Bu durumu aşmak için github.com/MasterKale/webauthn-polyfills adresinde bulunan polyfill paketini geçici bir çözüm olarak kullanabilirsiniz. WebAuthn Seviye 3 standardı olgunlaştıkça ve Chrome 133, Edge 133, Firefox 135 ve Safari 17.4 halihazırda destek sunmaya başladıkça benimsenme oranının giderek hızlanması bekleniyor.
Related Articles
Table of Contents