Yayınlanma tarihi: 12 Kasım 2024, Son güncelleme tarihi: 29 Kasım 2024
WebAuthn Signal API, bağlı geçiş anahtarı sağlayıcılarına mevcut kimlik bilgilerini bildirmelerine olanak tanır. Bu sayede, desteklenen bir geçiş anahtarı sağlayıcı, yanlış veya iptal edilmiş geçiş anahtarlarını depolama alanından güncelleyebilir ya da kaldırabilir. Böylece, bu geçiş anahtarları artık kullanıcılara sunulmaz.
Uyumluluk
Masaüstünde Chrome, Chrome 132'den itibaren Signal API'yi destekler. Google Şifre Yöneticisi, sinyali yansıtan geçiş anahtarlarını güncelleyebilir. Chrome uzantısı tabanlı geçiş anahtarı sağlayıcıları, sinyali yansıtıp yansıtmayacaklarına kendileri karar verir.
Android'de Chrome desteği daha sonra kullanıma sunulacaktır.
Safari destekliyor ancak henüz uygulanmadı. Firefox henüz görüşlerini paylaşmadı.
Arka plan
Şifre anahtarı (bulunabilir bir kimlik bilgisi) oluşturulduğunda kullanıcı adı ve görünen ad gibi meta veriler, özel anahtarla birlikte şifre anahtarı sağlayıcısına (ör. şifre yöneticisi) kaydedilirken ortak anahtar kimlik bilgisi güvenen tarafın (RP) sunucusuna kaydedilir. Kullanıcı adını ve görünen adı kaydetmek, kullanıcıya istendiğinde sunulan geçiş anahtarlarından hangisiyle oturum açacağını belirlemede yardımcı olur. Bu, özellikle farklı geçiş anahtarı sağlayıcılarından ikiden fazla geçiş anahtarı olan kullanıcılar için yararlıdır.
Ancak, geçiş anahtarı sağlayıcısının geçiş anahtarı listesi ile sunucunun kimlik bilgileri listesi arasındaki tutarsızlıkların kafa karışıklığına yol açabileceği birkaç durum vardır.
İlk durumda, kullanıcı sunucudaki bir kimlik bilgisini sildiğinde geçiş anahtarı, geçiş anahtarı sağlayıcısında dokunulmadan kalır. Kullanıcı bir sonraki oturum açma denemesinde geçiş anahtarıyla oturum açmaya çalıştığında, geçiş anahtarı sağlayıcı tarafından kullanıcıya yine bu geçiş anahtarı sunulur. Ancak sunucu, silinen ortak anahtarla doğrulama yapamayacağından oturum açma girişimi başarısız olur.
İkinci durum ise kullanıcının sunucudaki kullanıcı adını veya görünen adını güncellediği zamandır. Kullanıcı bir sonraki oturum açma denemesinde, sunucuda güncellenmesine rağmen geçiş anahtarı sağlayıcısındaki geçiş anahtarı eski kullanıcı adını ve görünen adı göstermeye devam ediyor. İdeal olarak senkronize olmaları gerekir.
Signal API
Signal API, WebAuthn API'dir ve RP'lerin geçiş anahtarı sağlayıcıda değişiklik sinyali vermesine izin vererek bu karışıklıkları giderir. Üç yöntem vardır:
PublicKeyCredential.signalUnknownCredential
: Bir kimlik bilgisinin mevcut olmadığını gösterir.PublicKeyCredential.signalAllAcceptedCredentials
: Kaydedilmiş kimlik bilgilerinin listesini bildirPublicKeyCredential.signalCurrentUserDetails
: Signal, kullanıcı adını ve/veya görünen adı güncelledi
Kimlik bilgisinin mevcut olmadığını belirtme
const credential = await navigator.credentials.get({ ... });
const payload = credential.toJSON();
const result = await fetch('/login', { ... });
// Detect authentication failure due to lack of the credential
if (result.status === 404) {
// Feature detection
if (PublicKeyCredential.signalUnknownCredential) {
await PublicKeyCredential.signalUnknownCredential({
rpId: "example.com",
credentialId: "vI0qOggiE3OT01ZRWBYz5l4MEgU0c7PmAA" // base64url encoded credential ID
});
} else {
// Encourage the user to delete the passkey from the password manager nevertheless.
...
}
}
RP, bir RP kimliği ve kimlik bilgisi kimliği ile PublicKeyCredential.signalUnknownCredential()
işlevini çağırarak geçiş anahtarı sağlayıcıya belirtilen kimlik bilgisinin kaldırıldığını veya mevcut olmadığını bildirebilir. Bu sinyalin nasıl ele alınacağı geçiş anahtarı sağlayıcının sorumluluğundadır. Ancak kullanıcının ilişkili kimlik bilgisi mevcut olmadığından geçiş anahtarıyla oturum açmaması için ilişkili geçiş anahtarının kaldırılması beklenir.
Bu API, kimlik bilgisi olmadığı için geçiş anahtarı tabanlı oturum açma işlemi başarısız olduğunda çağrılabilir. Bu şekilde, RP, kullanıcının ilişkili kimlik bilgisi olmayan bir geçiş anahtarıyla oturum açmaya çalışmasını engelleyebilir. signalAllAcceptedCredentials
yönteminden farklı olarak bu yöntem, kimlik bilgisi kimliklerinin tamamının iletilmesini gerektirmez. Bu nedenle, belirli bir kullanıcı için geçiş anahtarı sayısının açığa çıkmasını önlemek amacıyla kullanıcının kimliği doğrulanmadığında bu yöntem kullanılmalıdır.

