Get your free and exclusive +45-page Authentication Analytics Whitepaper
Genel bakışa dön

Karşılaştırmalı 9 WebAuthn Sunucu Uygulama Kütüphanesi

Geçiş anahtarları sunmak için doğru WebAuthn sunucu kütüphanesini bulmanıza yardımcı olacak bu yazıda 9 kütüphaneyi karşılaştırıyor ve doğru seçimi yapmanız için stratejiler sunuyoruz.

Blog-Post-Author
Nicolai

Oluşturuldu: 15 Aralık 2023

Güncellendi: 27 Temmuz 2026

Karşılaştırmalı 9 WebAuthn Sunucu Uygulama Kütüphanesi

Bu sayfa otomatik olarak çevrildi. Orijinal İngilizce sürümü buradan okuyun.

PasskeysCheatsheet Icon

Passkeys Cheat Sheet. Passkey programları için pratik rehberler, geçiş kalıpları ve KPI'lar.

Cheat sheet al
Önemli bilgiler
  • SimpleWebAuthn (TypeScript, 1.000 GitHub yıldızı) en sezgisel olarak derecelendirilmiştir ve geçiş anahtarı (passkey) uygulaması için hem bir sunucu kütüphanesi hem de bir frontend tarayıcı kütüphanesi sunma konusunda benzersizdir.
  • Geçiş anahtarı kimlik doğrulaması, parola kimlik doğrulaması için gereken bir API uç noktasına karşılık en az dört arka uç API uç noktası gerektirir, bu da kriptografik karmaşıklığı yönetmek için bir WebAuthn sunucu kütüphanesini zorunlu kılar.
  • py_webauthn (Python) hızlı testler için idealdir: kimlik doğrulama seçenekleri tek bir metot çağrısı ile oluşturulur ve framework yapılandırması gerektirmez.
  • webauthn-framework (PHP/Symfony, 347 yıldız) en kapsamlı kavramsal belgeleri sunarak geçiş anahtarı temellerini sıfırdan öğrenen geliştiriciler için en iyisi haline gelir.
  • Dilinize uyan hiçbir kütüphane olmadığında, ticari ve açık kaynaklı projelerde en geniş benimsenme oranına sahip olmaları nedeniyle go-webauthn veya SimpleWebAuthn önerilen geri dönüş seçenekleridir.

1. Giriş: WebAuthn Sunucu Uygulaması#

Güvenli ve basit kullanıcı kimlik doğrulaması sağlamak, 2024'te dijital şirketler için sahip olunması gereken bir zorunluluktur. Yeni giriş standardı olan geçiş anahtarları (passkeys), bu ihtiyaçları karşılamak için ideal çözümdür. Ancak, geçiş anahtarlarının kullanıcı için sağladığı gelişmiş kullanıcı deneyimi ve güvenlik, bir geliştirici olarak bunları uygularken belirli bir bedele sahiptir. Uygulama zorluğu, geçiş anahtarlarının nispeten yeni olmasından - hem kullanıcılar hem de geliştiriciler için - ve bunların uygulanmasının parola tabanlı kimlik doğrulamasına kıyasla oldukça zorlayıcı olabilmesinden kaynaklanmaktadır. Nitekim, parola tabanlı kimlik doğrulamasında bir API uç noktası yeterliyken, geçiş anahtarı kimlik doğrulaması için en az dört API uç noktasına ihtiyacınız vardır.

Geçiş anahtarı kimlik doğrulaması sağlamak için sunucu tarafındaki temel bileşenlerden biri WebAuthn sunucusudur (yeşil kütüphane kısmı). WebAuthn sunucusunun daha geniş kurumsal teknoloji yığını entegrasyonuna nasıl uyum sağladığına dair kapsamlı bir rehber için özel makalemizi inceleyin.

Kaynak: Yubico

Bu blog yazısında, çeşitli WebAuthn sunucu kütüphanelerini / paketlerini / SDK'larını karşılaştırıyor, aralarındaki farkları analiz ediyor ve geçiş anahtarı uygulamasına yeni başlayan geliştiriciler için bir öneri sunuyoruz.

2. Geçiş Anahtarlarını Kendi Başıma Nasıl Uygulayabilirim?#

İlk etapta neden bir WebAuthn sunucu kütüphanesine ihtiyaç duyulduğunu daha iyi anlamak için geçiş anahtarlarının nasıl uygulanabileceğine bir göz atalım. Prensip olarak, geçiş anahtarlarını web sitelerine ve uygulamalara entegre etmenin iki yolu vardır:

  1. Üçüncü taraf bir geçiş anahtarı çözümü kullanmak (örn. Corbado)
  2. Aşağıdaki WebAuthn sunucu kütüphanelerinden birini kullanarak geçiş anahtarlarını kendi başınıza uygulamak

Üçüncü taraf bir geçiş anahtarı çözümünün entegrasyonu kolay olsa ve genellikle önemli miktarda mühendislik zamanı (özellikle uç durumlar, bakım, kurtarma, geri dönüşler ve geliştirilmiş geçiş anahtarı kullanıcı deneyimi için) tasarrufu sağlasa da, bazı geliştiriciler her şeyi kendileri uygulamayı tercih eder.

