BuildingBlocks.Otp, tek kullanımlık parola (OTP) üretimi ve doğrulaması için altyapı sağlar. Kod plaintext saklanmaz; yalnızca HMAC-SHA256 özeti tutulur ve doğrulama stateless karşılaştırma ile yapılır. Paket aynı zamanda rate-limit politikalarını (throttle, günlük limit, deneme sayısı) konfigürasyon olarak taşır.
OTP’nin User aggregate ile entegrasyonu (
UserOtpChallenge, AddOtpChallenge/VerifyOtp) ve SMS gönderimi (OtpSmsService, NetGSM) için bkz. Domain ve SMS servisi. Bu sayfa paket arayüzlerine odaklanır.IOtpService
Üç yardımcı servisi (generator + hash + formatter) tek fasad altında toplayan orchestrator.
| Metot | İmza | Amaç |
|---|---|---|
GenerateCode | OtpCode GenerateCode() | CodeLength uzunluğunda rastgele numerik kod üretir |
Hash | string Hash(OtpCode code) | HMAC-SHA256 ile Base64 özet üretir (saklanan değer) |
CreateLoginSms | string CreateLoginSms(OtpCode code) | LoginSmsTemplate’teki {code}’u gerçek kodla doldurur |
Alt servisler
| Arayüz | İmza | İmplementasyon |
|---|---|---|
IOtpCodeGenerator | OtpCode GenerateNumericCode(int length) | NumericOtpCodeGenerator |
IOtpHashService | string Hash(OtpCode code) · bool Verify(OtpCode code, string hash) | HmacOtpHashService (HMAC-SHA256) |
IOtpMessageFormatter | string Format(string template, OtpCode code) | DefaultOtpMessageFormatter |
OtpCode
sealed value object. Kod yalnızca rakamlardan oluşur; loglama güvenlidir — ToString() her zaman "******" döner, gerçek değere sadece Reveal() ile erişilir.
| Üye | Davranış |
|---|---|
static OtpCode Create(string) | Boş veya rakam-dışı değerde ArgumentException fırlatır |
string Reveal() | Gerçek kodu döndürür (yalnızca gerektiğinde) |
override string ToString() | Daima "******" (logging-safe) |
Konfigürasyon — OtpOptions
Services:Otp bölümüne bind edilir.
| Üye | Tip | Varsayılan | Açıklama |
|---|---|---|---|
CodeLength | int | 6 | Koddaki rakam sayısı |
ExpireMinutes | int | 3 | Kod geçerlilik süresi |
ThrottleSeconds | int | 60 | İki istek (resend) arası minimum süre |
MaxRequestPerDay | int | 20 | Günlük maksimum OTP isteği |
MaxVerifyAttempt | int | 5 | Tek kod için maksimum doğrulama denemesi |
MaxFailedVerifyPerDay | int | 50 | Günlük maksimum başarısız deneme |
ChallengeRetentionMinutes | int | 15 | Challenge state TTL’i |
AllowResendWhileActive | bool | false | Aktif kod varken yeniden gönderime izin |
HashSecretSalt | string | — | HMAC anahtarı (gizli) |
LoginSmsTemplate | string | "{code} giriş doğrulama kodunuzdur." | SMS metni |
DI kaydı — AddOtp
Kullanım — stateless üretim ve doğrulama
OTP plaintext olarak tutulmaz. Üretimde sadece hash saklanır; doğrulamada girilen kodun hash’i saklanan hash ile karşılaştırılır.İlgili
SMS servisi
NetGSM üzerinden OTP SMS gönderimi.
OTP akışı
Uçtan uca giriş + doğrulama senaryosu.
Authenticator (TOTP)
RFC6238 tabanlı authenticator alternatifi.
Domain
UserOtpChallenge ve VerifyOtp metotları.