Yenileme belirteci en az iki amaca hizmet eder. Birincisi, yenileme belirteci, bir OAuth2 İstemcisinin zaten kendi verilerine erişme izni aldığının bir tür 'kanıtıdır' ve böylece kullanıcının tüm OAuth2 akışından geçmesine gerek kalmadan yeniden yeni bir erişim belirteci talep edebilir. İkincisi, uzun ömürlü bir erişim belirtecine kıyasla tüm güvenlik akışını artırmaya yardımcı olur. Bu iki noktaya biraz daha detaylı değineceğim.
Kullanıcıyı Rahatsız Etmemek İçin Tokenleri Yenileyin
Bir örnekle birinci amaçtan bahsedelim. Bir Kullanıcı olarak, YouTube hesap verilerinizle etkileşim kurmak isteyen bir üçüncü taraf İstemci web uygulaması kullandığınızı varsayalım. İstemci uygulamasına YouTube verilerinizi kullanma izni verdiğinizde, İstemci uygulamasının sizden izin istemesini ister miydiniz? tekrarYouTube jetonunun süresi ne zaman doldu? YouTube jetonunun sona erme süresi 5 dakika gibi çok kısa bir süreyse ne olur? İstemci uygulamasının en az her 5 dakikada bir sizden izninizi istemesi biraz can sıkıcı olabilir! OAuth2'nin bu 'soruna' önerdiği çözüm, yenileme belirteçleridir. Yenileme jetonlarını kullanarak erişim jetonu kısa ömürlü kalabilir (erişim jetonunun bir şekilde sızdırılması veya çalınması durumunda istenir) ve yenileme jetonu uzun (er) -hayatlı kalabilir ve Müşterinin yeni bir erişim elde etmesine izin verir. Kullanıcının iznine gerek kalmadan birinin süresi dolduğunda jeton (tekrar).
Ama neden bir yenileme belirteci? Konu Kullanıcıyı izin istekleriyle rahatsız etmeyecekse, o zaman Müşteri neden "Hey, Yetkilendirme Sunucusu, başka bir erişim belirteci istiyorum. Şimdi!" Diyemiyor? Veya "Hey Yetkilendirme Sunucusu, işte süresi dolmuş jetonum, bana yeni bir tane ver!". Yenileme jetonu, Müşteriye zamanın orijinal bir noktasında bir Kullanıcı tarafından erişim verildiğinin bir tür "kanıtı" işlevi görür. Bu "kanıt", Yetkilendirme Sunucusu tarafından dijital olarak imzalanan yenileme belirteci biçimindedir. Müşterinin bir yenileme belirteci sunmasıyla, Yetkilendirme Sunucusu, Müşterinin geçmişte bir noktada Kullanıcıdan izin aldığını ve Müşterinin Kullanıcıya tekrar sormak zorunda olmadığını doğrulayabilir.
Güvenliği Artırma Aracı Olarak Jetonu Yenileyin
Ancak bu şu soruyu gündeme getiriyor: "Yenileme jetonu sızdırılırsa veya çalınırsa ya da kullanıcının isteği üzerine ondan kurtulmayan kötü amaçlı bir İstemci uygulaması tarafından saklanırsa ne olur? Saldırgan devam edemez mi? Süresiz olarak (veya süresi dolana kadar) geçerli bir erişim belirteci elde etmek için yenileme belirtecini kullanın Bu soru, daha güvenli bir akışa katkıda bulunan yenileme belirteçlerinin bahsettiğim ikinci amacını tartışmaya götürür.
Erişim belirteçleri ile ortaya çıkan sorun, bir kez edinildikten sonra yalnızca Kaynak Sunucusuna (örneğin YouTube) sunulmalarıdır. Öyleyse, bir erişim belirteci çalınırsa veya tehlikeye atılırsa, Kaynak Sunucusuna bu simgeye güvenmemesini nasıl söylersiniz? Aslında yapamazsın. Bunu yapmanın tek yolu, Yetkilendirme Sunucusundaki özel imzalama anahtarını (ilk olarak belirteci imzalayan anahtar) değiştirmektir. Bunun uygun olmadığını ve bazı durumlarda (Auth0 gibi) desteklenmediğini düşünüyorum.
Öte yandan, yenileme belirteçlerinin Yetkilendirme Sunucusuna sık sık sunulması gerekir ve bu nedenle birinin güvenliği ihlal edilirse, yenileme simgesinin bir bütün olarak iptal edilmesi veya reddedilmesi önemsizdir ve herhangi bir imzalama anahtarını değiştirmek zorunda kalmaz.