Demo Icon

Canlı demo ile passkeys deneyin.

Passkeys dene

Kendi başınıza yapacağınız geçiş anahtarı uygulamasının nasıl çalıştığına bir bakalım. Çok temel bir kurulumda, kayıt olma (sign-up) ve kimlik doğrulama (login) mekanizmasına ihtiyaç vardır. Her iki süreç de, genel akış benzer bir şema izlese de, WebAuthn törenleri (ceremonies) olarak adlandırılır ve farklı şekilde işlenir:

  1. Frontend (tarayıcı) bir kayıt veya giriş isteği başlatır ve bir backend API uç noktasını çağırır.
  2. Backend, WebAuthn kayıt veya giriş parametreleri oluşturur. Bunlar sırasıyla PublicKeyCredentialCreationOptions ve PublicKeyCredentialRequestOptions olarak adlandırılır. Bu WebAuthn parametrelerinin en önemli kısımlarından biri challenge'dır (meydan okuma). WebAuthn parametreleri daha sonra frontend'e geri gönderilir.
  3. Frontend bu WebAuthn parametrelerini alır ve yerel cihaz kimlik doğrulama sistemini (örn. Face ID, Touch ID, Windows Hello aracılığıyla) kullanarak kullanıcının kimliğini doğrulamak için kullanır. Kayıt süreçlerinde yeni bir açık-gizli anahtar (public-private-key) çifti oluşturulur, gizli anahtar yerel olarak saklanırken açık anahtar sunucuya gönderilir. Giriş süreçlerinde, challenge, geçiş anahtarının gizli anahtarı kullanılarak imzalanır ve başka bir backend API uç noktasına gönderilir.
  4. Kayıt süreçlerinde, backend açık anahtarı alır ve saklar. Giriş işlemlerinde, backend imzalı challenge'ı alır ve bütünlüğünü WebAuthn sunucusunu kullanarak doğrular.

Her kayıt / giriş süreci bu adımları içerdiğinden, backend'in kullanıcıları, geçiş anahtarlarını ve kayıt / giriş isteklerini takip etmesi gerekir.

Igor Gjorgjioski Testimonial

Igor Gjorgjioski

Head of Digital Channels & Platform Enablement, VicRoads

We hit 80% mobile passkey activation across 5M+ users without replacing our IDP.

See how VicRoads scaled passkeys to 5M+ users — alongside their existing IDP.

Read the case study

Geçiş anahtarlarının çalışma şekli ve basit bir uygulamanın (üçüncü taraf bir geçiş anahtarı çözümü kullanmadan) nasıl göründüğü hakkında daha derinlemesine bilgi edinmek isterseniz, buradaki blog makalemizi inceleyebilirsiniz.

Gerçek hayat senaryolarında, geçiş anahtarlarını kendiniz uygularken, bunun sadece gerekli API uç noktalarını ve kayıt ile giriş yapmak için temel uygulamayı sağlamaktan ibaret olmadığını aklınızda bulundurun. Bunun ötesinde, aşağıdaki konuları ve kullanım durumlarını ele almanız gerekir:

  • Cihaz yönetimi
  • Platformlar ve cihazlar arası giriş akışları
  • Kullanıcı yönetimi
  • Oturum yönetimi
  • Cihazın geçiş anahtarı hazırlığı tespiti
  • Kullanıcı eğitimi
  • Geri dönüş (fallback) kimlik doğrulama seçenekleri
  • Kurtarma mekanizmaları
  • Hesap paylaşımı seçenekleri
  • Yüksek benimsenme için optimize edilmiş geçiş anahtarı oluşturma ve geçiş anahtarı giriş akışları

Bununla birlikte, temel geçiş anahtarı uygulaması için yalnızca WebAuthn standardına uymanız yeterlidir. İyi bilinen ve desteklenen bir WebAuthn sunucu kütüphanesini uygulamak genellikle yeterlidir. Kütüphane, WebAuthn sunucu parametrelerini oluşturur ve giriş challenge'larını doğrular, temel olarak kriptografik ve en karmaşık kısmı sizin için devralır.

Slack Icon

Güncellemeler ve destek için Passkeys Community'ye katılın.

Katıl

3. WebAuthn Sunucu Backend Kütüphaneleri: Karşılaştırma#

Analiz edilen tüm WebAuthn sunucu kütüphaneleri, geçiş anahtarı kimlik doğrulaması sunmak için gerekli işlevleri sağlar. Bu nedenle, aşağıdaki kriterlere özel önem verdik:

  • Kimlik Doğrulayıcı (Authenticator) Seçim Kriterleri: Belirli davranışlar ve güvenlik özellikleri (örn. resident (yerleşik) anahtarların oluşturulmasını zorlamak) için tercihleri nasıl belirleyebilirsiniz?
  • Genel Ayarlar: Gerekli yapılandırmayı ne kadar merkezileştirebilirsiniz?
  • Belgelendirme: WebAuthn sunucu kütüphanesi ne kadar iyi belgelenmiş ve takip etmesi kolay mı?
  • Örnekler: Referans olarak alabileceğiniz herhangi bir örnek uygulama var mı?

