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ış

  1. Login: kullanıcı access + refresh token alır.
  2. Access token süresi dolunca istemci POST /auth/refresh çağırır.
  3. Sunucu refresh token'ı DB'de doğrular, yeni access token ve yeni refresh token döner, eskisini geçersiz kılar (rotation).
  4. 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 jti değ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_version tutup token'daki değerle karşılaştırmak.

Saklama

  • Tarayıcıda refresh token'ı HttpOnly; Secure; SameSite=Strict cookie'de tutun; localStorage XSS'e açıktır.
  • Mobilde Keychain / Keystore kullanın.
  1. HTTP 401 ile 403 durum kodları arasındaki fark nedir?KolayAPI TasarımıBackend
  2. JWT nedir? Session tabanlı kimlik doğrulamadan farkı nedir?OrtaAPI TasarımıBackend
  3. Idempotency nedir? Hangi HTTP metotları idempotent'tir?OrtaAPI TasarımıBackend
  4. OAuth 2.0 nedir? Authorization Code (PKCE) ve Client Credentials akışları nasıl çalışır?ZorAPI TasarımıBackend
  5. Rate limiting nedir? Token bucket ve sliding window algoritmalarını açıklayın.ZorAPI TasarımıBackend
  6. gRPC nedir? REST'ten farkı nedir ve ne zaman tercih edilir?OrtaAPI TasarımıBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle