Kimlik Doğrulama ve Yetkilendirme Nedir? JWT ile Modern Güvenlik
Kimlik Doğrulama ve Yetkilendirme Nedir? JWT ile Modern Güvenlik
Web uygulamalarında güvenlik iki temel soruya dayanır: 1. Sen kimsin? 2. Neye erişebilirsin?
Bu iki sorunun cevabı sırasıyla kimlik doğrulama (authentication) ve yetkilendirme (authorization) kavramlarını oluşturur.
1. Kimlik Doğrulama (Authentication) Kimlik doğrulama, kullanıcının gerçekten iddia ettiği kişi olup olmadığını kontrol etme sürecidir.
Örnek: • Kullanıcı e-posta ve şifre girer. • Sistem bilgileri veritabanıyla karşılaştırır. • Doğruysa kullanıcı “tanınır”.
Günümüzde bu süreç sadece şifreyle sınırlı değildir: • SMS doğrulama • E-posta onayı • OAuth ile giriş (örneğin Google veya Microsoft hesıyla giriş) • Çift faktörlü kimlik doğrulama (2FA)
Authentication sorusu: “Bu kullanıcı gerçekten Ali mi?”
2. Yetkilendirme (Authorization) Kimlik doğrulanıp sistem kullanıcının kim olduğunu anladıktan sonra ikinci soru gelir: “Ali sisteme girdi ama ne yapabilir?”
Yetkilendirme, kullanıcının hangi kaynaklara erişebileceğini belirler.
Örnek: • Admin → Kullanıcı silebilir • Editor → İçerik düzenleyebilir • User → Sadece görüntüleyebilir
Bu genellikle rol bazlı (Role-based), claim bazlı veya policy bazlı olarak uygulanır.
Authorization sorusu: “Ali admin mi, normal kullanıcı mı?”
3. Authentication ve Authorization Arasındaki Fark
Authentication ve Authorization süreçleri sıkça karıştırılsa da aralarında net farklar vardır: • Authentication kim olduğunu doğrular, Authorization ne yapabileceğini belirler. • Authentication login aşamasında olur, Authorization login sonrası isteklerde çalışır. • Authentication şifre, token, 2FA gibi araçları kullanırken; Authorization rol, claim ve policy yapılarını kullanır.
Kısaca: Önce kimlik doğrulanır, sonra yetki kontrol edilir.
JWT (JSON Web Token) Nedir?
Modern API mimarilerinde kimlik doğrulama için en yaygın yöntemlerden biri JWT (JSON Web Token) kullanmaktır. JWT, iki taraf arasında güvenli ve imzalı veri taşıyan bir token formatıdır. Özellikle REST API’lerde, Microservice mimarilerinde, SPA (React, Angular, Vue) uygulamalarında ve mobil uygulamalarda yaygın olarak kullanılır.
JWT Nasıl Çalışır? 1. Kullanıcı login olur. 2. Sunucu kullanıcıyı doğrular. 3. Sunucu bir JWT üretir. 4. Token client’a (tarayıcı/mobil) gönderilir. 5. Client her istekte şu şekilde gönderir: Authorization: Bearer <token> 6. Sunucu token’ı doğrular ve içindeki bilgilere göre kullanıcıyı tanır.
Bu sistem stateless çalışır. Yani sunucu kendi üzerinde session (oturum) bilgisi tutmaz, tüm bilgi token'ın içinde taşınır.
JWT Yapısı
JWT noktalarla ayrılmış üç bölümden oluşur: Header.Payload.Signature
1. Header: Kullanılan imzalama algoritmasını belirtir (örneğin HS256).
2. Payload: Taşınan bilgileri (claims) içerir. Örneğin: userId, email, role, exp (expiration time). Payload şifreli değildir, sadece Base64 ile encode edilir. Bu yüzden içerisine şifre gibi hassas veriler asla konulmamalıdır.
3. Signature: Token’ın yolda değiştirilmediğini garanti eder. Sunucudaki gizli bir anahtar (secret key) ile oluşturulur.
JWT ile Authentication ve Authorization
JWT sayesinde kullanıcı kimliği payload içinde taşınır, üzerine rol bilgisi eklenebilir. API, gelen istekteki bu rolü kontrol ederek yetkilendirme yapar. Örneğin payload içinde role: "Admin" şeklinde bir claim varsa, API sadece admin endpoint’lerine erişim sağlar.
JWT’nin Avantajları ✔ Stateless mimari sunar, sunucu yükünü azaltır. ✔ Ölçeklenebilir sistemler için mükemmeldir. ✔ Microservice mimarilerine tam uyumludur. ✔ Hızlı ve performanslıdır.
JWT’nin Dezavantajları ✘ Token çalınırsa süresi dolana kadar geçerlidir (bunu aşmak için Refresh Token kullanılır). ✘ Logout işlemi klasik session mantığı kadar kolay değildir. ✘ Büyük payload verileri ağ trafiğini ve performansı etkileyebilir.
Sonuç
Modern web uygulamalarında güvenlik üç adımla özetlenebilir: Kimlik doğrula, yetkisini kontrol et ve güvenli şekilde veri taşı. JWT, bu süreci özellikle API tabanlı sistemlerde sadeleştirir ve ölçeklenebilir hale getirir.
Eğer ASP.NET Core Web API gibi bir backend geliştiriyorsanız, JWT tabanlı authentication artık endüstriyel bir standarttır. İstersen bir sonraki yazıda JWT’nin .NET Core içinde teknik kurulumunu da detaylıca ele alabiliriz.