Şifreler hesap güvenliğindeki en zayıf halkadır. Oltalanabilir, sızdırılabilir, yeniden kullanılabilir veya unutulabilirler. Bu yüzden WebAuthn passkeys desteği ekledik - hem daha güvenli hem de daha kullanışlı olan oltalamaya dirençli, şifresiz bir kimlik doğrulama yöntemi.

Passkeys Nedir?

Passkeys, kimlik doğrulama için şifrelerin yerini alan, cihazınızda (telefon, dizüstü bilgisayar, güvenlik anahtarı) depolanan kriptografik kimlik bilgileridir. WebAuthn standardını (FIDO2’nin bir parçası) kullanırlar ve çeşitli avantajlar sağlarlar:

  • Oltalamaya dirençli - Passkeys web sitesinin alan adına bağlıdır, bu yüzden sahte sitelerde kullanılamazlar
  • Sızdırılacak sır yok - Sunucuda sadece açık anahtar saklanır
  • Cihaza bağlı - Özel anahtar asla cihazınızdan çıkmaz
  • Biyometrik korumalı - Genellikle Face ID, Touch ID veya Windows Hello ile korunur
  • Cihazlar arası senkronizasyon - Modern platformlar passkeys’i iCloud, Google veya Microsoft hesapları aracılığıyla cihazlar arasında senkronize eder

Uygulamamız

WebAuthn passkey desteğini mevcut django-allauth kimlik doğrulama yığınımıza entegre ettik, hem web hem de mobil API uç noktaları sağlıyoruz.

Kayıt Akışı

Bir kullanıcı yeni bir passkey kaydettiğinde, akış şöyle çalışır:

  1. İstemci kayıt seçeneklerini talep eder sunucudan
  2. Sunucu bir meydan okuma oluşturur kullanıcı ve güvenen taraf bilgisiyle
  3. Tarayıcının WebAuthn API’si kullanıcıyı uyarır (biyometrik veya güvenlik anahtarı)
  4. İstemci kimlik bilgisini gönderir sunucuya
  5. Sunucu doğrular ve saklar açık anahtarı
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Kaydı başlatmak için API uç noktası
class WebAuthnRegistrationOptionsView(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request):
        from allauth.mfa.webauthn.internal import auth as webauthn_auth

        # Kimlik bilgisi oluşturma seçeneklerini oluştur
        creation_options = webauthn_auth.begin_registration(
            request.user,
            passwordless=False  # Şifresiz değil, 2FA olarak kullan
        )

        return Response({
            "success": True,
            "creation_options": creation_options,
        })

Kimlik Doğrulama Akışı

Passkey kullanarak iki faktörlü kimlik doğrulama için:

  1. Kullanıcı birincil kimlik doğrulamayı tamamlar (kullanıcı adı/şifre veya sosyal giriş)
  2. Sunucu meydan okuma döndürür WebAuthn doğrulaması için
  3. Tarayıcı uyarır passkey için (biyometrik dokunuş)
  4. Kimlik bilgisi doğrulanır saklanan açık anahtara karşı
  5. Kullanıcı tam olarak kimlik doğrulanır
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class WebAuthnVerifyView(APIView):
    def post(self, request):
        credential = request.data.get("credential")

        # Kimlik doğrulamayı tamamla ve kimlik bilgisini doğrula
        authenticator = webauthn_auth.complete_authentication(
            request.user,
            credential
        )

        # Güvenlik izlemesi için kullanımı kaydet
        authenticator.last_used_at = timezone.now()
        authenticator.save()

        return Response({"success": True})

Passkey Yönetimi

Kullanıcılar kayıtlı passkey’lerini yönetebilir:

  • Tüm passkey’leri listele kayıt tarihi ve son kullanımla
  • Passkey’leri yeniden adlandır daha kolay tanımlama için (örn. “iPhone”, “MacBook”)
  • Passkey’leri sil (son doğrulayıcıyı kaldırmaya karşı koruma ile)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
