Bir web uygulaması geliştirirken en kritik konulardan biri kullanıcı yönetimi ve güvenliktir. Kullanıcıların sisteme güvenli şekilde giriş yapması, yetkilerine göre işlem yapabilmesi ve verilerin korunması, modern uygulamaların vazgeçilmez gereksinimleridir. Ancak bu sistemi sıfırdan geliştirmek hem zaman alıcı hem de ciddi güvenlik riskleri barındırır.

İşte bu noktada ASP.NET Core Identity devreye girer. Microsoft tarafından geliştirilen bu yapı, kullanıcı doğrulama ve yetkilendirme süreçlerini hazır ve güvenli bir şekilde sunar. Bu makalede Identity'nin ne olduğunu, nasıl çalıştığını ve gerçek projelerde nasıl kullanıldığını adım adım öğreneceksiniz.

ASP.NET Core Identity Nedir?

ASP.NET Core Identity, kullanıcı kimlik doğrulama (authentication) ve yetkilendirme (authorization) işlemlerini yönetmek için kullanılan, hazır ve güvenli bir kullanıcı yönetim sistemidir. Kullanıcı kaydı, giriş işlemleri, rol yönetimi ve güvenlik gibi kritik süreçleri tek bir çatı altında toplar.

Bu yapı sayesinde geliştiriciler, sıfırdan güvenlik sistemi yazmak yerine test edilmiş ve optimize edilmiş bir altyapıyı kullanarak daha hızlı ve güvenli uygulamalar geliştirebilir.

ASP.NET Core Identity Ne Anlama Gelir?

Identity kelime anlamı olarak “kimlik” demektir. Yazılım dünyasında ise bir kullanıcının sistemde kim olduğunu belirleyen ve doğrulayan mekanizmayı ifade eder.

ASP.NET Core Identity ise bu süreci yöneten kapsamlı bir framework’tür.

Neden Kullanılır?

  • Kullanıcı giriş ve kayıt işlemlerini yönetmek
  • Yetki kontrolü sağlamak
  • Güvenli şifre saklama
  • Token ve oturum yönetimi yapmak

Hangi Problemleri Çözer?

  1. Güvensiz şifre saklama problemini ortadan kaldırır
  2. Kullanıcı yetki karmaşasını çözer
  3. Oturum yönetimini standart hale getirir
  4. Geliştirme süresini ciddi şekilde kısaltır

Identity Ne İşe Yarar?

ASP.NET Core Identity, kullanıcıyla ilgili tüm süreçleri yöneterek geliştiricinin iş yükünü azaltır. Aynı zamanda güvenlik açıklarını minimize eder.

Kullanıcı Yönetimi

Kullanıcı oluşturma, güncelleme ve silme işlemleri Identity üzerinden kolayca yapılabilir.

Kimlik Doğrulama (Authentication)

Kullanıcının sisteme giriş yaparken kimliğini doğrulamasını sağlar.

Yetkilendirme (Authorization)

Kullanıcının hangi işlemleri yapabileceğini belirler. Örneğin admin paneline sadece admin rolündeki kullanıcıların erişmesi gibi.

Gerçek Hayattan Kullanım Senaryoları

  • Blog sitesi (yazar ve admin ayrımı)
  • E-ticaret sistemi (müşteri hesapları)
  • SaaS uygulamalar (abonelik bazlı kullanıcılar)

Temel Kavramlar

Authentication Nedir?

Kullanıcının sisteme giriş yaparken kimliğinin doğrulanmasıdır.

Authorization Nedir?

Kullanıcının hangi işlemleri yapabileceğini belirleyen mekanizmadır.

User (Kullanıcı)

Sistemde kayıtlı olan kullanıcıyı temsil eder.

Role (Rol)

Kullanıcıya verilen yetki grubudur. Örneğin admin, editor veya user.

Claim Nedir?

Kullanıcı hakkında ek bilgiler tutan veri yapısıdır. Örneğin kullanıcı ID veya email bilgisi.