Kayıtlı kimlik bilgilerinin listesini işaretleme
// After a user deletes a passkey or a user is signed in.
// Feature detection
if (PublicKeyCredential.signalAllAcceptedCredentials) {
await PublicKeyCredential.signalAllAcceptedCredentials({
rpId: "example.com",
userId: "M2YPl-KGnA8", // base64url encoded user ID
allAcceptedCredentialIds: [ // A list of base64url encoded credential IDs
"vI0qOggiE3OT01ZRWBYz5l4MEgU0c7PmAA",
...
]
});
}
RP, PublicKeyCredential.signalAllAcceptedCredentials()
işlevini bir RP kimliği, kullanıcı kimliği ve depolanan kimlik bilgilerinin kimlik bilgisi kimliği listesiyle çağırarak geçiş anahtarı sağlayıcıyı depolama alanındaki kalan kimlik bilgileri hakkında bilgilendirebilir. Bu sinyalin nasıl ele alınacağı geçiş anahtarı sağlayıcısına bağlıdır. Ancak bu listeyle eşleşmeyen geçiş anahtarlarının kaldırılması beklenir. Böylece kullanıcı, oturum açarken ilişkili kimlik bilgilerinin mevcut olmadığı geçiş anahtarlarını görmez.
Bu API, geçiş anahtarı sağlayıcının geçiş anahtarlarının senkronize bir listesini tutabilmesi için kullanıcı RP'de bir geçiş anahtarını sildiğinde ve her oturum açma işleminde çağrılmalıdır.
Güncellenen kullanıcı adı ve görünen ad sinyali
// After a user updated their username and/or display name
// or a user is signed in.
// Feature detection
if (PublicKeyCredential.signalCurrentUserDetails) {
await PublicKeyCredential.signalCurrentUserDetails({
rpId: "example.com",
userId: "M2YPl-KGnA8", // base64url encoded user ID
name: "a.new.email.address@example.com", // username
displayName: "J. Doe"
});
} else {
}
RP, RP kimliği, kullanıcı kimliği, kullanıcı adı ve görünen ad ile PublicKeyCredential.signalCurrentUserDetails()
işlevini çağırarak geçiş anahtarı sağlayıcıyı güncellenen kullanıcı bilgileri hakkında bilgilendirebilir. Bu sinyalin nasıl ele alınacağı geçiş anahtarı sağlayıcının sorumluluğundadır ancak kullanıcının sahip olduğu geçiş anahtarlarının yeni kullanıcı bilgileriyle güncellenmesi beklenir.
Bu API, kullanıcının kullanıcı adı veya görünen adı güncellendiğinde ve her oturum açma işleminde çağrılabilir. Böylece geçiş anahtarı sağlayıcı, bu bilgileri sunucuyla senkronize tutabilir.

Özet
Signal API, beklenmedik oturum açma hatalarını ortadan kaldırarak daha iyi bir geçiş anahtarı deneyimi oluşturmanıza yardımcı olur. Güvenen taraflar, Signal API ile mevcut kimlik bilgilerinin listesini ve meta verilerini bildirebilir. Böylece, geçiş anahtarlarını geçiş anahtarı sağlayıcıda senkronize tutabilirler.
Geçiş anahtarları hakkında daha fazla bilgi edinmek için Geçiş anahtarlarıyla şifresiz giriş başlıklı makaleyi inceleyin.