Authentication
& Security

1. Kimlik Doğrulama vs Yetkilendirme

Kimlik Doğrulama (Authentication - AuthN), birinin "kim olduğunu" ispatlamasıdır. Sisteme giriş yaparken verdiğiniz şifre bu sürece girer. Yetkilendirme (Authorization - AuthZ) ise, kimliği doğrulanmış birinin "neler yapabileceğini" belirlemektir. Örneğin; bir kullanıcı sisteme giriş yapabilir (AuthN), ancak sadece admin yetkisi olanlar kullanıcıları silebilir (AuthZ). Bu iki kavramın karıştırılması büyük güvenlik açıklarına yol açar. Bir uygulamanın güvenlik mimarisi, önce sağlam bir AuthN katmanı kurmalı, ardından roller (RBAC) veya özellikler (ABAC) bazlı hassas bir AuthZ mekanizması ile desteklenmelidir. Bu rehber boyunca, her iki katmanın da en modern ve güvenli nasıl inşa edileceğini inceleyeceğiz.

2. Şifre Yönetimi ve Hashing Algoritmaları

Altın kural: Şifreler veritabanında asla düz metin (plain text) olarak saklanmaz. Hatta MD5 veya SHA-1 gibi eski algoritmalar da artık güvenli değildir. Modern standart, yavaş çalışan ve CPU maliyeti yüksek olan "Bcrypt", "Argon2" veya "Scrypt" algoritmalarını kullanmaktır. Bu algoritmalar, şifreye rastgele bir veri ekleyen "Salt" (Tuzlama) mekanizmasını otomatik olarak uygular. Tuzlama sayesinde, iki kullanıcı aynı şifreyi seçse bile veritabanındaki hash'leri farklı görünür; bu da "Rainbow Table" saldırılarını imkansız kılar. Algoritmanın "Cost Factor" (maliyet faktörü) ayarı, bir şifrenin kırılma süresini artırarak kaba kuvvet (Brute Force) saldırılarına karşı donanım tabanlı bir savunma sağlar.

3. Session-Based Authentication

Geleneksel yöntem olan Session (Oturum) tabanlı kimlik doğrulama, kullanıcı giriş yaptığında sunucu tarafında bir oturum dosyası veya veritabanı kaydı oluşturur. Sunucu, kullanıcıya bir "Session ID" gönderir ve bu ID tarayıcıda bir çerez (Cookie) olarak saklanır. Kullanıcı her istek yaptığında bu çerez sunucuya gider ve sunucu kendi hafızasındaki kayıtla eşleştirir. Bu yöntemin avantajı, oturumu sunucu tarafından anında sonlandırabilme (logout/revoke) yeteneğidir. Ancak dezavantajı, sunucu hafızasında (RAM) yer kaplaması ve yük dengeleyici (load balancer) kullanan çok sunuculu yapılarda "Sticky Session" karmaşasına yol açmasıdır. Küçük ve orta ölçekli monolitik uygulamalar için hala en sağlam ve basit yöntemdir.

4. Token-Based Authentication (JWT)

Modern web ve mobil uygulamalar, "Stateless" (durumsuz) olan Token tabanlı sistemi tercih eder. En popüler standart JSON Web Token'dır (JWT). Sunucu kullanıcıyı doğruladıktan sonra ona şifreli bir imzaya sahip bir anahtar (Token) verir. Bu token, kullanıcının kimlik bilgilerini ve yetkilerini kendi içinde taşır; sunucunun bir şey hatırlamasına gerek yoktur. Bu durum, uygulamanın yatayda sınırsız büyümesini (scaling) kolaylaştırır. Ancak JWT'nin en büyük zayıflığı, bir kez oluşturulduktan sonra süresi bitene kadar iptal edilmesinin zor olmasıdır. Bu riski yönetmek için "Short-lived Access Token" (kısa ömürlü) ve "Refresh Token" (yenileme) yapısı birlikte kullanılmalıdır.

