Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
Refresh token rotasyonu, her başarılı yenileme isteğinde eski refresh token’ı geçersiz kılıp yerine yeni bir refresh token verme yöntemidir. Böylece ele geçirilmiş bir refresh token tekrar kullanılırsa sunucu bu kullanımı fark edebilir; ilgili oturum veya token ailesi iptal edilerek saldırganın sürekli yeni access token üretmesi engellenir. Ancak rotasyon, token çalınmadan önceki riski ortadan kaldırmaz ve tek başına oturum güvenliğinin tamamı değildir.

Nasıl çalışır?​


İlk oturum açmada istemciye bir access token ve bir refresh token verilir. Access token süresi dolduğunda istemci refresh token’ı sunucuya gönderir. Sunucu token’ın geçerli olduğunu ve daha önce kullanılmadığını kontrol eder, eski token’ı tüketilmiş olarak işaretler ve yeni bir access token ile yeni bir refresh token üretir.

Sunucu eski refresh token’ın tekrar kullanıldığını görürse bu durum token replay olarak değerlendirilir. Replay tespitinde yalnızca zaten tüketilmiş eski tokenı reddetmek yeterli değildir. Meşru istemci ile saldırganı ayırt edemeyen sunucu, ilgili yetkilendirme ailesinin etkin refresh tokenını da iptal ederek zinciri keser; kullanıcının yeniden yetkilendirme yapması gerekir. Bu, RFC 9700’daki rotasyonla replay tespiti akışının kritik parçasıdır.

Önemli nokta şudur: Saldırgan çalınmış tokenı meşru istemciden önce kullanırsa saldırgan yeni token alabilir. Rotasyonun asıl avantajı, aynı eski token daha sonra tekrar kullanıldığında bu anormalliğin tespit edilebilmesidir.

Somut örnek​


Bir kullanıcı giriş yaptığında R1 refresh token’ı verilsin. İstemci R1 ile yenileme yaptığında sunucu R1’i geçersiz kılar ve R2’yi üretir. İstemci artık yalnızca R2’yi kullanmalıdır. Bir saldırgan daha sonra R1’i gönderirse istek reddedilir ve sunucu aynı yetkilendirme ailesinin etkin R2 tokenını da iptal eder. Meşru istemci artık R2 ile devam edemez; yeniden giriş/yetkilendirme gerekir.

Uygulanabilir tasarım ve işlem adımları​


  1. Her refresh token için benzersiz bir kimlik, bağlı kullanıcı veya oturum kimliği, önceki token ilişkisi, oluşturulma durumu ve iptal durumu tutun. Veritabanında tokenın kendisini açık biçimde saklamak yerine doğrulama için güçlü bir özet değer saklamak tercih edilir.
  2. Yenileme isteğinde tokenı doğrulayın; süresi dolmuş, iptal edilmiş veya daha önce kullanılmış tokenı yeni token üretmeden reddedin.
  3. Başarılı yenileme sırasında eski tokenı tüketilmiş olarak işaretleyip yeni tokenı aynı oturum ailesine bağlayın. Eski tokenın iptali ve yeni tokenın oluşturulması tek atomik işlem gibi ele alınmalıdır.
  4. Yanıt olarak yeni access token ile yeni refresh token gönderin. İstemci, eski refresh tokenı güvenilir biçimde silip yalnızca yenisini kullanmalıdır.
  5. Daha önce tüketilmiş bir refresh token yeniden gelirse token değerini günlüğe yazmadan olayı kaydedin ve bağlı yetkilendirme ailesinin etkin refresh tokenını iptal edin. Yalnızca eski tokenı reddedip yenisini açık bırakmayın.
  6. Birden fazla sekme veya cihazın aynı anda yenileme yapabileceğini test edin. İstem dışı yarışlar yanlışlıkla oturum kapatıyorsa istemci tarafında tekil yenileme kuyruğu veya sunucuda açıkça tanımlanmış kısa bir eşzamanlılık politikası kullanın.

Karar verirken dikkat edilecek noktalar​


Rotasyonun davranışı, tokenın durumuna ve alınacak karara göre değişir:

DurumSunucu davranışıİstemci sonucu
Geçerli ve ilk kez kullanılan tokenEski tokenı tüket, yeni çift üretYeni tokenlarla devam eder
Süresi dolmuş veya iptal edilmiş tokenYenilemeyi reddetYeniden giriş gerekebilir
Daha önce kullanılmış tokenİsteği reddet, bağlı etkin refresh zincirini iptal et ve olayı inceleBu yetkilendirme için yeniden giriş gerekir

Bu akışta en sık yapılan hata, yalnızca yeni token üretip eski tokenı geçersiz kılmamaktır. Böyle bir uygulama rotasyon görünümünde olsa da eski token tekrar tekrar kullanılabilir. İkinci hata, eşzamanlı istekleri hiç hesaba katmamaktır; aynı tokenı kullanan iki normal istekten biri gereksiz yere saldırı gibi yorumlanabilir. Bu nedenle atomiklik, istemci yenileme kuyruğu ve cihazlar arası oturum politikanız birlikte tasarlanmalıdır.

Refresh tokenı tarayıcıda erişilebilir JavaScript depolamasında tutmak, XSS etkisini büyütebilir. Saklama yöntemi seçilirken uygulamanın istemci mimarisi, çerez politikaları, CSRF önlemleri ve oturum iptal gereksinimleri birlikte değerlendirilmelidir. Access token ve refresh token için aynı süreyi veya aynı kullanım politikasını zorunlu kabul etmeyin; refresh token daha güçlü koruma ve ayrı iptal takibi gerektirir.

Public OAuth istemcilerinde replay tespiti için RFC 9700, refresh tokenların gönderene bağlanmasını veya rotasyon kullanılmasını ister. İstemcinin confidential/public olması ve sağlayıcının desteklediği mekanizma önemlidir. Tokenlar TLS ile taşınmalı; scope ve yetkilendirilmiş kaynak ilişkisi korunmalı, boşta kalma süresi ve sonlandırma politikası belirlenmelidir.

Kaynaklar​



Sık sorulan sorular​


Rotasyon access token çalınmasını engeller mi?​

Hayır. Rotasyon refresh tokenın tekrar kullanımını sınırlar ve şüpheli kullanımı tespit etmeye yardımcı olur. Çalınmış access token kendi geçerlilik süresi içinde ayrıca risk oluşturabilir.

Her kullanımda kullanıcı yeniden giriş yapar mı?​

Hayır. Başarılı ve geçerli yenilemelerde istemci yeni token çiftini alarak oturumu sürdürebilir. Yeniden giriş genellikle geçersiz, süresi dolmuş veya tekrar kullanılmış token politikanız gerektiriyorsa gerekir.

Bir refresh tokenı birden fazla cihaz paylaşabilir mi?​

Paylaşmak yerine her cihaz veya oturum için ayrı token ailesi oluşturmak daha yönetilebilirdir. Böylece tek cihazdaki şüpheli kullanım diğer oturumları gereksiz yere etkilemeden iptal edilebilir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.