📝 BLOG

JSON Web Token (JWT): Kimlik Doğrulama ve Güvenlik Rehberi

JSON Web Token (JWT), web uygulamalarında kimlik doğrulama ve bilgi alışverişi için kullanılan açık standart bir tokendir. Bu rehberde JWT yapısını, kullanım alanlarını, güvenlik risklerini ve best practices'leri anlatıyoruz.

Son güncelleme:

Hazırlayan: Gsetsoft

JSON Web Token (JWT): Kimlik Doğrulama ve Güvenlik Rehberi

JWT Nedir?

JWT (JSON Web Token), RFC 7519 standardında tanımlanan, taraflar arasında güvenli bilgi alışverişi için kullanılan kompakt ve URL-güvenli bir token formatıdır.

JWT, üç bölümden oluşur: Header (başlık), Payload (veri) ve Signature (imza). Bu üç bölüm nokta (.) ile ayrılır: xxxxx.yyyyy.zzzzz

Stateless (durumsuz) kimlik doğrulama sağlar. Sunucu, oturum bilgisini veritabanında saklamak yerine token'ı istemciye gönderir. İstemci her istekte token'ı gönderir.

Kullanım alanları: API authentication, SSO (Single Sign-On), mikroservisler arası kimlik doğrulama, mobil uygulama yetkilendirme.

JWT Yapısı

Header: Token tipi (JWT) ve imzalama algoritmasını (HS256, RS256, ES256) içerir. Base64URL ile encode edilir.

Payload: Claims (talepler) içerir. Registered claims (iss, sub, aud, exp, nbf, iat, jti), public claims ve private claims. Base64URL ile encode edilir.

Signature: Header ve payload'ın Base64URL encode edilmiş halleri nokta ile birleştirilir ve gizli anahtar ile imzalanır. HS256 için HMAC-SHA256, RS256 için RSA-SHA256 kullanılır.

Örnek: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT Kullanım Akışı

1. Kullanıcı, kullanıcı adı ve şifre ile login endpoint'ine istek yapar.

2. Sunucu, kimlik bilgilerini doğrular ve JWT oluşturur. Token, response body veya cookie olarak döner.

3. İstemci, token'ı localStorage veya httpOnly cookie'de saklar.

4. Sonraki isteklerde istemci, Authorization header'ında Bearer token olarak JWT'yi gönderir: Authorization: Bearer <token>

5. Sunucu, token'ı doğrular (imza ve expiry kontrolü). Geçerliyse isteği işler, geçersizse 401 Unauthorized döner.

Güvenlik Riskleri

Token çalınması: XSS saldırısı ile localStorage'daki token çalınabilir. httpOnly cookie kullanarak XSS riskini azaltın.

Token süresi: Kısa ömürlü access token (15-30 dk) + uzun ömürlü refresh token (7-30 gün). Token rotation ile refresh token'ı her kullanımda yenileyin.

Algorithm confusion: 'none' algoritması veya RS256→HS256 geçişi. Sunucu tarafında algoritmayı sabit olarak belirleyin, token'dan almayın.

Sensitive data: JWT payload'ı Base64 encode edilmiştir, şifrelenmemiştir. Hassas verileri (şifre, kredi kartı) payload'a koymayın.

Token boyutu: JWT, session cookie'den daha büyüktür. Her istekte gönderilir. Payload'ı minimal tutun.

Best Practices

Kısa ömürlü token'lar: Access token 15-30 dakika, refresh token 7-30 gün. Süresi dolan token'lar otomatik olarak geçersiz olur.

httpOnly + Secure + SameSite cookie: Token'ı httpOnly cookie'de saklayın. JavaScript erişemez (XSS koruması). Secure (HTTPS only). SameSite (CSRF koruması).

Token rotation: Refresh token her kullanımda yenilenir. Eski refresh token geçersiz olur. Token çalınması durumunda saldırganın erişimi sınırlanır.

Blacklist/revocation: Token'ı iptal etmek için blacklist kullanın. Redis ile revoked token'ları saklayın. Logout ve güvenlik olaylarında kullanın.

Algorithm: RS256 (asimetrik) production için önerilir. Private key ile imzala, public key ile doğrula. HS256 (simetrik) sadece tek servis için.

Validation: Her istekte imza, issuer (iss), audience (aud), expiry (exp) doğrulaması yapın. Token'ı güvenmeden önce tüm kontrolleri geçtiğinden emin olun.

JWT vs Session-Based Authentication

JWT: Stateless, horizontal scaling kolay, mikroservisler için ideal, token boyutu büyük, iptal etmek zor.

Session: Stateful, sunucu tarafında depolama gerekli, horizontal scaling için sticky session veya shared store gerekli, token boyutu küçük, iptal etmek kolay.

Seçim kriterleri: Mikroservis mimarisi → JWT. Monolitik uygulama → Session. Mobil uygulama → JWT. Yüksek güvenlik gereksinimi → Session + JWT hybrid.

Hybrid yaklaşım: Kısa ömürlü JWT (access token) + session store (refresh token). Her ikisinin avantajlarını birleştirir.

Gizlilik tercihiniz

Temel çerezler güvenli kullanım ve oturum yönetimi içindir. Temel ziyaret sayımı ayrıca yapılır; izin verirseniz ek kullanım analizlerini etkinleştiririz. Çerez Politikası