src/DiyanetCleanArchitecture.Infrastructure.Services.Authenticator projesindedir. Google Authenticator / Microsoft Authenticator gibi uygulamalarla uyumlu TOTP (Time-based One-Time Password, RFC 6238) üretir ve doğrular. Altında OtpNet kütüphanesi çalışır.
Arayüz
Secret üretimi
GenerateSecret, config’teki SecretLength (default 20 byte = 160 bit) uzunluğunda rastgele anahtar üretir ve Base32 kodlar:
QR Code URI — otpauth://
GenerateQrCodeUri, authenticator uygulamalarının okuduğu standart otpauth://totp/... URI’sini üretir. Issuer ve account adı URL-encode edilir; algoritma, basamak ve periyot config’ten gelir:
Doğrulama — drift toleransı
VerifyCode, kodu Base32 secret ile doğrular. Saat kayması için AllowedDriftSteps kadar (default ±1 time step) pencere uygulanır. Eşleşen timeStep out parametresiyle döner (replay/önceki kullanım kontrolü için):
Servis fail-closed’dur: geçersiz Base32, sayısal olmayan kod ya da beklenmedik herhangi bir hata
false döner — asla “doğru” kabul etmez.Issuer boş olamaz, TimeStepSeconds > 0, SecretLength >= 16, AllowedDriftSteps >= 0, Digits ∈ {4, 6, 8}, Algorithm ∈ {SHA1, SHA256, SHA512}.
User aggregate ile ilişki
Servis yalnızca saf TOTP hesaplaması yapar; durum User aggregate’inde tutulur. Akış (ConfigureTotpCommandHandler):
ConfigureTotp (secret atar, henüz aktif değil), EnableTotp (ilk doğru kod ile etkinleştirir), VerifyTotp, DisableTotp.
Config — Services:Authenticator
string
default:"DiyanetCleanArchitecture"
Authenticator uygulamasında görünen sağlayıcı adı.
int
default:"30"
TOTP periyodu (RFC 6238 standardı = 30 sn).
int
default:"1"
Saat kayması toleransı (±N adım).
int
default:"20"
Secret uzunluğu (byte). Min 16.
string
default:"SHA1"
SHA1 / SHA256 / SHA512. Uyumluluk için SHA1.
int
default:"6"
Kod basamak sayısı (4, 6 veya 8).
DI kaydı
User Aggregate
ConfigureTotp / EnableTotp / VerifyTotp metodları ve TotpSecret value object.Güvenlik
Çok faktörlü kimlik doğrulama ve DataProtection kullanımı.