Access token ve refresh token mekanizması nasıl çalışır? JWT kullanırken logout ve token iptalini (revocation) nasıl yaparsınız?
Cevap
JWT gibi stateless token'lar sunucuda kayıt tutmadan doğrulanır; bu yüzden süresi dolmadan iptal edilemez. Çözüm, ömürleri farklı iki token kullanmaktır:
- Access token: kısa ömürlü (5-15 dakika), her API isteğinde gönderilir, imzası doğrulanarak kontrol edilir.
- Refresh token: uzun ömürlü (günler/haftalar), yalnızca yeni access token almak için auth sunucusuna gönderilir ve sunucuda saklanır (DB veya Redis), yani iptal edilebilir.
Akış
- Login: kullanıcı access + refresh token alır.
- Access token süresi dolunca istemci
POST /auth/refreshçağırır. - Sunucu refresh token'ı DB'de doğrular, yeni access token ve yeni refresh token döner, eskisini geçersiz kılar (rotation).
- Logout: refresh token DB'den silinir. Access token en fazla birkaç dakika daha geçerli kalır.
Refresh token rotation ve reuse detection
Rotation'da daha önce kullanılmış bir refresh token tekrar gelirse token çalınmış demektir; o kullanıcının tüm token ailesi iptal edilir ve yeniden giriş istenir.
refresh_tokens(id, user_id, family_id, token_hash, expires_at, revoked_at, replaced_by)Token'ı düz metin değil hash'lenmiş olarak saklayın.
Access token'ı anında iptal etmek gerekirse
- Kısa ömür yeterli olmayabilir (ör. hesap ele geçirildi, yetki kaldırıldı). Token'daki
jtideğerini süresi dolana kadar Redis'te bir denylist'e koyup her istekte kontrol edebilirsiniz; bu sistemi kısmen stateful yapar ama liste küçüktür. - Alternatif: kullanıcı başına bir
token_versiontutup token'daki değerle karşılaştırmak.
Saklama
- Tarayıcıda refresh token'ı
HttpOnly; Secure; SameSite=Strictcookie'de tutun;localStorageXSS'e açıktır. - Mobilde Keychain / Keystore kullanın.
İlgili API Tasarımı soruları
- HTTP 401 ile 403 durum kodları arasındaki fark nedir?
- JWT nedir? Session tabanlı kimlik doğrulamadan farkı nedir?
- Idempotency nedir? Hangi HTTP metotları idempotent'tir?
- OAuth 2.0 nedir? Authorization Code (PKCE) ve Client Credentials akışları nasıl çalışır?
- Rate limiting nedir? Token bucket ve sliding window algoritmalarını açıklayın.
- gRPC nedir? REST'ten farkı nedir ve ne zaman tercih edilir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.