Geri kalan bölümler: Multi-Factor Authentication (MFA), OAuth2 & OpenID Connect, Social Login (SSO), CSRF & XSS Koruması, Passwordless Auth ve Rate Limiting.

5. Çok Faktörlü Kimlik Doğrulama (MFA)

Şifreler çalınabilir, ancak kullanıcının telefonuna gelen bir kod veya parmak izi çok daha zordur. MFA, güvenliği katmanlı hale getirir. SMS tabanlı kodlar artık "SIM swapping" nedeniyle çok güvenli kabul edilmemekte; bunun yerine Google Authenticator gibi "TOTP" (Time-based One Time Password) üreten uygulamalar veya fiziksel güvenlik anahtarları (YubiKey) önerilmektedir. Hassas verilerle çalışan her sistem mutlaka ikinci bir doğrulama katmanı sunmalıdır.

6. OAuth2 ve OpenID Connect Standartları

OAuth2 bir yetkilendirme protokolüdür; bir uygulamanın sizin adınıza başka bir servise (örn: Google Drive) erişmesine izin verir. OpenID Connect ise OAuth2'nin üzerine inşa edilmiş bir kimlik doğrulama katmanıdır. "Google ile Giriş Yap" butonları bu standartları kullanır. Bu sistemler sayesinde şifrenizi her uygulamaya vermek yerine, güvendiğiniz bir ana sağlayıcı üzerinden güvenli geçişler yaparsınız. Bu hem kullanıcı deneyimini artırır hem de güvenlik riskini merkezi ve profesyonel ellere bırakır.

7. Single Sign-On (SSO) Mekanizması

SSO, bir kullanıcının tek bir kullanıcı adı ve şifre ile birden fazla bağımsız uygulamaya giriş yapabilmesini sağlar. Kurumsal dünyada (Active Directory, Okta vb.) vazgeçilmezdir. Kullanıcı bir kez giriş yapar ve merkezi bir "Identity Provider" (IdP) üzerinden diğer tüm uygulamalara güvenli tokenlar dağıtılır. Bu, şifre yorgunluğunu azaltır ve BT ekiplerinin tüm erişimleri tek bir noktadan yönetmesini (veya tek tıkla iptal etmesini) sağlar.

8. Saldırı Türleri ve Savunma Stratejileri

Kimlik doğrulama sistemleri iki büyük saldırının hedefidir: XSS ve CSRF. XSS, kötü niyetli scriptlerin tarayıcıda çalışarak token'ları çalmasıdır; savunması HttpOnly çerezlerdir. CSRF ise kullanıcının haberi olmadan onun adına istek yapılmasıdır; savunması SameSite çerezler ve CSRF Token'lardır. Güvenlik, sadece kod yazmak değil, tarayıcının ve HTTP protokolünün tüm açıklarını bilip kapatma sanatıdır.

9. Passwordless: Şifresiz Giriş Yöntemleri

Gelecek şifresizdir. "Magic Link" (e-postaya gelen giriş bağlantısı) veya "FIDO2/WebAuthn" standartlarıyla parmak izi/yüz tanıma gibi biyometrik veriler artık web sitelerinde şifre yerine geçebiliyor. Bu yöntemler, kullanıcının hatırlaması gereken bir şifre olmadığı için hem kullanıcı deneyimini zirveye çıkarır hem de phishing (oltalama) saldırılarını teknik olarak imkansız kılar.

10. Güvenlik İzleme ve Hız Sınırlama

En güvenli şifreleme bile kaba kuvvet saldırılarına karşı savunmasız kalabilir. Bu yüzden giriş denemelerine "Rate Limiting" (hız sınırı) koymak, hatalı girişlerde hesabı geçici olarak kilitlemek ve şüpheli girişlerde (farklı ülke/IP) kullanıcıya bildirim göndermek şarttır. Güvenlik statik bir kilit değil, sürekli izlenen ve anomali durumlarında tepki veren canlı bir süreçtir. "Audit Log" tutarak kimin, ne zaman ve hangi cihazdan giriş yaptığını kaydetmek, adli analizler için kritiktir.