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

Passkeys Cheat Sheet. Passkey programları için pratik rehberler, geçiş kalıpları ve KPI'lar.
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.
Son makaleler
⚙️
Karşılaştırmalı 9 WebAuthn Sunucu Uygulama Kütüphanesi
📖
Parallels Geçiş Anahtarları: Mac Üzerinde Windows 11 VM'de Çapraz Cihaz Kimlik Doğrulaması Testi
⚙️
Chrome, Safari ve Firefox'ta Client Hints ve User-Agent
⚙️
Geliştiriciler için Geçiş Anahtarları Kopya Kağıdı
👤
Apple, Windows ve Android'de Geçiş Anahtarı Nasıl Silinir
İ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:
Üçü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.
Canlı demo ile passkeys deneyin.
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:
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
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 studyGeç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:
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.
Güncellemeler ve destek için Passkeys Community'ye katılın.
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:
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):
Kaç kişinin gerçekten passkeys kullandığını görün.
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[]; };
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; } }
<?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; } }
Aşağıdaki tablo, WebAuthn sunucu kütüphanelerine genel bir bakış sunmaktadır:
Son haberler için Passkeys Substack'e abone olun.
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:
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:
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.
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.
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:
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.
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.
Kaç kişinin gerçekten passkeys kullandığını görün.
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, 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 →
Ö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.
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.
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.
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
İlgili makaleler
İçindekiler