Token Nedir?

Kullanıcının kimliğini doğrulamak için kullanılan güvenli anahtardır.

Identity Nasıl Çalışır?

ASP.NET Core Identity arka planda oldukça sistematik ve güvenli bir akış ile çalışır. Kullanıcı giriş yaptığında sadece basit bir kontrol yapılmaz; aynı zamanda birden fazla güvenlik katmanı devreye girer.

Temel olarak sistem; kullanıcı bilgilerini doğrular, güvenli bir oturum oluşturur ve sonraki isteklerde kullanıcıyı tanımaya devam eder.

Login Süreci (Adım Adım)

Bir kullanıcı sisteme giriş yaptığında aşağıdaki adımlar gerçekleşir:

  1. Kullanıcı email ve şifre girer
  2. Veritabanındaki kullanıcı bilgileri bulunur
  3. Şifre hash ile karşılaştırılır
  4. Kullanıcı doğrulanır
  5. Claims oluşturulur
  6. Authentication cookie üretilir
  7. Kullanıcı sisteme giriş yapmış olur

Bu süreç sayesinde kullanıcı güvenli bir şekilde sisteme dahil edilir ve tekrar giriş yapmadan işlemlerine devam edebilir.

Middleware ve Authentication Pipeline

ASP.NET Core’da tüm kimlik doğrulama işlemleri middleware katmanında gerçekleşir. Identity, bu pipeline içinde çalışarak gelen her isteği kontrol eder.

  • Request gelir
  • Authentication middleware çalışır
  • Kullanıcı doğrulanır
  • Yetki kontrolü yapılır
  • Controller çalıştırılır

Bu yapı sayesinde güvenlik merkezi bir noktadan yönetilir.

Claims Oluşturma Mantığı

Identity, kullanıcı hakkında bilgileri claim adı verilen veri yapılarıyla taşır. Örneğin:

  • Kullanıcı ID
  • Email
  • Rol bilgisi

Bu bilgiler her istekte tekrar kullanılabilir ve performans sağlar.

Oturum Yönetimi (Session vs Cookie)

Identity genellikle cookie tabanlı bir yapı kullanır. Bu sayede kullanıcı bilgileri server tarafında değil, güvenli bir şekilde tarayıcıda saklanır.

Session tabanlı sistemlere göre daha modern ve ölçeklenebilir bir yapıdır.

Identity Veritabanı Yapısı

ASP.NET Core Identity, kullanıcı ve yetki bilgilerini saklamak için varsayılan bir veritabanı şeması kullanır. Bu yapı ilişkisel ve genişletilebilir şekilde tasarlanmıştır.

Varsayılan Tablolar

Tablo Açıklama
AspNetUsers Kullanıcı bilgileri
AspNetRoles Rol bilgileri
AspNetUserRoles Kullanıcı-rol ilişkisi
AspNetUserClaims Kullanıcı claim verileri
AspNetUserLogins Harici giriş bilgileri
AspNetUserTokens Token verileri

Tablolar Arası İlişkiler

Bu tablolar birbirine bağlı çalışır. Örneğin bir kullanıcı birden fazla role sahip olabilir ve bu ilişki AspNetUserRoles tablosu üzerinden yönetilir.

Bu yapı sayesinde sistem esnek ve ölçeklenebilir hale gelir.

Veri Akışı Nasıl İlerler?

Kullanıcı sisteme giriş yaptığında:

  1. Kullanıcı AspNetUsers tablosundan çekilir
  2. Rol bilgileri AspNetUserRoles üzerinden alınır
  3. Claims bilgileri eklenir
  4. Oturum oluşturulur

Bu süreç her login işleminde otomatik olarak gerçekleşir.

Identity Kullanımı

Identity kullanımı oldukça pratiktir ve temel işlemler birkaç satır kod ile yapılabilir.

Kullanıcı Kayıt (Register)

var user = new IdentityUser 
{ 
    UserName = model.Email, 
    Email = model.Email 
};

