WebAuthn anında aracılık (immediate mediation) özelliğini derinlemesine inceliyoruz. Bu özellik sayesinde nasıl tek bir oturum açma düğmesi oluşturulduğunu, kafa karıştırıcı QR kodlarının nasıl önlendiğini ve daha akıllı bir giriş akışının nasıl kurulduğu
Vincent
Created: August 8, 2025
Updated: August 13, 2025
See the original blog version in English here.
60-page Enterprise Passkey Whitepaper:
Learn how leaders get +80% passkey adoption. Trusted by Rakuten, Klarna & Oracle
Passkey'lere geçiş, bir "passkey paradoksu" yaratıyor: bazı kullanıcıların passkey'leri varken, çoğu hala geleneksel şifreler kullanıyor. Bu durum, "Şifre ile Oturum Aç", "Google ile Oturum Aç" ve "Passkey ile Oturum Aç" gibi birden fazla düğmenin bulunduğu karmaşık giriş ekranlarına yol açıyor. Bu parçalanma, kullanıcı deneyimini zorlaştırıyor. Bir kullanıcı, yeni bir cihazda "Passkey ile Oturum Aç" düğmesine tıkladığında, passkey'i yerel olarak mevcut olmadığı için kafa karıştırıcı bir QR kod istemiyle karşılaşabilir. Temel sorun, web sitesinin bir kimlik doğrulama akışı başlatmadan önce kullanıcının bağlamını bilememesidir.
Çözümlerden biri, önce kimlik belirleyiciyi isteyip kullanıcı için en iyi giriş yöntemini belirlemektir. Diğer bir potansiyel çözüm ise, her kullanıcı için en sorunsuz akışı düzenleyen tek ve akıllı bir "Oturum Aç" düğmesidir. Bu düğme, cihazda bir passkey mevcutsa doğrudan istemeli, değilse diğer yöntemlere sorunsuz bir şekilde geri dönebilmelidir.
Bunu mümkün kılabilecek yeni bir WebAuthn özelliği duyuruldu: Anında Aracılık
(mediation: 'immediate'
). Geliştiriciler, bir WebAuthn API çağrısında bu özelliği
ayarlayarak, passkey paradoksunu çözen akıllı ve birleşik bir oturum açma deneyimi
oluşturabilirler. Bu makale, mediation: 'immediate'
özelliğinin ne olduğunu, nasıl
çalıştığını ve nasıl uygulanacağını araştıran, geliştirici odaklı bir analiz sunmaktadır.
Anında Aracılık'ı (Immediate Mediation) anlamak için öncelikle diğer seçenekleri bilmek faydalı olacaktır. WebAuthn'de kullanıcı aracılığı, web siteniz (Güvenen Taraf - Relying Party) ile kullanıcının doğrulayıcısı (ör. Face ID, YubiKey) arasındaki etkileşimi tarayıcının nasıl yönettiğidir.
Bu, klasik ve açık WebAuthn akışıdır. Bir Güvenen Taraf, bir
mediation
tercihi belirtmeden navigator.credentials.get()
fonksiyonunu çağırdığında,
tarayıcı her zaman bir modal diyalog penceresi sunar. Bu diyalog, sayfa içeriğinin
üzerine gelerek kullanıcının anında dikkatini gerektirir ve web sitesiyle diğer tüm
etkileşimleri duraklatır.
mediation: 'conditional'
#Kullanıcıların passkey'lere geçişine
yardımcı olmak için sunulan bu mod daha inceliklidir. mediation: 'conditional'
ile
WebAuthn isteği, autocomplete="webauthn"
özelliğine sahip bir giriş alanına (ör.
kullanıcı adı) eklenir. Kullanıcı alana tıkladığında, tarayıcının otomatik doldurma
arayüzü mevcut passkey'leri önerir.
mediation: 'immediate'
, "tek oturum açma düğmesi" sorununun çözümüdür. Bir web sitesinin
herhangi bir arayüz göstermeden önce bir passkey'in kullanılabilirliğini kontrol etmesi
için güvenilir bir yol sağlar.
immediate
aracılık, kullanıcıya bir modal aracılığıyla passkey ile kimlik doğrulaması
yapmasını söylemek yerine, tarayıcıya şunu sorar: "Bu kullanıcı için bu cihazda şu
anda hazır bir passkey var mı?"
Önemli bir nokta olarak, bu sorgu yalnızca yerel olarak kullanılabilir kimlik bilgilerini (ör. Windows Hello gibi cihaz içi doğrulayıcılar veya bir şifre yöneticisi aracılığıyla senkronize edilen passkey'ler) kontrol eder. Yaygın bir sürtünme noktası olan cihazlar arası QR kod akışını tetiklemekten kaçınmak üzere tasarlanmıştır.
Bu özelliğin gücü, net ve ikili sonucunda yatar. navigator.credentials.get()
tarafından
döndürülen promise ya başarılı olacak ya da başarısız olacak ve geliştiriciye net bir
sinyal verecektir.
PublicKeyCredential
nesnesiyle sonuçlanır.navigator.credentials.get()
promise'i NotAllowedError
adında bir DOMException
ile
anında reddedilir.NotAllowedError
bir hata değil, adeta bir özelliktir. Web sitesinin yedek bir
kimlik doğrulama yöntemiyle devam etmesi gerektiğini
belirten güvenilir, anlık bir sinyaldir. Bu, geliştiricilerin basit bir try...catch
bloğu kullanmasına olanak tanır: try
bloğu sorunsuz passkey akışını dener ve catch
bloğu geleneksel bir giriş formu oluşturmak için NotAllowedError
'ı dinler. Kullanıcının
bağlamına akıllıca uyum sağlayan tek bir giriş noktası oluşturarak tek oturum açma düğmesi
sorununu zarif bir şekilde çözer.
Doğru aracılık modunu seçmek, kritik bir kullanıcı deneyimi (UX) kararıdır. Bu tablo yan yana bir karşılaştırma sunmaktadır.
Özellik / Davranış | Modal (Varsayılan) | Koşullu Arayüz (conditional ) | Anında (immediate ) |
---|---|---|---|
API Çağrısı | navigator.credentials.get() | navigator.credentials.get({ mediation: 'conditional' }) | navigator.credentials.get({ mediation: 'immediate' }) |
Tetikleyici | Açık kullanıcı eylemi (ör. düğme tıklaması) | Sayfa yüklemesi; giriş alanına odaklanıldığında arayüz | Açık kullanıcı eylemi (ör. düğme tıklaması) |
Arayüz Sunumu | Her zaman anında bir modal diyalog gösterir. | Modal olmayan, otomatik doldurma tarzı bir arayüz gösterir. | Yalnızca yerel bir kimlik bilgisi bulunursa bir modal diyalog gösterir. |
Yerel Kimlik Bilgisi Yoksa Davranış | Cihazlar arası akışlar için arayüz gösterir (ör. QR kod). | Promise beklemede kalır, asla sonuçlanmaz, hata vermez. | Promise, NotAllowedError ile anında reddedilir. |
Sitenin Bilgisi | Kullanıcı akışı tamamlayana kadar bir şey öğrenmez. | Kullanıcı etkileşime girmezse bir şey öğrenmez. En yüksek gizlilik. | Bir bitlik bilgi öğrenir: yerel bir kimlik bilgisinin olup olmadığı. |
Birincil Kullanım Alanı | Özel "Passkey ile Oturum Aç" düğmesi. Açık 2FA. | Birleşik oturum açma/kaydolma formları. Şifre formlarını aşamalı olarak geliştirme. | Karma bir kullanıcı tabanı için tek, birincil "Oturum Aç" düğmesi. |
Geliştirici Eylemi | Başarıyı veya kullanıcı iptalini yönet. | Başarıyı yönet. Harekete geçilecek bir hata sinyali yok. | Yedek bir arayüzü tetiklemek için başarıyı veya NotAllowedError 'ı yönet. |
İşte mediation: 'immediate'
uygulamak için pratik, adım adım bir kılavuz.
mediation: 'immediate'
yeni bir özellik olduğundan, sağlam bir özellik tespiti kritik
öneme sahiptir.
// Özellik tespiti, aşamalı geliştirme için esastır. let immediateMediationAvailable = false; if (window.PublicKeyCredential && PublicKeyCredential.getClientCapabilities) { try { const capabilities = await PublicKeyCredential.getClientCapabilities(); // 'immediateGet' yeteneği, tarayıcı desteğini belirtir. immediateMediationAvailable = capabilities.immediateGet === true; } catch (e) { console.error("İstemci yetenekleri alınırken hata oluştu:", e); } }
navigator.credentials.get()
Çağrısı#Bu çağrı, bir düğme tıklaması gibi bir kullanıcı hareketiyle tetiklenmelidir.
// Bu fonksiyon, birincil "Oturum Aç" düğmenizin olay işleyicisi olmalıdır. async function handleSignInClick() { if (!immediateMediationAvailable) { // Özellik desteklenmiyorsa eski giriş formunu göstermeye geri dön. showLegacyLoginForm(); return; } try { // Her deneme için sunucunuzdan yeni, rastgele bir challenge alın. const challenge = await fetchChallengeFromServer(); const publicKeyCredentialRequestOptions = { challenge: challenge, // Sunucu tarafından sağlanan challenge (Uint8Array olarak) rpId: "example.com", // allowCredentials listesi, kullanıcı gizliliğini korumak için // anında aracılıkta BOŞ OLMALIDIR. allowCredentials: [], }; const credential = await navigator.credentials.get({ publicKey: publicKeyCredentialRequestOptions, // Bu, anında aracılık akışını etkinleştiren anahtardır. mediation: "immediate", }); // Promise sonuçlanırsa, kimlik bilgisini doğrulama için sunucunuza gönderin. await verifyCredentialOnServer(credential); } catch (error) { // catch bloğu, kontrol akışının kritik bir parçasıdır. handleAuthError(error); } }
NotAllowedError
'ı Yönetme#catch
bloğu, tek oturum açma düğmesinin "zekasının" gerçekleştirildiği yerdir.
// NotAllowedError'ı yönetmek, geri çekilme mekanizmasının anahtarıdır. function handleAuthError(error) { // DOMException'ın 'name' özelliğini kontrol edin. if (error.name === "NotAllowedError") { // Bu, geleneksel giriş formunu göstermek için beklenen sinyaldir. console.log("Yerel passkey bulunamadı. Eski giriş formu gösteriliyor."); showLegacyLoginForm(); } else { // Bu, kullanıcının istemi kapatması gibi diğer potansiyel hataları yönetir. console.error("Kimlik doğrulama hatası:", error); } }
En sorunsuz deneyim için, password: true
ekleyerek tarayıcıdan aynı istekte hem
passkey'leri hem de kayıtlı şifreleri aramasını isteyebilirsiniz.
// Gerçekten birleşik bir oturum açma deneyimi için passkey'leri ve şifreleri birleştirme. const credential = await navigator.credentials.get({ publicKey: publicKeyCredentialRequestOptions, password: true, // Tarayıcıdan kayıtlı şifreleri dahil etmesini isteyin. mediation: "immediate", }); // Dönen 'credential' nesnesi ya bir PublicKeyCredential // ya da bir PasswordCredential olacaktır. Sunucu tarafı mantığınız her ikisini de yönetmelidir.
conditional
isteği (genellikle sayfa
yüklendiğinde başlatılır) yeni bir immediate
isteğini engelleyebilir. Yeni bir istek
başlatmadan önce bekleyen istekleri iptal etmek için bir AbortController
kullanmayı
düşünün.allowCredentials
Kısıtlaması: allowCredentials
dizisi boş olmalıdır. Kimlik
bilgisi ID'leri sağlamak, çağrının başarısız olmasına neden olur. Bu, sitelerin
belirli, bilinen kullanıcıları kontrol etmesini önlemek için çok önemli bir gizlilik
korumasıdır.mediation: 'immediate'
, güvenlik ve gizlilik ödünlerini net bir şekilde anlayarak
tasarlanmıştır.
Temel ödün, bir "tek bitlik sızıntıdır". Promise'in sonuçlanma zamanını ölçerek, bir Güvenen Taraf bir bitlik bilgi çıkarabilir: promise anında reddedildi mi (yerel kimlik bilgisi yok) yoksa gecikti mi (yerel bir kimlik bilgisi bulunduğu için bir arayüz istemi gösterildi). Bu sızıntının amacı, daha iyi bir kullanıcı deneyimi sağlamaktır.
Tasarımcılar, kötüye kullanım potansiyelini (ör. kullanıcı takibi) öngördüler ve birkaç pazarlık edilemez koruma mekanizması oluşturdular:
allowCredentials
Listesi: allowCredentials
dizisi boş olmalıdır.
Bu, bir sitenin bu özelliği belirli bir bilinen kullanıcının ziyaret edip etmediğini
kontrol etmek için kullanmasını engeller.iframe
) engellenmiştir.Bu azaltmalar, WebAuthn'in temel güvenlik garantilerinin dokunulmadan kalmasını sağlar. Kimlik doğrulama seremonisinin kendisi değişmez ve kimlik avına (phishing) dayanıklı kalır.
mediation: 'immediate'
,
WebAuthn Seviye 3 spesifikasyonundan gelen gelişmiş bir
özelliktir ve dağıtımı devam etmektedir. 2025 ortası itibarıyla, aşamalı bir geliştirme
stratejisi esastır.
Tarayıcı | Durum | Notlar ve Kaynak |
---|---|---|
Chrome | Geliştirici Denemesi | experimental-web-platform-features bayrağı aracılığıyla kullanılabilir. Takip hatası. |
Edge | Geliştirme Aşamasında (Bekleniyor) | Bir Chromium tarayıcısı olarak, desteğin Chrome'u takip etmesi beklenir. |
Safari (WebKit) | Değerlendiriliyor | WebKit Standart Pozisyonları. Herkese açık bir taahhüt yok. |
Firefox (Gecko) | Değerlendiriliyor | Mozilla Standart Pozisyonları. Herkese açık bir taahhüt yok. |
mediation: 'immediate'
daha akıllı bir giriş düğmesi için harika, düşük seviyeli bir
araç sağlarken, onu Corbado tarafından sunulan gibi daha geniş kapsamlı bir
"Passkey Intelligence"
çözümünden ayırmak önemlidir. Her ikisi de passkey paradoksunu çözmeyi ve benimsemeyi
artırmayı hedefler, ancak bunu farklı şekillerde yaparlar.
Özellik | mediation: 'immediate' | Passkey Intelligence (ör. Corbado) |
---|---|---|
Nasıl Çalışır | Mevcut cihazdaki yerel olarak kullanılabilir passkey'leri kontrol eden tarayıcıya özgü bir API çağrısı. | Oturumlar arasında kullanıcı cihazları, doğrulayıcılar ve giriş geçmişi hakkında veri toplayan ve analiz eden bir arka uç (backend) hizmeti. |
Sağlanan Sinyal | Basit, ikili bir sinyal: yerel bir passkey ya var (arayüz istemi ) ya da yok (NotAllowedError ). | Zengin, bağlamsal içgörüler, ör. "Bu kullanıcı, sık kullandığı passkey özellikli bir cihazda az önce bir şifreyle giriş yaptı." |
Temel Avantaj | Minimal ağ yükü ile çok hızlı, yerel kontrol. | Yeni WebAuthn özellikleri için tarayıcı/işletim sistemi desteğinden bağımsız, evrensel kullanılabilirlik. Daha özel UX için daha derin içgörüler. |
Ana Bağımlılık | Henüz evrensel olmayan güncel tarayıcı ve işletim sistemi desteği gerektirir. | Bir arka uç hizmetiyle entegrasyon. |
Passkey Intelligence, zaman içinde veri toplayıp değerlendirerek bir adım daha ileri gider. Bu, daha sofistike ve zamanında kullanıcı müdahalelerine olanak tanır. Örneğin, bir Passkey Intelligence arka ucu şunları tespit edebilir:
Bu veri odaklı yaklaşım, tarayıcının mediation: 'immediate'
desteğinden bağımsızdır,
yani şu anda tüm kullanıcılarınız için daha akıllı bir giriş akışı sağlayabilir.
İki Dünyanın En İyisi
Sonuç olarak, bu iki yaklaşım birbirini dışlamaz; birbirini tamamlayıcıdır. İdeal çözüm bunları birleştirir:
mediation: 'immediate'
özelliğini kullanabilir.mediation: 'immediate'
özelliğinin yerel hızını bir
Passkey Intelligence
arka ucunun derin içgörüleriyle birleştirerek, her kullanıcıyı nazikçe şifresiz bir
geleceğe yönlendiren en sorunsuz, uyarlanabilir ve etkili giriş deneyimini
sağlayabilirsiniz.
Anında Aracılık, giriş deneyimi için harika bir yükseltmedir. Passkey'lere geçiş sırasında kullanıcılar için yaygın sürtünme ve kafa karışıklığı noktalarını ortadan kaldırmak için gereken zekayı sağlar.
immediate
aracılık kullanıcı için bilişsel yükü ortadan kaldırır. Artık hangi kimlik
doğrulama yöntemini kurduklarını hatırlamak veya karmaşık bir seçenek listesinden seçim
yapmak zorunda kalmazlar. Giriş süreci daha basit ve daha sezgisel hale gelir.mediation: 'immediate'
yalnızca yerel kimlik bilgilerini aradığı
için bu kafa karıştırıcı durumu tamamen önler. Kullanıcının akışı iptal etmesi yerine,
uygulama başka bir yönteme sorunsuz bir şekilde geri dönmek için net bir sinyal
(NotAllowedError
) alır ve bu da daha pürüzsüz bir yolculukla sonuçlanır.Anında Aracılık, passkey geçiş döneminin parçalanmış giriş deneyimini çözen yeni bir WebAuthn özelliğidir. Kullanıcının bağlamına uyum sağlayan, kafa karışıklığını ve sürtünmeyi ortadan kaldıran tek ve akıllı bir "Oturum Aç" düğmesinin oluşturulmasını sağlar. Hesaplanmış bir gizlilik ödünü sunsa da, WebAuthn'in temel güvenliğinden ödün vermeden riskleri azaltmak için sağlam korumalar içerir.
Geliştiriciler için ileriye dönük yol, aşamalı geliştirmedir. Sağlam bir temel deneyim
oluşturun ve desteklenen tarayıcılar için üzerine immediate
aracılığını katmanlayın. Bu
özelliği benimsemek, passkey benimsemesini
hızlandırmak, güvenliği artırmak, operasyonel maliyetleri düşürmek ve dönüşümü
iyileştirmek için stratejik bir hamledir.
Bu gelişmiş kimlik doğrulama akışlarını uygulamak karmaşık olabilir. Corbado'nun Kurumsal
Passkey Platformu bu karmaşıklığı soyutlar.
Altyapımız, koşullu ve immediate
aracılık dahil
olmak üzere en uygun akış düzenlemesini yönetir ve ekibinizin en son teknolojiye sahip,
sürtünmesiz bir kimlik doğrulama deneyimini güvenle dağıtmasına olanak tanır.
Enjoyed this read?
🤝 Join our Passkeys Community
Share passkeys implementation tips and get support to free the world from passwords.
🚀 Subscribe to Substack
Get the latest news, strategies, and insights about passkeys sent straight to your inbox.
Related Articles
Table of Contents