Aşağıdaki WebAuthn sunucu kütüphaneleri analiz edilmiştir (Aralık 2023 itibarıyla azalan GitHub yıldızı sayısına göre sıralanmıştır):

StateOfPasskeys Icon

Kaç kişinin gerçekten passkeys kullandığını görün.

Adoption verilerini gör

3.1 TypeScript: SimpleWebAuthn#

  • Programlama Dili: Typescript
  • Framework: Node.js
  • Yazar: Matthew Miller (Duo Security / Cisco)
  • Yıldız Sayısı: 1000
  • Kullanan: 781
  • Katkıda Bulunanlar: 19
  • FIDO Uyumluluğu: Evet
  • Genel Ayarlar: Hayır
  • Kimlik Doğrulayıcı Seçim Kriterleri: W3C tarafından önerildiği gibi (authenticatorAttachment, residentKey, requireResidentKey ve userVerification değişkenlerini içermelidir; bu değişkenler W3C sayfasında da açıklanmıştır)
  • Belgelendirme: Hızlı kurulum ve kullanım kolaylığına odaklanan, iyi yapılandırılmış; geçiş anahtarı bilgisini içerir, örn. geçiş anahtarlarının ne olduğunu ve nasıl çalıştıklarını açıklar
  • Örnekler: Belgelerde örnek proje mevcuttur
  • Önerilen veri yapıları:
