Yalnızca OpenSSL 3.
TsgcWSAPIServer_WebAuthn bileşeni, WebAuthn Relying Party sunucusunu uygulamak için basit ama güçlü bir çözüm sunar ve web uygulamanızda parolasız kimlik doğrulamayı etkinleştirir. Bir WebAuthn uygulaması, sunucu tarafı kayıt ve kimlik doğrulamayı işleyen bir WebAuthn sunucusundan ve genellikle bir javascript uygulaması olan istemci tarafı bir uygulamadan oluşur.
WebAuthn, güvenli bağlantıların (SSL/TLS) kullanımını gerektirir, bu nedenle OpenSSL kütüphaneleri dağıtılmalı ve sunucuyla yapılandırılmalıdır.
Yalnızca OpenSSL 3.0.0+ API'si desteklenir, bu nedenle önceki OpenSSL sürümleri çalışmayabilir.
Yapılandırma
TsgcWSAPIServer_WebAuthn, Server özelliği kullanılarak bir HTTP sunucusuna, TsgcWebSocketHTTP_Server veya TsgcWebSocketServer_HTTPAPI öğesine eklenmelidir. Kayıt ve kimlik doğrulama seçeneklerini işleyecek sunucu uç noktalarını ve desteklenen algoritmalar, origin'ler ve daha fazlası gibi WebAuthn seçeneklerini yapılandırabilirsiniz.
Endpoints Options
Burada, HTTP/JavaScript isteklerini WebAuthn'i bir authenticator olarak kullanmak üzere işleyecek sunucu endpoint'lerini yapılandırabilirsiniz. Bileşen zaten varsayılan endpoint'lerle yapılandırılmıştır, ancak ihtiyaçlarınıza uyacak şekilde hepsini değiştirebilirsiniz.
- AuthenticationOptions: varsayılan olarak /sgcWebAuthn/Authentication/Options
- AuthenticationVerify: varsayılan olarak /sgcWebAuthn/Authentication/Verify'dir
- RegistrationOptions: varsayılan olarak /sgcWebAuthn/Registration/Options'tır
-
RegistrationVerify: varsayılan olarak /sgcWebAuthn/Registration/Verify'dir
- Webauthn: varsayılan olarak kullanılan javascript kütüphanesini içerir. Bu özelliği devre dışı bırakabilir ve kendi webauthn kütüphanenizi kullanabilirsiniz.
- Test: varsayılan olarak devre dışıdır, yalnızca WebAuthn işlevini test etmek için kullanın.
Örnek: sunucunuz www.test.com etki alanında dinliyorsa, kimlik doğrulama seçeneklerine yapılan istek varsayılan olarak http://www.test.com/sgcWebAuthn/Authentication/Options olacaktır
WebAuthn Seçenekleri
Bu özellikte WebAuthn Sunucu Bileşeninin ana seçeneklerini yapılandırabilirsiniz.
- RelyingParty: sunucunun DNS adının tanımlanması gereken zorunlu bir özellik. Örnek: sunucu www.test.com etki alanında çalışıyorsa, bu özelliği "www.test.com" olarak ayarlayın.
WebAuthn, kimlik avı ve siteler arası saldırıları önlemek için gerekli olan aynı kaynak ilkesi kısıtlamalarını uygulamak için kaynakları (origins) kullanır. WebAuthn kayıt ve kimlik doğrulama işlemleri sırasında, kaynak tarayıcı ve kimlik doğrulayıcı tarafından sıkı bir şekilde doğrulanır.
- Origins: İstekler farklı origin'lerden gelebiliyorsa, ek origin'leri ayarlamak için Origin özelliğini kullanın. Örnek: istekler login.test.com ve www.test.co.uk adreslerinden gelebiliyorsa, Origins özelliğini şu değerlerle yapılandırın: https://login.test.com ve https://www.test.co.uk
- TopOrigins: Normalde WebAuthn, çağıran çerçevenin kaynağına (yani navigator.credentials.create() veya navigator.credentials.get() çağıranın) güvenir. Ancak web sayfaları, üst düzey sayfadan farklı bir kaynaktan gelebilen iframe'lere gömülebilir. Bu, kötüye kullanım veya clickjacking tarzı saldırılar için potansiyel açar. Bunu azaltmak için, WebAuthn Level 2 spesifikasyonu, TopOrigins'i tanımlayabileceğiniz TopOrigin'i sunar.
WebAuthn'da crossOrigin, WebAuthn işleminin, üst düzey gezinme bağlamından farklı bir origin'den gömülü bir iframe gibi bir çapraz origin bağlamından gerçekleştirilip gerçekleştirilmediğini belirten bir boolean parametredir.
Bu parametre, tarayıcıların ve authenticator'ların gömülü ortamlarda kimlik doğrulama isteklerini güvenli bir şekilde işlemesine yardımcı olmak için tanıtıldı — modern web uygulamalarında yaygın bir senaryo.
- AllowCrossOrigins: true ise, kaynaklar arası bir iframe'den (örneğin https://app.example.org adresindeki bir sayfaya gömülü https://auth.example.com adresindeki bir iframe) yapılan isteklere izin verildiğini gösterir. Varsayılan olarak devre dışıdır.
WebAuthn, açık anahtar kimlik bilgisi oluşturma ve doğrulama için çeşitli kriptografik algoritmaları destekler. Bu algoritmalar, kimlik bilgisi kaydı (navigator.credentials.create() ile) ve kimlik doğrulama (navigator.credentials.get() ile) sırasında kullanılır ve asimetrik anahtar çiftleri kullanarak challenge'ların güvenli bir şekilde imzalanmasını ve doğrulanmasını sağlar. Sunucu, en yaygın algoritmalar olan ES256 ve RS256 ile varsayılan olarak yapılandırılmıştır. Hangi algoritmaların desteklendiğini Algorithms özelliğinden istediğiniz zaman değiştirebilirsiniz. Aşağıdaki algoritmalar desteklenir:
- ES256
-
ES384
- ES512
- RS256
- RS384
- RS512
- PS256
- PS384
- PS512
- RS1
- EdDSA
WebAuthn'da, attestation, isteğe bağlı bir mekanizmadır ve authenticator'ın (örn. cihaz veya güvenlik anahtarı), kimlik bilgisi oluşturma sırasında üreticisi, modeli ve güvenlik özellikleri hakkında bilgi sağlamasına olanak tanır. Bu bilgi, Relying Party'nin (RP) authenticator'a güvenip güvenmeyeceğine karar vermesine yardımcı olur.
Farklı attestation biçimleri, bu verilerin nasıl yapılandırıldığını ve doğrulandığını tanımlar. Yaygın olarak kullanılan üç biçim android-key, packed ve fido-u2f, apple veya none gibi diğerleridir. Varsayılan olarak tüm attestation biçimleri etkindir. Desteklenen attestation biçimlerinin listesini aşağıda bulabilirsiniz:
- NoneAttestation: bu durumda hiçbir attestation verisi döndürülmez. Cihaz tanımlayıcılarının açığa çıkmasını önleyerek kullanıcı gizliliğini önceliklendirir. Cihaz kaynağıyla ilgilenmeyen uygulamalarda yaygındır.
- PackedAttestation: birçok authenticator tarafından kullanılan esnek, kompakt bir formattır. Authenticator bir attestation sertifikası ve imzası döndürür. Şunlar olabilir: Full attestation: Satıcı tarafından sağlanan bir anahtar ve sertifikayla imzalanır veya Self attestation: Kimlik bilgisi özel anahtarı kullanılarak imzalanır. Farklı platformlarda (örneğin, YubiKey, Windows Hello) en yaygın kullanılanıdır.
- TPMAttestation: Trusted Platform Module (TPM) içeren cihazlar tarafından kullanılır. Attestation, TPM'den gelen anahtarlar kullanılarak imzalanır ve bir sertifika zinciri içerir. TPM çiplerine sahip Enterprise masaüstü/dizüstü bilgisayarlar tarafından kullanılır (örneğin Windows makineleri).
- AndroidKeyAttestation: Android Keystore'lu Android cihazları tarafından kullanılır. Anahtar donanımda oluşturulur ve attestation, cihaz üreticisi tarafından verilen bir sertifika zinciriyle imzalanmış bilgiler içerir. Donanım destekli keystore'lu (TEE veya StrongBox) Android telefonlar tarafından kullanılır.
- AppleAttestation: Touch ID ve Face ID gibi Apple platform kimlik doğrulayıcıları tarafından kullanılır. Attestation, Apple'ın dahili API'leri tarafından oluşturulur ve özel bir sertifika formatı içerir. Apple biyometrisi kullanılarak Safari'de kullanılır.
- FidoU2FAttestation: FIDO U2F kimlik doğrulayıcıları tarafından kullanılan eski attestation biçimi. U2F uyumlu bir sertifika ve imza döndürür. FIDO U2F'yi destekleyen eski güvenlik anahtarları (örneğin, erken YubiKey'ler) tarafından kullanılır.
WebAuthn API'de, AllowCredentials, kimlik doğrulama süreci sırasında (navigator.credentials.get() aracılığıyla) kullanılan isteğe bağlı bir alandır. Belirli bir Relying Party (RP) için kullanıcının kimliğini doğrulamasına izin verilen kimlik bilgisi ID'lerinin bir listesini belirtir. Bu mekanizma, RP'nin bir oturum açma girişimi için hangi kimlik bilgilerinin geçerli sayılacağını kontrol etmesine olanak tanır. credentials özelliği aşağıdaki alanlara sahiptir:
- AllowCredentials: etkinleştirilirse (varsayılan olarak false) kullanıcının kimliğini doğrulamasına izin verilen kimlik bilgisi kimliklerinin bir listesini belirtir
- ExcludeCredentials: bir kullanıcı adı verildiğinde, sunucu bileşeninde halihazırda saklanan tüm mevcut kimlik bilgilerini gösterir.
- Limit: ExcludeCredentials true olduğunda gönderilecek maksimum kimlik bilgisi sayısı.
WebAuthn Protokolü
- WebAuthn Kaydı: Sunucu bir challenge üretir ve onu istemciye gönderir; istemci bir anahtar çifti oluşturmak için bir authenticator (örn. güvenlik anahtarı veya biyometrik cihaz) kullanır. Açık anahtar geri gönderilir ve gelecekteki kimlik doğrulaması için sunucu tarafından saklanır. Kayıt akışı olayları hakkında daha fazla bilgiyi aşağıda bulun:
- WebAuthn Kimlik Doğrulama: Sunucu istemciye bir challenge gönderir; istemci, onu authenticator'da saklanan daha önce kaydedilmiş özel anahtarı kullanarak imzalar. İmzalanan yanıt, kullanıcının kimliğini doğrulamak için saklanan açık anahtar kullanılarak sunucu tarafından doğrulanır. Kimlik doğrulama akışı olayları hakkında daha fazla bilgiyi aşağıda bulun:
- MDS: FIDO Alliance Metadata Service (MDS), kimlik doğrulayıcı attestation'ını doğrulamak ve cihaz modelinin gerçekliğini kanıtlamak için ilgili taraflar (relying party) tarafından kullanılan, Metadata Statement'lerin merkezi bir deposudur.

- Authorization: İstemci, kimlik doğrulama akışı sırasında sunucudan bir bearer token isteyebilir. Bu token, passkey'leri kullanarak oturum açmaya gerek kalmadan yeni bir WebSocket veya HTTP bağlantısı açmak için daha sonra kullanılabilir.