Authentication & Authorization
Authentication Nedir?
Authentication, bir kullanıcının iddia ettiği kişi olduğunu kanıtlama sürecidir. Yani sistemin şu soruya verdiği cevaptır:
“Sen gerçekten söylediğin kişi misin?”
Kullanılan Yöntemler
- ID / Şifre: En klasik yöntem
- OAuth2 (Social Login): Google, Apple, GitHub ile giriş
- MFA / 2FA: Şifreye ek olarak SMS veya Authenticator doğrulaması
Authentication Sonrası Oturum Yönetimi
Kullanıcı her sayfada tekrar şifre girmesin diye iki temel yöntem kullanılır:
1) Session-Based Authentication
- Sunucu tarafında bir oturum oluşturulur.
- Kullanıcıya bir
session_idcookie verilir. - Sunucu bu ID’yi memory veya Redis gibi bir yerde saklar.
- Stateful yapıdır (sunucuya bağlıdır).
2) Token-Based Authentication (JWT)
- Kullanıcıya imzalı bir JSON Web Token verilir.
- Sunucu token’ı saklamaz.
- Her istekte token’ın imzasını doğrular.
- Stateless yapıdır.
- Modern web ve mobil uygulamalarda standarttır.
JWT Nedir?
JWT, veritabanına gitmeden kullanıcıyı tanımamızı sağlar. JWT bir şifreleme mekanizması değil, imza mekanizmasıdır.
JWT üç bölümden oluşur:
- Header: Algoritma bilgisi (HS256 vb.)
- Payload: Kullanıcı bilgileri (userId, role, email) Uyarı: Şifre veya gizli veri konulmaz. Base64 ile encode edilir, herkes okuyabilir.
- Signature: Secret key ile oluşturulan imza. Token’ın değiştirilmediğini kanıtlar.
Access Token & Refresh Token
Modern sistemlerde genellikle iki token birlikte kullanılır.
Access Token
- API çağrılarında kullanılır.
- Kimlik doğrulama ve yetki kontrolü için gereklidir.
- Kısa ömürlüdür (15 dakika – 1 saat).
- Genellikle memory veya LocalStorage’da tutulur.
Amaç: Çalınsa bile kısa sürede geçersiz olsun.
Refresh Token
- Yeni access token üretmek için kullanılır.
- Uzun ömürlüdür (7 – 30 gün).
HttpOnlyveSecurecookie içinde saklanır.- Genellikle veritabanında kayıtlı tutulur.
Amaç: Kullanıcıyı tekrar login yaptırmadan yeni access token üretmek.
Eğer şüpheli bir durum varsa:
- DB’den refresh token silinir.
- Kullanıcının oturumu sonlandırılır.
Login Süreci
- Email + password alınır
- Password hash doğrulanır
- Access token üretilir
- Refresh token üretilir
- Refresh token DB’ye kaydedilir
- Access token response ile gönderilir
- Refresh token HttpOnly cookie olarak set edilir
Logout olduğunda:
- Refresh token DB’den silinir
Authorization Nedir?
Authorization, kimliği doğrulanmış bir kullanıcının hangi kaynaklara erişebileceğini belirler.
Authentication şu soruyu cevaplar:
“Sen kimsin?”
Authorization şu soruyu cevaplar:
“Neye erişebilirsin?”
Yetkilendirme Modelleri
RBAC (Role-Based Access Control)
- Kullanıcılara rol atanır (Admin, User vb.)
- En yaygın yöntemdir.
ABAC (Attribute-Based Access Control)
- Yetki; zaman, konum, cihaz gibi özelliklere göre belirlenir.
- Daha esnektir, daha karmaşıktır.
Katmanlara Göre Sorumluluk
| Katman | Sorumluluk |
|---|---|
| Controller | HTTP Request / Response |
| Auth Middleware | Token doğrulama |
| Authorization Middleware | Rol kontrolü |
| Service | İş mantığı |
| Repository | Veritabanı işlemleri |
Authentication genellikle middleware seviyesinde yapılır. Authorization ise rol kontrolü ile bir üst filtre görevi görür.
Güvenlik Mantığı
- Access token kısa tutulur.
- Refresh token DB’de tutulur.
- Şüpheli durumda refresh token silinir.
- Stateless yapı korunur ama kontrol kaybedilmez.