type UserModel = { id: string; username: string; currentChallenge?: string; }; /** * Kimlik doğrulayıcıların, ideal olarak belirli bir UserModel'e * dış anahtar (foreign key) ile bağlı kendi veritabanı * tablosuna sahip olması şiddetle tavsiye edilir. * * Aşağıdaki "SQL" etiketleri sütun veri tipleri için önerilerdir * ve kayıt sırasında alınan verilerin sonraki kimlik doğrulamalarda * kullanılmak üzere en iyi nasıl saklanacağını belirtir. */ type Authenticator = { // SQL: base64url'ye kodlayın, ardından `TEXT` olarak saklayın. Bu sütunu indeksleyin credentialID: Uint8Array; // SQL: Ham baytları `BYTEA`/`BLOB`/vb. olarak saklayın credentialPublicKey: Uint8Array; // SQL: Bazı kimlik doğrulayıcılar atomik zaman damgalarını sayaç olarak döndürdüğü için `BIGINT` düşünün counter: number; // SQL: `VARCHAR(32)` veya benzeri, mümkün olan en uzun değer şu anda 12 karakterdir // Örn: 'singleDevice' | 'multiDevice' credentialDeviceType: CredentialDeviceType; // SQL: `BOOL` veya desteklenen benzer bir tür credentialBackedUp: boolean; // SQL: `VARCHAR(255)` ve dize dizisini bir CSV dizesi olarak saklayın // Örn: ['usb' | 'ble' | 'nfc' | 'internal'] transports?: AuthenticatorTransport[]; };
  • Diğer Özellikler: Harika bir WebAuthn yanıtları için WebAuthn Hata Ayıklayıcısı (Debugger) vardır ve sadece bir backend / sunucu kütüphanesi değil, aynı zamanda frontend için de bir kütüphane sunar (temelde istemcideki Web Authentication API'lerinin bazılarını sarmalar)
  • Kişisel Değerlendirme: Şimdiye kadar görülen en sezgisel kurulum ve oldukça basit. Dahası, istemci uygulamalarına yardımcı olmak için bir tarayıcı kütüphanesi de sunan az sayıdaki kütüphaneden biri olması onu oldukça olağanüstü kılıyor. Kütüphanenin yazarı WebAuthn / geçiş anahtarı topluluğunda oldukça aktiftir.
  • GitHub Bağlantısı: https://github.com/MasterKale/SimpleWebAuthn

3.2 .NET: fido2-net-lib#

  • Programlama Dili: C#
  • Framework: .NET
  • Yazarlar: Anders Åberg, Alex Seigler
  • Yıldız Sayısı: 962
  • Kullanan: 200
  • Katkıda Bulunanlar: 40
  • FIDO Uyumluluğu: Evet
  • Genel Ayarlar: Evet
  • Kimlik Doğrulayıcı Seçim Kriterleri: W3C tarafından önerildiği gibi
  • Belgelendirme: Sadece birkaç örneğin yer aldığı Benioku (Readme) dosyası, kütüphanenin web sitesinde bazı geçiş anahtarı zekası (passkey intelligence) bilgileri
  • Örnekler: Örnek entegrasyonu göstermek için kullanılabilir demo denetleyicisi (controller) ve örnek kimlik bilgisi deposu (credential store)
  • Önerilen veri yapısı:
public class StoredCredential { /// <summary> /// Ortak anahtar kimlik bilgisi kaynağının Kimlik Bilgisi Kimliği (Credential ID). /// </summary> public byte[] Id { get; set; } /// <summary> /// Ortak anahtar kimlik bilgisi kaynağının ortak anahtarı. /// </summary> public byte[] PublicKey { get; set; } /// <summary> /// Ortak anahtar kimlik bilgisi kaynağını kullanan herhangi bir törenden (ceremony) gelen kimlik doğrulayıcı verilerindeki imza sayacının (signature counter) en son değeri. /// </summary> public uint SignCount { get; set; } /// <summary> /// Ortak anahtar kimlik bilgisi kaynağı kaydedildiğinde getTransports() öğesinden döndürülen değer. /// </summary> public AuthenticatorTransport[] Transports { get; set; } /// <summary> /// Ortak anahtar kimlik bilgisi kaynağı oluşturulduğunda BE bayrağının (flag) değeri. /// </summary> public bool IsBackupEligible { get; set; } /// <summary> /// Ortak anahtar kimlik bilgisi kaynağını kullanan herhangi bir törenden gelen kimlik doğrulayıcı verilerindeki BS bayrağının en son değeri. /// </summary> public bool IsBackedUp { get; set; } /// <summary> /// Ortak anahtar kimlik bilgisi kaynağı kaydedildiğinde attestationObject niteliğinin (attribute) değeri. /// Bunun saklanması, Dayanılan Tarafın (Relying Party) kimlik bilgisinin onay beyanına (attestation statement) daha sonra başvurmasını sağlar. /// </summary> public byte[] AttestationObject { get; set; } /// <summary> /// Ortak anahtar kimlik bilgisi kaynağı kaydedildiğinde clientDataJSON niteliğinin değeri. /// Bunun yukarıdaki attestationObject öğesiyle birlikte saklanması, Dayanılan Tarafın onay imzasını (attestation signature) daha sonra yeniden doğrulamasını sağlar. /// </summary> public byte[] AttestationClientDataJson { get; set; } public List<byte[]> DevicePublicKeys { get; set; } public byte[] UserId { get; set; } public PublicKeyCredentialDescriptor Descriptor { get; set; } public byte[] UserHandle { get; set; } public string AttestationFormat { get; set; } public DateTimeOffset RegDate { get; set; } public Guid AaGuid { get; set; } }
  • Diğer Özellikler: Bitwarden tarafından kullanılmaktadır (passwordless.dev girişimi Bitwarden tarafından satın alınmıştır)
  • Kişisel Değerlendirme: İyi miktarda ek materyale sahip geliştirici dostu kütüphane
  • GitHub Bağlantısı: https://github.com/passwordless-lib/fido2-net-lib

3.3 Python: py_webauthn#

  • Programlama Dili: Python
  • Framework: Belirli değil
  • Yazar: Duo Labs
  • Yıldız Sayısı: 727
  • Kullanan: 912
  • Katkıda Bulunanlar: 23
  • FIDO Uyumluluğu: Mevcut Değil (N/A)
  • Genel Ayarlar: Hayır
  • Kimlik Doğrulayıcı Seçim Kriterleri: W3C tarafından önerildiği gibi
  • Belgelendirme: Çok az veya hiç yok, önceden geçiş anahtarı bilgisi gereklidir
  • Örnekler: Kayıt ve giriş için küçük kod örnekleri dâhil edilmiştir
  • Önerilen veri yapısı: Mevcut Değil (N/A)
  • Diğer Özellikler: Python >= 3.8 gerektirir
  • Kişisel Değerlendirme: Az sayıda dosyaya sahip nispeten kompakt bir kütüphane, kısa sürede genel bir bakış elde edebilirsiniz.
  • GitHub Bağlantısı: https://github.com/duo-labs/py_webauthn

3.4 Ruby: webauthn-ruby#

  • Programlama Dili: Ruby
  • Framework: Ruby on Rails
  • Yazar: Cedarcode
  • Yıldız Sayısı: 580
  • Kullanan: 679
  • Gem İndirmeleri: 18 Milyon
  • Katkıda Bulunanlar: 27
  • FIDO Uyumluluğu: Evet
  • Genel ayarlar: Evet
  • Kimlik Doğrulayıcı Seçim Kriterleri: W3C tarafından önerildiği gibi
  • Belgelendirme: Readme (Benioku) dosyası tek belgelendirme kaynağıdır
  • Örnekler: Mevcut Değil (N/A)
  • Önerilen veri yapısı: Mevcut Değil (N/A)
  • Diğer Özellikler: Bu kütüphane için sarmalayıcılar (wrappers) da mevcuttur (warden-webauthn, devise-passkeys)
  • Kişisel Değerlendirme: Ek materyal oldukça sınırlı olduğu için, bu kütüphaneyi yalnızca hem Ruby hem de Geçiş Anahtarlarına aşinaysanız öneririz
  • GitHub Bağlantısı: https://github.com/cedarcode/webauthn-ruby

3.5 Go: go-webauthn#

  • Programlama Dili: Go
  • Framework: Gin, Echo, vb. gibi Go tabanlı framework'ler
  • Yazar: Başlangıçta Duo Labs / James Elliott tarafından devam ettiriliyor
  • Yıldız Sayısı: 480
  • Kullanan: 280
  • Katkıda Bulunanlar: 18
  • FIDO Uyumluluğu: Evet
  • Genel Ayarlar: Evet
  • Kimlik Doğrulayıcı Seçim Kriterleri: W3C tarafından önerildiği gibi
  • Belgelendirme: Bazı örneklerin yer aldığı Readme dosyası tek belgelendirme kaynağıdır
  • Örnekler: Örnek depo (repo) mevcuttur
  • Önerilen Veri Yapısı: Mevcut Değil (N/A)
  • Diğer Özellikler: Çok sayıda dosya, genel bir bakış elde etmek biraz zaman alır
  • Kişisel Değerlendirme: Alıştıktan sonra kullanımı kolay popüler bir kütüphane, ancak önceden biraz geçiş anahtarı bilgisi (Nasıl çalışırlar, prosedürler neye benzer vb.) edinmenizi öneririz.
  • GitHub Bağlantısı: https://github.com/go-webauthn/webauthn

3.6 Java: java-webauthn-server#

  • Programlama Dili: Java
  • Framework: Maven / Gradle
  • Yazar: Yubico
  • Yıldız Sayısı: 391
  • Kullanan: Mevcut Değil (N/A)
  • Katkıda Bulunanlar: 27
  • FIDO Uyumluluğu: Mevcut Değil (N/A)
  • Genel Ayarlar: Evet
  • Kimlik Doğrulayıcı Seçim Kriterleri: W3C tarafından önerildiği gibi.
  • Belgelendirme: Readme dosyası tek belge kaynağıdır, ancak oldukça detaylıdır
  • Örnekler: Mevcut Değil (N/A)
  • Önerilen Veri Yapısı: Mevcut Değil (N/A)
  • Diğer Özellikler: Gerekli veritabanı alma yöntemleri hakkında net bir rehberlik sağlayan bir Credential Repository (Kimlik Bilgisi Deposu) arayüzü ile birlikte gelir.
  • Kişisel Değerlendirme: Veritabanını kendiniz yönetmeniz gerekse de, kimlik bilgisi deposu veritabanı tasarım sürecinde önemli ölçüde yardımcı olur. Doğal olarak Java uygulamaları, her niteliğin kendi dosyasında saklanan bir sınıfa ihtiyaç duyması nedeniyle çok sayıda dosya ile birlikte gelir. Bu da genel bir bakış elde etmeyi daha fazla zaman alan bir görev haline getirir.
  • GitHub Bağlantısı: https://github.com/Yubico/java-webauthn-server

3.7 Rust: webauthn-rs#

  • Programlama Dili: Rust
  • Framework: Rust tabanlı (Rocket, Axum, vb.)
  • Yazar: Kanidm Identity Management Project
  • Yıldız Sayısı: 351
  • Kullanan: 617
  • Katkıda Bulunanlar: 25
  • FIDO Uyumluluğu: Mevcut Değil (N/A)
  • Genel Ayarlar: Evet
  • Kimlik Doğrulayıcı Seçim Kriterleri: Çok sınırlı yapılandırma olanakları. Diğer kütüphaneler W3C Standardına tam olarak uygun şekilde uygulanmıştır ve daha büyük bir yapılandırılabilirlik sergiler.
  • Belgelendirme: Otomatik olarak oluşturulmuş teknik belgeler mevcuttur, ancak çok detaylı değildir
  • Örnekler: 3 farklı web framework'ü için örnekler içeren Eğitim (Tutorial) deposu mevcuttur
  • Önerilen Veri Yapısı: Mevcut Değil (N/A)
  • Diğer Özellikler: Kütüphane, SUSE ürün güvenliği tarafından gerçekleştirilen bir güvenlik denetiminden geçmiştir.
  • Kişisel Değerlendirme: Sınırlı yapılandırılabilirlik ve belgeler nedeniyle bu kütüphaneyi yalnızca birincil framework'ünüz Rust tabanlıysa ve geçiş anahtarlarının nasıl çalıştığını biliyorsanız öneririz
  • GitHub Bağlantısı: https://github.com/kanidm/webauthn-rs

3.8 PHP: webauthn-framework#

  • Programlama Dili: PHP
  • Framework: Symfony
  • Yazar: Florent Morselli
  • Yıldız Sayısı: 347
  • Kullanan: Mevcut Değil (N/A)
  • Katkıda Bulunanlar: 18
  • FIDO Uyumluluğu: Evet
  • Genel Ayarlar: Evet
  • Kimlik Doğrulayıcı Seçim Kriterleri: W3C tarafından önerildiği gibi.
  • Belgelendirme: Teknik detayları içeren ve aynı zamanda geçiş anahtarlarını sıfırdan anlatan kapsamlı belgeler
  • Örnekler: Örnek depo mevcuttur
  • Önerilen Veri Yapısı:
<?php declare(strict_types=1); namespace App\Entity; use App\Repository\PublicKeyCredentialSourceRepository; use DateTimeImmutable; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Uid\AbstractUid; use Symfony\Component\Uid\Uuid; use Webauthn\PublicKeyCredentialSource as BasePublicKeyCredentialSource; use Webauthn\TrustPath\TrustPath; #[ORM\Table(name: 'pk_credential_sources')] #[ORM\Entity(repositoryClass: PublicKeyCredentialSourceRepository::class)] class PublicKeyCredentialSource extends BasePublicKeyCredentialSource { #[ORM\Column(type: Types::DATETIME_IMMUTABLE)] public readonly DateTimeImmutable $createdAt; #[ORM\Id] #[ORM\Column(type: Types::STRING, length: 255)] #[ORM\GeneratedValue(strategy: 'NONE')] private string $id; public function __construct( string $publicKeyCredentialId, string $type, array $transports, string $attestationType, TrustPath $trustPath, AbstractUid $aaguid, string $credentialPublicKey, string $userHandle, int $counter ) { $this->id = Uuid::v4()->toRfc4122(); $this->createdAt = new DateTimeImmutable(); parent::__construct($publicKeyCredentialId, $type, $transports, $attestationType, $trustPath, $aaguid, $credentialPublicKey, $userHandle, $counter); } public function getId(): string { return $this->id; } }
  • Diğer Özellikler: Mevcut Değil (N/A)
  • Kişisel Değerlendirme: Geçiş anahtarlarına adım atmak isteyen, ancak daha önceden bilgisi olmayan kişiler için iyi
  • GitHub Bağlantısı: https://github.com/web-auth/webauthn-framework

3.9 Java: webauthn4j#

  • Programlama Dili: Java
  • Framework: Maven
  • Yazar: WebAuthn4j
  • Yıldız Sayısı: 342
  • Kullanan: Mevcut Değil (N/A)
  • Katkıda Bulunanlar: 19
  • FIDO Uyumluluğu: Evet
  • Genel Ayarlar: Evet
  • Kimlik Doğrulayıcı Seçim Kriterleri: W3C tarafından önerilen discouraged (önerilmeyen), preferred (tercih edilen), required (gerekli) değerlerine sahip UserVerificationRequirement parametresi yerine, webauthn4j verificationRequired ve userPrecenseRequired değişkenlerini Boolean olarak sunar
  • Belgelendirme: Kuru, ancak birkaç kod örneği içeren kapsamlı belgeler mevcuttur
  • Örnekler: Örnek depo mevcuttur
  • Önerilen Veri Yapısı: Mevcut Değil (N/A)
  • Diğer Özellikler: Mevcut Değil (N/A)
  • Kişisel Değerlendirme: Belgeleri okumak hızla sıkıcı ve karmaşık hale geliyor, zira geçiş anahtarlarının arkasındaki kavrama değil, yalnızca işlevselliğe odaklanan tek bir büyük sayfadan oluşuyor.
  • GitHub Bağlantısı: https://github.com/webauthn4j/webauthn4j

Aşağıdaki tablo, WebAuthn sunucu kütüphanelerine genel bir bakış sunmaktadır:

Substack Icon

Son haberler için Passkeys Substack'e abone olun.

Abone ol

4. Öneriler: WebAuthn Kütüphane Manzarasında Gezinmek#

4.1 1. Adım: WebAuthn Kütüphanenizi Seçin#

Kütüphanelerin çoğu eşit derecede güçlü olduğundan ve WebAuthn standardını uyguladığından, aşağıdaki karar ağacını (decision-tree) öneriyoruz:

  • Framework'ünüzde ve Programlama Dilinizde Bir WebAuthn Sunucu Kütüphanesi Mevcut: Yukarıdaki kütüphanelerden birine bağlı olan framework kütüphanelerini listelemedik (örn. Symfony ve Laravel için kullanılabilen PHP uyarlamaları vardır). Bir framework uygulaması varsa, WebAuthn API çağrılarını mevcut framework yapınıza yerel olarak (natively) uygulamanıza ve depolamayı uygulamak için veritabanı soyutlamanızı (database abstraction) kullanmanıza olanak tanıdığı için bunu seçin.
  • Programlama Dilinizde Bir WebAuthn Sunucu Kütüphanesi Mevcut: Backend API uç noktalarına ihtiyacınız olduğundan, mevcut API uç noktalarınıza yerel olarak yerleştirilebilmesi için yerel programlama dilinizdeki WebAuthn sunucu kütüphanesini seçin.
  • Programlama Dilinizde WebAuthn Sunucu Kütüphanesi Mevcut Değil: Bu durumda Corbado gibi yönetilen bir geçiş anahtarı çözümü kullanmayı düşünmelisiniz. Bu bir seçenek değilse, en büyük benimsenme oranına sahip olmaları, hafif olmaları ve ayrıca birçok ticari ile açık kaynaklı projede kullanılmaları nedeniyle go-webauthn veya SimpleWebAuthn'i öneririz.

Belirli bir projeniz olmadan genel olarak WebAuthn sunucuları hakkında daha fazla bilgi edinmek istiyorsanız, kütüphaneler ve docs ile örnek uygulamalar gibi ek materyalleri arasında bazı farklılıklar olduğundan bazı önerilerde bulunabiliriz. Bu nedenle, geçiş anahtarı uygulama yolculuğuna başlamaya hevesli yazılım geliştiricilerine aşağıdaki uygulamaları seçmelerini tavsiye ederiz:

  • Hızlı Test İçin: py_webauthn paketi, kullanıma hazır kod parçacıkları (snippets) ile anında uygulama sunar. İhtiyacınız olan kimlik doğrulama seçeneklerini tek bir metot çağrısı ile oluşturabilirsiniz. Kütüphaneyi bir framework içine yerleştirmeniz ve yapılandırmanız gerekmediğinden, hızlı testler için idealdir.
  • Sezgisel Uygulama İçin: Typescript ile yazılmış SimpleWebauthn paketi oldukça basit ve geliştirici dostudur. py_webauthn gibi uygulaması çok minimalisttir, ancak ek olarak kimlik doğrulama sürecinde size rehberlik eden belgelerle (docs) birlikte gelir. Ancak py_webauthn'in aksine SimpleWebAuthn, değişiklik yapmadan çalışan net bir örnekle birlikte gelmez.
  • Derinlemesine Anlayış İçin: PHP için webauthn-framework kütüphanesi, geçiş anahtarı kavramlarına odaklanan kapsamlı, yapılandırılmış belgeleriyle öne çıkıyor. İyi miktarda belgeye sahip webauthn4j gibi diğer kütüphanelerle olan temel farklılıklar, belgelerin tasarımı ve canlılığıdır.

WebAuthn'in sunucu tarafında nasıl çalıştığına dair daha derinlemesine bir anlayış için, WebAuthn RFC'sinde yer alan ve yeni bir kimlik bilgisi kaydetme (7.1) ve bir kimlik doğrulama iddiasını (assertion) doğrulama (7.2) için uygulanması gereken her adımı detaylandıran WebAuthn Dayanılan Taraf (Relying Party) İşlemleri adlı çok detaylı bölümü okuyabilirsiniz.

4.2 2. Adım: WebAuthn Sunucu Seçeneklerinizi Belirleyin#

Sahip olduğunuz belirli geçiş anahtarı ve WebAuthn gereksinimlerini değerlendirin. Bu blog yazısında, yalnızca discoverable credentials (keşfedilebilir kimlik bilgileri) olarak geçiş anahtarlarını desteklemek istediğinizi varsaydık. PublicKeyCredentialCreationOptions ve PublicKeyCredentialRequestOptions'ı, WebAuthn sunucu SDK yapılandırmasındaki parametreleri kullanım durumunuz için doğru şekilde ayarlamak üzere istemci tarafındaki navigator.credentials.create() ve navigator.credentials.get() WebAuthn API çağrılarıyla birlikte okuyun.

4.3 3. Adım: Veritabanı Yapısını Tanımlayın#

Tüm WebAuthn sunucu kütüphaneleri için, aşağıdaki bilgileri kalıcı hale getirmek / erişmek için uygun veritabanı yapısını sağlamanız gerekecektir:

  • Kimlik Bilgileri (Credentials)
  • Kullanıcılar (Users)
  • Challenge'lar
  • Kimlik Doğrulayıcılar (Authenticators)

Bazı kütüphaneler için belirli öneriler ve örnekler vardır (yararlı bulduklarımızı yukarıda sunduk). Hangi WebAuthn alanlarının nerede saklanması gerektiğini tam olarak anlamak çok önemlidir. Kullanıcı Kimliği (user.id) için hangi değeri kullanmak istediğinizi belirlemeye özel dikkat gösterin. Burada daha detaylı bir açıklamamız var. Ayrıca, bir kullanıcı geçiş anahtarını sildiğinde ne olacağını da göz önünde bulundurun. Bunun yanı sıra, isteğe bağlı olarak belirli kimlik doğrulayıcıların kullanımını kısıtlayabilirsiniz. Geçiş anahtarlarıyla ilgili geçerli kimlik doğrulayıcıların bir listesi burada bulunabilir. Güvenlik anahtarlarının onay beyanlarını (attestations) desteklemek ve kontrol etmek istiyorsanız, bu tamamen farklı bir hikayedir. Daha fazla bilgiyi burada bulabilirsiniz.

4.4 4. Adım: Kullanıcılarınızın Cihazlarında Test Edin#

Kullanıcılarınızın geçiş anahtarlarını ve geri dönüş (fallback) kimlik doğrulama yöntemlerini hangi cihazlarda kullanacağını belirleyin. Kullanıcılarınızın hangi cihazları, tarayıcıları ve işletim sistemlerini kullandığından emin değilseniz, platformlar, tarayıcılar ve işletim sistemleri genelinde geçiş anahtarı hazırlığına dair en güncel veriler için State of Passkeys'i kontrol edin. Belirli cihazların geçiş anahtarı benimsenmesi ve geçiş anahtarı hazırlığı payı hakkında özel sorularınız varsa, bize ulaşmaktan çekinmeyin. Size daha fazla içgörü sağlamaktan ve bu konuda yardımcı olmaktan mutluluk duyarız (geçiş anahtarı hazırlığıyla ilgili en son blog yazımıza da bakın). Gözlemlenebilirlik perspektifinden, istemci tarafı WebAuthn hatalarını ve sunucu doğrulama retlerini ayrı akışlar olarak tutun; istemci tarafı bucket (kutu) tanımlamaları için WebAuthn hatalarını kullanın. Dahası, Windows 10 ve Linux için özel çözümler bulmanız gerektiğini unutmamalısınız, çünkü bu işletim sistemleri en az (hiç yoksa) geçiş anahtarı desteğini sağlar.

StateOfPasskeys Icon

Kaç kişinin gerçekten passkeys kullandığını görün.

Adoption verilerini gör

5. Sonuç#

Hemen hemen her dil veya framework için artık köklü bir WebAuthn sunucu kütüphanesi mevcuttur. Farklı dillerin kütüphanelerini karşılaştırmak, belirli uygulamaların bariz bir üstünlüğünü göstermiyor. Bunun yerine en aşina olduğunuz framework'ü / programlama dilini kullanmalısınız. Alternatif olarak, WebAuthn'i kendiniz uygulamak istemiyorsanız ve beraberinde gelen tüm işlerle ilgilenmek istemiyorsanız, Corbado gibi amaca yönelik, önceden oluşturulmuş bir geçiş anahtarı kimlik doğrulama çözümünü deneyebilirsiniz. Merkezi geçiş anahtarı olan hepsi bir arada bir kimlik doğrulama çözümü sunan Corbado; harika geçiş anahtarı zekası (passkey intelligence), oturum yönetimi ve geri dönüş kimlik doğrulama yöntemleriyle birlikte gelir, böylece ürününüzü geliştirmeye odaklanabilir ve kimlik doğrulama işini bırakabilirsiniz. Buradan sınırsız kullanıcıyla ücretsiz olarak deneyebilirsiniz.

Corbado

Corbado Hakkında

Corbado, büyük ölçekte tüketici kimlik doğrulaması yöneten CIAM ekipleri için Authentication Intelligence Platform'tur. IDP loglarının ve genel analytics araçlarının göremediğini görmenizi sağlarız: hangi cihazların, OS sürümlerinin, tarayıcıların ve credential manager'ların passkey desteklediğini; kayıtların neden girişe dönüşmediğini; WebAuthn akışının nerede başarısız olduğunu; bir OS ya da tarayıcı güncellemesinin girişi sessizce ne zaman bozduğunu — hem de Okta, Auth0, Ping, Cognito veya kendi IDP'nizi değiştirmeden. İki ürün: Corbado Observe, passkey'ler ve diğer tüm giriş yöntemleri için observability sağlar. Corbado Connect, analytics entegre managed passkey'ler sunar (IDP'nizin yanında). VicRoads, Corbado ile 5M+ kullanıcı için passkey çalıştırıyor (%80+ passkey aktivasyonu). Bir Passkey uzmanıyla görüşün

Sıkça Sorulan Sorular#

Projeme uygun doğru WebAuthn sunucu kütüphanesini nasıl seçerim?#

Öncelikle özel çerçeveniz (framework) için, ardından programlama diliniz için bir kütüphane olup olmadığını kontrol edin. Listelenen tüm kütüphaneler WebAuthn standardını eşit şekilde uyguladığından, seçim kütüphaneler arasındaki özellik farklılıklarından ziyade mevcut teknoloji yığınınıza aşinalığa öncelik vermelidir.

Bir WebAuthn sunucusu oluştururken veritabanımda hangi verileri saklamam gerekir?#

En azından kimlik bilgilerini (credentials), kullanıcıları, challenge (meydan okuma) değerlerini ve kimlik doğrulayıcıları kalıcı hale getirmelisiniz. Kullanıcı Kimliği (userHandle) olarak hangi değeri atadığınıza çok dikkat edin ve kullanıcıların cihazlarından bir geçiş anahtarını silebileceği senaryoları planlayın.

Neden bir kütüphane olmadan sıfırdan WebAuthn sunucu tarafı doğrulamasını uygulayamıyorum?#

WebAuthn sunucu kütüphaneleri en karmaşık kriptografik işlemleri yönetir: PublicKeyCredentialCreationOptions ve PublicKeyCredentialRequestOptions parametrelerini oluşturmak ve imzalı challenge değerlerini doğrulamak. Bunu sıfırdan doğru bir şekilde yapmak, daha önce test edilmiş ve denetlenmiş FIDO uyumlu bir kütüphane kullanmaktan çok daha zordur.

Hangi işletim sistemleri en zayıf geçiş anahtarı desteğine sahiptir ve bir WebAuthn uygulamasında ekstra işleme ihtiyaç duyar?#

Windows 10 ve Linux en düşük geçiş anahtarı (passkey) desteğini sağlar, bu nedenle bu platformlardaki kullanıcılar için özel geri dönüş (fallback) çözümlerine ihtiyaç vardır. İstemci tarafı WebAuthn hatalarını ve sunucu doğrulama retlerini ayrı akışlar olarak izlemek, üretimde işletim sistemine özgü sorunları belirlemeye yardımcı olur.

Corbado’nun passkey geçiş sürecinize ve mevcut authentication stack’inize nasıl uyduğunu görün.

Console’u keşfet

Bu makaleyi paylaş


LinkedInTwitterFacebook