var result = await _userManager.CreateAsync(user, model.Password);

Bu kod ile yeni bir kullanıcı oluşturulur ve güvenli şekilde veritabanına kaydedilir.

Kullanıcı Giriş (Login)

var result = await _signInManager.PasswordSignInAsync(
    model.Email, 
    model.Password, 
    false, 
    false);

Kullanıcı giriş yaptığında sistem otomatik olarak cookie oluşturur.

Çıkış (Logout)

await _signInManager.SignOutAsync();

Bu işlem kullanıcı oturumunu sonlandırır.

Şifre Sıfırlama

Kullanıcılar şifrelerini unuttuklarında token tabanlı bir sistem ile yeni şifre oluşturabilir.

Email Doğrulama

Identity, kullanıcı email doğrulama sürecini de otomatik olarak yönetebilir.

Identity ile Yetkilendirme

ASP.NET Core Identity sadece kullanıcıyı sisteme almakla kalmaz, aynı zamanda kullanıcının hangi işlemleri yapabileceğini kontrol eder. Bu süreç authorization (yetkilendirme) olarak adlandırılır ve modern uygulamalarda güvenliğin temel taşlarından biridir.

Basit bir örnekle: Bir kullanıcı sisteme giriş yapabilir (authentication), ancak sadece yetkili olduğu sayfalara erişebilir (authorization). İşte bu ayrım güvenli uygulama geliştirmenin en önemli noktalarından biridir.

Role-Based Authorization (Rol Bazlı Yetkilendirme)

Rol bazlı yetkilendirme, kullanıcıların sahip oldukları rollere göre sistemde işlem yapmasını sağlar. En yaygın kullanılan yöntemdir.

Örneğin sadece admin kullanıcıların erişebileceği bir sayfa:


[Authorize(Roles = "Admin")]
public IActionResult AdminPanel()
{
    return View();
}

Bu yapı sayesinde sadece Admin rolüne sahip kullanıcılar bu endpoint'e erişebilir. Birden fazla rol de tanımlanabilir:


[Authorize(Roles = "Admin,Editor")]

Bu yöntem özellikle admin panel, içerik yönetimi ve dashboard gibi alanlarda kullanılır.

Policy-Based Authorization (Politika Bazlı Yetkilendirme)

Policy-based authorization, rol sistemine göre daha esnek ve güçlü bir yapıdır. Belirli kurallara göre erişim kontrolü yapılmasını sağlar.

Örneğin sadece belirli bir claim'e sahip kullanıcıların erişebileceği bir politika tanımlayabiliriz:


services.AddAuthorization(options =>
{
    options.AddPolicy("OnlyPremiumUsers", policy =>
        policy.RequireClaim("Subscription", "Premium"));
});

Kullanımı:


[Authorize(Policy = "OnlyPremiumUsers")]
public IActionResult PremiumContent()
{
    return View();
}

Bu yapı sayesinde sadece Premium aboneliğe sahip kullanıcılar belirli içeriklere erişebilir.

Claim-Based Authorization (Claim Bazlı Yetkilendirme)

Claim-based authorization, kullanıcıya ait özel veriler üzerinden yetkilendirme yapılmasını sağlar. Bu yöntem daha granular (detaylı) kontrol imkanı sunar.

Örneğin kullanıcıya özel bir claim:

  • Department = IT
  • Permission = EditPost

Bu claim'lere göre erişim kontrolü yapılabilir.

Örnek kullanım:


[Authorize(Policy = "EditPermission")]

Claim yapısı özellikle büyük projelerde ve kurumsal sistemlerde yaygın olarak kullanılır.

Hangi Yetkilendirme Yöntemi Ne Zaman Kullanılmalı?

Yöntem Kullanım Senaryosu
Role-Based Admin, User gibi basit rol ayrımları
Policy-Based Abonelik, üyelik seviyeleri
Claim-Based Kullanıcıya özel detaylı yetkiler

