Back to Blog

Authentication & Authorization

February 14, 20263 min
AuthenticationAuthorizationJWT & Token SecurityWeb Application Security
Authentication & Authorization

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_id cookie 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:

  1. Header: Algoritma bilgisi (HS256 vb.)
  2. Payload: Kullanıcı bilgileri (userId, role, email) Uyarı: Şifre veya gizli veri konulmaz. Base64 ile encode edilir, herkes okuyabilir.
  3. 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).
  • HttpOnly ve Secure cookie 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

  1. Email + password alınır
  2. Password hash doğrulanır
  3. Access token üretilir
  4. Refresh token üretilir
  5. Refresh token DB’ye kaydedilir
  6. Access token response ile gönderilir
  7. 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

KatmanSorumluluk
ControllerHTTP Request / Response
Auth MiddlewareToken doğrulama
Authorization MiddlewareRol kontrolü
Serviceİş mantığı
RepositoryVeritabanı 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.