class WebAuthnListView(APIView):
    def get(self, request):
        authenticators = Authenticator.objects.filter(
            user=request.user,
            type=Authenticator.Type.WEBAUTHN
        ).order_by("-created_at")

        return Response({
            "passkeys": [
                {
                    "id": auth.pk,
                    "name": auth.wrap().name,
                    "created_at": auth.created_at.isoformat(),
                    "last_used_at": auth.last_used_at.isoformat() if auth.last_used_at else None,
                }
                for auth in authenticators
            ]
        })

API Uç Noktaları

REST API’miz mobil uygulama için tam WebAuthn desteği sağlar:

Uç NoktaYöntemAçıklama
/api/webauthn/register/options/GETKayıt meydan okumasını al
/api/webauthn/register/complete/POSTKaydı tamamla
/api/webauthn/authenticate/options/GETKimlik doğrulama meydan okumasını al
/api/webauthn/verify/POST2FA için kimlik bilgisini doğrula
/api/webauthn/GETKayıtlı passkey’leri listele
/api/webauthn/<id>/PATCHBir passkey’i yeniden adlandır
/api/webauthn/<id>/DELETEBir passkey’i sil

Güvenlik Hususları

Kurtarma Kodları

Bir kullanıcı ilk doğrulayıcısını (passkey veya TOTP) kaydettiğinde, otomatik olarak kurtarma kodları oluşturuyoruz. Bu tek kullanımlık kodlar, diğer tüm kimlik doğrulama yöntemleri kullanılamaz hale gelirse kullanılabilir:

1
2
if Authenticator.objects.filter(user=request.user).count() == 1:
    auto_generate_recovery_codes(request._request)

Kilitlemeyi Önleme

Kullanıcılar, herhangi bir iki faktörlü kimlik doğrulama yöntemi olmadan kalacaklarsa son passkey’lerini silemezler:

1
2
3
4
if not adapter.can_delete_authenticator(authenticator):
    return Response({
        "message": "Silinemiyor - en az bir kimlik doğrulama yönteminiz olmalı"
    }, status=400)

İzleme

Güvenlik izlemesi için Datadog metrikleri aracılığıyla passkey kullanımını takip ediyoruz:

1
2
3
increment("webauthn.registration.success")
increment("webauthn.verify.success")
increment("webauthn.verify.failed")

Tarayıcı Desteği

WebAuthn tüm modern tarayıcılarda desteklenir:

  • Chrome 67+
  • Firefox 60+
  • Safari 13+
  • Edge 79+
  • Mobil Chrome, Safari, Firefox

Eski tarayıcılar için, kullanıcılar hala TOTP (doğrulayıcı uygulamaları) veya kurtarma kodlarını kullanabilir.

Kullanıcı Deneyimi

Bir passkey eklemek sadece birkaç saniye sürer:

  1. Ayarlar → Güvenlik → İki Faktörlü Kimlik Doğrulama‘ya gidin
  2. Passkey Ekle‘ye tıklayın
  3. Cihazınızı adlandırın (örn. “iPhone 15”)
  4. Face ID / Touch ID / Windows Hello ile kimlik doğrulayın
  5. Bitti! Passkey’iniz kaydedildi

Gelecekteki girişler sadece biyometrik onay gerektirir - şifre yazmak veya doğrulayıcı uygulamalarından kod kopyalamak yok.

Neden Passkeys’i Seçtik

YöntemOltalama RiskiKullanıcı DeneyimiKurtarma
ŞifrelerYüksekKötü (unutulan, zayıf)E-posta sıfırlama
SMS 2FAOrta (SIM swap)İdare ederTelefon numarası
TOTP UygulamalarıDüşükManuel kod girişiYedek anahtarlar
PasskeysÇok DüşükMükemmelKurtarma kodları

Passkeys kimlik doğrulamanın geleceğini temsil ediyor. Zaten Apple, Google ve Microsoft platformları tarafından destekleniyor, bu da neredeyse tüm kullanıcılarımız için erişilebilir kılıyor.


Şifresiz olmaya hazır mısınız? Güvenlik ayarlarınızda passkeys’i etkinleştirin!