Genel olarak küçük projelerde rol bazlı yapı yeterliyken, büyük ve ölçeklenebilir sistemlerde policy ve claim tabanlı yaklaşımlar tercih edilir.

Identity ve JWT Kullanımı

Modern web uygulamalarında özellikle API tabanlı sistemlerde, kullanıcı kimlik doğrulama işlemleri için JWT (JSON Web Token) yaygın olarak kullanılır. ASP.NET Core Identity ile birlikte kullanıldığında, hem güçlü bir kullanıcı yönetimi hem de esnek bir kimlik doğrulama sistemi elde edilir.

Basitçe söylemek gerekirse: Identity kullanıcıyı yönetir, JWT ise kullanıcıyı tanımlar. Bu ikili birlikte kullanıldığında güvenli ve ölçeklenebilir bir yapı ortaya çıkar.

JWT (JSON Web Token) Nedir?

JWT, kullanıcı kimliğini doğrulamak için kullanılan, stateless (durumsuz) bir token yapısıdır. Sunucu tarafında oturum tutulmaz; tüm doğrulama işlemi token üzerinden gerçekleştirilir.

Bir JWT genellikle 3 bölümden oluşur:

  • Header: Token türü ve algoritma bilgisi
  • Payload: Kullanıcı bilgileri (claims)
  • Signature: Token’ın güvenliğini sağlayan imza

Identity ile JWT Nasıl Birlikte Kullanılır?

ASP.NET Core Identity, kullanıcı doğrulama işlemini yapar. Doğrulama başarılı olduğunda ise JWT token üretilir.

Temel akış şu şekildedir:

  1. Kullanıcı giriş yapar (email + şifre)
  2. Identity kullanıcıyı doğrular
  3. JWT token oluşturulur
  4. Token client’a gönderilir
  5. Client her istekte token gönderir
  6. Sunucu token’ı doğrular

Bu yapı sayesinde kullanıcı her istekte tekrar login olmak zorunda kalmaz.

JWT Token Oluşturma Örneği


var claims = new[]
{
    new Claim(ClaimTypes.Name, user.UserName),
    new Claim(ClaimTypes.NameIdentifier, user.Id)
};

var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secret_key_here"));

var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

var token = new JwtSecurityToken(
    issuer: "yourdomain.com",
    audience: "yourdomain.com",
    claims: claims,
    expires: DateTime.Now.AddMinutes(30),
    signingCredentials: creds
);

var tokenString = new JwtSecurityTokenHandler().WriteToken(token);

Bu kod ile kullanıcıya özel bir JWT token oluşturulur.

JWT ile Stateless Authentication Mantığı

JWT kullanıldığında sunucu kullanıcıya ait herhangi bir oturum bilgisi tutmaz. Tüm doğrulama işlemleri token üzerinden yapılır.

Bu yaklaşımın avantajları:

  • Sunucu yükü azalır
  • Yatay ölçeklenebilirlik kolaylaşır
  • Mobil ve SPA uygulamalarla uyumludur

Ancak dikkat edilmesi gereken en önemli nokta, token’ın güvenli bir şekilde saklanmasıdır.

JWT Kullanırken Dikkat Edilmesi Gerekenler

  • Token süresi kısa tutulmalıdır
  • HTTPS zorunlu olmalıdır
  • Secret key güvenli saklanmalıdır
  • Refresh token sistemi kullanılmalıdır

Identity + JWT Ne Zaman Kullanılmalı?

Senaryo Önerilen Yapı
Admin panel (MVC) Identity + Cookie
API / Mobil uygulama Identity + JWT
SPA (React, Vue) Identity + JWT

Özetle: Eğer uygulaman API tabanlıysa JWT kullanmak neredeyse zorunludur. Ancak klasik web uygulamalarında cookie tabanlı yapı daha basit ve yeterlidir.

Refresh Token Yapısı

Refresh token, access token süresi dolduğunda kullanıcıyı tekrar giriş yaptırmadan yeni token üretmek için kullanılır.

