Signal API ile geçiş anahtarlarını sunucunuzdaki kimlik bilgileriyle tutarlı tutun

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, kullanıcılara bu geçiş anahtarları artık sunulmaz.

Uyumluluk

Chrome, Signal API'yi tüm masaüstü platformlarında ve Android'de destekler.

Safari destekliyor ancak henüz uygulanmadı. Firefox henüz görüşünü paylaşmadı.

Google Şifre Yöneticisi, geçiş anahtarlarını sinyali yansıtacak şekilde güncelleyebilir. Masaüstündeki Chrome uzantı tabanlı geçiş anahtarı sağlayıcıları, sinyalin yansıtılıp yansıtılmayacağına karar verir.

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ıların istendiğinde oturum açmak için hangi geçiş anahtarlarını kullanacaklarını belirlemelerine yardımcı olur. Bu özellik, özellikle kullanıcıların farklı geçiş anahtarı sağlayıcılarından ikiden fazla geçiş anahtarı varsa kullanışlı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 neden olabileceği birkaç durum vardır.

İlk durumda, kullanıcı sunucudaki bir kimlik bilgisini siler. Bu işlem, geçiş anahtarını geçiş anahtarı sağlayıcısında olduğu gibi bırakır. Kullanıcı bir sonraki geçiş anahtarıyla oturum açma denemesinde geçiş anahtarı sağlayıcı, geçiş anahtarını kullanıcıya sunmaya devam eder. Ancak sunucu, silinen genel anahtarı doğrulayamadığından oturum açma girişimi başarısız olur.

İkinci durum ise kullanıcının sunucuda 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üncellenmiş olmasına 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 eder. İdeal olarak bunlar senkronize edilir.

Signal API

Signal API, RP'lerin geçiş anahtarı sağlayıcıya değişiklikleri bildirmesine olanak tanıyarak bu tutarsızlıkları çözen bir WebAuthn API'sidir. Üç yöntem vardır:

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 işleneceğini geçiş anahtarı sağlayıcı belirler ancak kullanıcıların ilişkili kimlik bilgisi olmayan bir geçiş anahtarıyla oturum açmaya çalışmaması için ilişkili geçiş anahtarı kaldırılmalıdır.

Browser Support

  • Chrome: 132.
  • Edge: 132.
  • Firefox: not supported.
  • Safari: 26.

Source

Bu API, kimlik bilgisi eksik olduğundan geçiş anahtarı tabanlı oturum açma işlemi başarısız olduğunda çağrılabilir. Bu şekilde, RP, kullanıcıları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öntemde kimlik bilgisi kimliklerinin tamamının iletilmesi gerekmez. Bu nedenle, belirli bir kullanıcının geçiş anahtarı sayısının gösterilmesini önlemek için kullanıcı kimliği doğrulanmadığında bu yöntemi kullanın.

Chrome'da Google Şifre Yöneticisi'nden geçiş anahtarı silindiğinde gösterilen iletişim kutusu.
Chrome'daki Google Şifre Yöneticisi'nden bir geçiş anahtarı silindiğinde gösterilen iletişim kutusu.

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",
      ...
    ]
  });
}

Kullanıcı oturum açtıktan veya hesap ayarlarını yönettikten sonra PublicKeyCredential.signalAllAcceptedCredentials() simgesini kullanın. Bu kullanıcı için geçerli tüm kimlik bilgilerinin bir listesini sağlarsınız. Geçiş anahtarı sağlayıcı, bu listeyi güvenen taraf için yerel depolama alanıyla karşılaştırır. Geçiş anahtarı sağlayıcı, depolama alanında bulunan ve allAcceptedCredentialIds listesine dahil edilmeyen tüm geçiş anahtarlarını "gizli" olarak işaretler. Sistem artık oturum açma veya otomatik doldurma için bu gizli geçiş anahtarlarını sunmuyor ancak bunlar hemen kalıcı olarak silinmiyor. Bu sayede, gerekirse geri yüklenebiliyor. Buna karşılık, geçiş anahtarı sağlayıcı, allAcceptedCredentialIds içinde bulunan ve "gizli" olarak işaretlenen geçiş anahtarlarını geri yükler. Bu sayede web siteniz, yanlışlıkla gizlenen geçiş anahtarlarını geri yükleyebilir.

Browser Support

  • Chrome: 132.
  • Edge: 132.
  • Firefox: not supported.
  • Safari: 26.

Source

Bu API'yi kullanıcı RP'de bir geçiş anahtarını sildiğinde ve her oturum açma işleminde çağırın. Böylece geçiş anahtarı sağlayıcı, geçiş anahtarlarının senkronize edilmiş bir listesini tutabilir.

Güncellenen kullanıcı adını ve görünen adı bildirme

// 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. Geçiş anahtarı sağlayıcı, bu sinyalin nasıl işleneceğini belirler ancak kullanıcının sahip olduğu geçiş anahtarlarını yeni kullanıcı bilgileriyle güncellemelidir.

Browser Support

  • Chrome: 132.
  • Edge: 132.
  • Firefox: not supported.
  • Safari: 26.

Source

Bu API, geçiş anahtarı sağlayıcının bu bilgileri sunucuyla senkronize tutabilmesi için 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.

Chrome'da Google Şifre Yöneticisi'nde geçiş anahtarı meta verileri güncellendiğinde gösterilen iletişim kutusu.
Chrome'daki Google Şifre Yöneticisi'nde geçiş anahtarı meta verileri güncellendiğinde gösterilen iletişim kutusu.

Ö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. Signal API, güvenen tarafların mevcut kimlik bilgilerinin listesini ve meta verilerini bildirmesine olanak tanır. Böylece, geçiş anahtarı sağlayıcıdaki geçiş anahtarları senkronize tutulabilir.

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