Gereksinimler ve Ön Hazırlık
Projeye başlamadan önce geliştirme ortamınızın güncel olduğundan emin olmalısınız. 2026 yılı itibarıyla .NET 9 veya üzeri bir sürüm kullanmanız, performans ve güvenlik güncellemelerinden tam olarak yararlanmanızı sağlar.
- Visual Studio 2022 (Güncel sürüm) veya VS Code.
- .NET 9 SDK yüklü olmalıdır.
- SQL Server veya Entity Framework Core destekli bir veritabanı sağlayıcısı.
- Temel C# ve MVC (Model-View-Controller) bilgisi.
ASP.NET Core Identity ile Veritabanı Yapılandırması
ASP.NET Core Identity, kullanıcı yönetimi (giriş, kayıt, şifre sıfırlama) için hazır bir altyapı sunar. Öncelikle projenize gerekli paketleri yüklemeli ve veritabanı bağlamını (DbContext) IdentityUser sınıfından türetmelisiniz.
public class ApplicationUser : IdentityUser
{
public string Ad { get; set; }
public string Soyad { get; set; }
}
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions options)
: base(options) { }
}
Bu kod bloğu, varsayılan Identity tablolarına "Ad" ve "Soyad" gibi özel alanlar eklememizi sağlar. IdentityDbContext kullanımı, veritabanı tablolarının otomatik olarak oluşturulmasına olanak tanır.
Kullanıcı Girişi İçin Model ve ViewModel Oluşturma
Giriş ekranında kullanıcıdan alınacak verileri temsil eden bir ViewModel oluşturmak, veri doğrulama (Data Annotation) işlemlerini kolaylaştırır. Bu, kullanıcının boş veya hatalı veri girmesini engellemek için ilk savunma hattıdır.
public class LoginViewModel
{
[Required(ErrorMessage = "E-posta adresi zorunludur.")]
[EmailAddress(ErrorMessage = "Geçerli bir e-posta adresi giriniz.")]
public string Email { get; set; }
[Required(ErrorMessage = "Şifre alanı zorunludur.")]
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name = "Beni Hatırla")]
public bool RememberMe { get; set; }
}
[Required] ve [EmailAddress] gibi nitelikler, sunucu tarafında veri doğrulamayı otomatikleştirir. Bu sayede hatalı verilerin veritabanına ulaşması engellenir.
Controller Katmanında Giriş Mantığı
Giriş işleminin merkezinde SignInManager sınıfı yer alır. Bu sınıf, kullanıcının kimlik bilgilerini doğrular ve başarılı olursa bir oturum çerezi (cookie) oluşturur.
[HttpPost]
public async Task Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: true);
if (result.Succeeded)
{
return RedirectToAction("Index", "Home");
}
ModelState.AddModelError(string.Empty, "Geçersiz giriş denemesi.");
}
return View(model);
}
PasswordSignInAsync metodu, şifre hashleme ve karşılaştırma işlemlerini arka planda güvenli bir şekilde yönetir. lockoutOnFailure: true parametresi, art arda hatalı girişlerde hesabın geçici olarak kilitlenmesini sağlar; bu, kaba kuvvet (brute-force) saldırılarına karşı en etkili önlemdir.
Güvenli Giriş İçin Görünüm (View) Tasarımı
Razor Engine kullanarak oluşturduğumuz giriş formunda, XSS (Cross-Site Scripting) saldırılarını önlemek için Anti-Forgery Token (Sahtecilik Önleme Belirteci) kullanılması zorunludur.
@Html.AntiForgeryToken()
Giriş Yap
@Html.AntiForgeryToken(), form gönderildiğinde sunucunun isteğin gerçek bir kullanıcıdan gelip gelmediğini doğrulamasına yarayan gizli bir token üretir.
Kritik Güvenlik Uyarısı: Üretim ortamında (Production) mutlaka HTTPS protokolünü zorunlu tutun. Şifreler ve oturum çerezleri, şifrelenmemiş HTTP bağlantılarında kolayca ele geçirilebilir. Ayrıca, Identity yapılandırmanızda PasswordOptions kullanarak güçlü şifre politikaları (en az bir büyük harf, özel karakter, rakam) belirlemeyi ihmal etmeyin.
Kullanıcı Girişi Yöntemlerinin Karşılaştırılması
| Yöntem | Avantajı | Dezavantajı |
|---|---|---|
| ASP.NET Identity | Güvenli, hazır, ölçeklenebilir | Öğrenme eğrisi biraz yüksektir |
| Manuel Cookie Auth | Tam kontrol sağlar | Hata yapma riski yüksektir |
| JWT (Token) | API'ler için mükemmeldir | Web uygulamalarında çerez yönetimi zordur |
Sıkça Sorulan Sorular
Identity kullanırken şifreleri veritabanında nasıl saklarım?
Identity, şifreleri otomatik olarak PBKDF2 veya Argon2 gibi güçlü algoritmalarla hashleyerek saklar. Sizin manuel olarak şifreleme yapmanıza gerek yoktur.
Giriş yaptıktan sonra kullanıcıyı nasıl yönlendiririm?
RedirectToAction veya LocalRedirect kullanarak kullanıcıyı güvenli bir şekilde ana sayfaya veya geldiği sayfaya yönlendirebilirsiniz.
Hesap kilitleme süresini nasıl ayarlarım?
Program.cs dosyasında options.Lockout.DefaultLockoutTimeSpan ayarını değiştirerek kilitleme süresini dakika bazında belirleyebilirsiniz.
Oturum süresi (Session Timeout) nasıl yönetilir?
CookieAuthenticationOptions üzerinden ExpireTimeSpan değerini güncelleyerek oturumun ne kadar süre aktif kalacağını ayarlayabilirsiniz.
Sosyal medya ile giriş (Google/Facebook) ekleyebilir miyim?
Evet, Identity altyapısı "External Authentication" destekler. NuGet üzerinden ilgili paketleri yükleyerek kolayca entegre edebilirsiniz.
Kullanıcı Giriş Sistemlerinde Hata Ayıklama ve Loglama Stratejileri
Geliştirme aşamasında veya canlıya geçişten sonra kullanıcı giriş süreçlerinde yaşanan hataları tespit etmek, sistemin sürdürülebilirliği için kritiktir. ASP.NET Core Identity, varsayılan olarak birçok hata mesajını gizlese de, geliştirici olarak loglama mekanizmalarını kullanarak arka planda neler olup bittiğini takip edebilirsiniz.
Microsoft.Extensions.Logging Kullanımı
Giriş denemeleri sırasında yaşanan başarısızlıkları izlemek için ILogger arayüzünü Controller içerisinde kullanmak en sağlıklı yöntemdir. Aşağıdaki örnekte, başarısız giriş denemelerinin nasıl loglanacağı gösterilmiştir:
public async Task Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: true);
if (result.Succeeded)
{
_logger.LogInformation("Kullanıcı giriş yaptı: {Email}", model.Email);
return RedirectToAction("Index", "Home");
}
if (result.IsLockedOut)
{
_logger.LogWarning("Kullanıcı hesabı kilitlendi: {Email}", model.Email);
return RedirectToAction("Lockout");
}
_logger.LogWarning("Geçersiz giriş denemesi: {Email}", model.Email);
ModelState.AddModelError(string.Empty, "Geçersiz giriş denemesi.");
}
return View(model);
}
Hata Ayıklama İçin İpuçları
- Veritabanı Bağlantı Hataları: Identity tablolarının (AspNetUsers, AspNetRoles) veritabanında oluştuğundan emin olun.
dotnet ef database updatekomutunu tekrar çalıştırarak tabloları doğrulayın. - Cookie Sorunları: Eğer giriş yaptıktan hemen sonra oturum sonlanıyorsa,
Program.csveyaStartup.csdosyasındaki Cookie ayarlarını veSameSitepolitikalarını kontrol edin. - Identity Konfigürasyonu: Şifre karmaşıklık kurallarınızın (Password Requirements) kullanıcı kayıt formundaki kurallarla eşleştiğinden emin olun.
Giriş Sistemlerinde Performans Optimizasyonu
Kullanıcı giriş işlemleri genellikle veritabanı sorguları ve şifre hashleme (Hashing) süreçlerini içerdiği için yoğun trafik alan uygulamalarda performans darboğazı oluşturabilir. Özellikle şifre doğrulama işlemi CPU yoğun bir iştir.
Performans Artırıcı Öneriler
- Asenkron Programlama: Her zaman
Asyncmetotları kullanın.PasswordSignInAsyncgibi metotlar, thread havuzunu verimli kullanarak uygulamanın kilitlenmesini engeller. - Redis ile Oturum Yönetimi: Çok büyük ölçekli uygulamalarda oturum verilerini veritabanı yerine Redis gibi dağıtık bir önbellek sisteminde tutarak veritabanı yükünü azaltabilirsiniz.
- İndeksleme:
AspNetUserstablosundaEmailveyaUserNamesütunlarında indeks olduğundan emin olun. Identity varsayılan olarak bu indeksleri oluşturur, ancak veritabanı şemasını manuel değiştirdiyseniz performans düşebilir.
Not: Şifre hashleme algoritması olarak Identity, varsayılan olarakPBKDF2kullanır. Bu algoritmanın "work factor" (iş yükü) değeriniPasswordHasherOptionsüzerinden değiştirebilirsiniz, ancak çok yüksek değerler giriş süresini uzatarak kullanıcı deneyimini olumsuz etkileyebilir.
builder.Services.Configure(options =>
{
options.IterationCount = 10000; // İhtiyaca göre optimize edin
});
Sonuç
C# ve Asp.net Mvc kullanarak güvenli bir giriş sistemi inşa etmek, ASP.NET Core Identity'nin sunduğu araçlarla oldukça verimli hale gelmiştir. Bu rehberde, model doğrulamasından güvenli oturum yönetimine kadar temel adımları tamamladık. Bir sonraki adımda, "Şifremi Unuttum" mekanizmasını ve e-posta doğrulama süreçlerini projenize ekleyerek kullanıcı deneyimini daha da güçlendirebilirsiniz.
Sorumluluk Reddi: Bu makalede paylaşılan kod örnekleri eğitim amaçlıdır. Uygulamanızı canlıya almadan önce mutlaka profesyonel bir güvenlik denetiminden geçirin ve güncel güvenlik yamalarını takip edin.


Yorumlar (0)
Yorum Yaz