Access Token vs Refresh Token

  • Access Token: Kısa süreli
  • Refresh Token: Uzun süreli

Token Yenileme Süreci

  1. Access token süresi dolar
  2. Refresh token gönderilir
  3. Yeni access token üretilir

Güvenlik Riskleri

Refresh token çalınırsa sistem risk altına girer. Bu yüzden güvenli saklanmalıdır.

  1. Kullanıcı giriş yapar
  2. Token oluşturulur
  3. Client tarafında saklanır
  4. Her istekte gönderilir

Stateless Authentication Mantığı

Sunucu kullanıcı bilgisi tutmaz. Tüm doğrulama token üzerinden yapılır.

Identity Güvenlik Açıkları ve Önlemler

Her sistemde olduğu gibi Identity kullanırken de bazı güvenlik riskleri vardır.

Olası Güvenlik Açıkları

  • Brute force saldırıları
  • CSRF
  • XSS
  • Token çalınması

Alınması Gereken Önlemler

  • Rate limiting kullan
  • HTTPS zorunlu yap
  • 2FA aktif et
  • Secure cookie ayarları kullan

Production Ortamı için Identity Ayarları

Geliştirme ortamında çalışan bir sistem, production ortamında ek güvenlik ve performans ayarlarına ihtiyaç duyar.

  • Cookie Secure flag aktif olmalı
  • DataProtection key merkezi tutulmalı
  • Loglama sistemi kurulmalı
  • Hata mesajları kullanıcıya açık verilmemeli

Gerçek Proje Senaryosu

Örneğin bir SaaS uygulamasında:

  • Kullanıcı kayıt olur
  • Email doğrulama yapılır
  • Rol atanır (User / Admin)
  • JWT ile API erişimi sağlanır
  • Refresh token ile oturum devam eder

Bu yapı modern uygulamaların büyük çoğunluğunda kullanılmaktadır.

ASP.NET Core Identity Ne Zaman Kullanılmalı?

Kullanılması Gereken Senaryolar

  • Kullanıcı giriş sistemi olan projeler
  • Admin panel gerektiren uygulamalar
  • SaaS platformlar
  • E-ticaret siteleri

Kullanılmaması Gereken Senaryolar

  • Çok basit ve kullanıcı gerektirmeyen uygulamalar
  • Harici kimlik sağlayıcı kullanılan sistemler (SSO)
  • Microservice mimarilerde merkezi auth sistemi varsa

Sık Sorulan Sorular

ASP.NET Core Identity güvenli mi?

ASP.NET Core Identity, doğru yapılandırıldığında oldukça güvenlidir. Şifreleri hashleyerek saklar, 2FA destekler ve modern güvenlik standartlarına uygundur. Ancak production ortamında ek önlemler almak gerekir.

ASP.NET Core Identity ile JWT aynı mı?

Hayır, aynı değildir. Identity bir kullanıcı yönetim sistemidir, JWT ise kimlik doğrulama için kullanılan bir token yapısıdır. Genellikle birlikte kullanılırlar.

ASP.NET Core Identity öğrenmek zor mu?

Başlangıçta karmaşık görünebilir çünkü birçok bileşeni vardır. Ancak temel mantık anlaşıldığında kullanımı oldukça kolay ve güçlü hale gelir.

Identity olmadan authentication yapılabilir mi?

Evet yapılabilir, ancak tüm güvenlik sistemini sıfırdan geliştirmek gerekir. Bu da hem zaman kaybı hem de güvenlik riski oluşturur.

ASP.NET Core Identity hangi projelerde kullanılmalı?

Kullanıcı yönetimi gerektiren tüm projelerde kullanılmalıdır. Özellikle SaaS, admin panel ve e-ticaret sistemlerinde büyük avantaj sağlar.

Identity performans açısından iyi mi?

Evet, ancak doğru yapılandırılmazsa performans sorunları yaşanabilir. Özellikle gereksiz sorgular ve yanlış kullanım performansı etkileyebilir.