"Yenileme Belirteci" nin amacı nedir?


96

YouTube Live Streaming API ile entegre olan bir programım var. Zamanlayıcılarla çalışıyor, bu yüzden her 50 dakikada bir Yenileme Jetonuyla yeni bir Erişim Jetonu almak için programlamak benim için nispeten kolay oldu. Sorum şu, neden?

YouTube ile kimliğimi doğruladığımda bana bir Yenileme Simgesi verdi. Daha sonra bu yenileme belirtecini saatte bir yeni bir Erişim Jetonu almak için kullanıyorum. Yenileme Belirtecine sahipsem, süresi asla dolmadığı için HER ZAMAN bunu yeni bir Erişim Jetonu almak için kullanabilirim. Bu yüzden bunun, bana başlangıçta bir Erişim Jetonu vermekten ve tüm Yenileme Jetonu sistemini rahatsız etmekten daha güvenli olduğunu anlamıyorum.



1
Erişim belirteci, taşıyıcı belirteçlerdir. Başka bir kimlik gerekmediği anlamına gelir ve sizi taklit etmek için gereken tek şey erişim jetonudur. Bu nedenle her zaman kısa ömürlü olmalıdırlar. Öte yandan yenileme jetonları, taşıyıcı jetonlar değildir . Yeni bir erişim jetonu almak için YouTube'a bir yenileme jetonu gönderdiğinizde, bir client_id ve client_secret de göndermeniz gerekir. Bu nedenle, yenileme belirteci daha uzun süre kalabilir çünkü hem yenileme simgesinin hem de client_secret'in tehlikeye atılma olasılığı çok daha düşüktür.
jrahhali

Yanıtlar:


90

Temel olarak, yeni erişim belirteci almak için yenileme belirteçleri kullanılır.

Bu iki jetonu açıkça ayırt etmek ve karıştırılmamak için, OAuth 2.0 Yetkilendirme Çerçevesinde verilen işlevleri şunlardır :

  • Erişim belirteçleri , kaynak sahibinin onayı ile bir yetkilendirme sunucusu tarafından üçüncü taraf istemcilere verilir. İstemci, kaynak sunucusu tarafından barındırılan korumalı kaynaklara erişmek için erişim belirtecini kullanır.
  • Yenileme Belirteçleri, erişim belirteçlerini almak için kullanılan kimlik bilgileridir. Yenileme jetonları, yetkilendirme sunucusu tarafından istemciye verilir ve mevcut erişim jetonu geçersiz hale geldiğinde veya sona erdiğinde yeni bir erişim jetonu elde etmek veya aynı veya daha dar kapsama sahip ek erişim jetonları elde etmek için kullanılır.

Şimdi, yalnızca bir erişim jetonunu güvence altına almak yerine neden hala bir yenileme jetonu verildiğine ilişkin sorunuza cevap vermek için, İnternet Mühendisliği Görev Gücü tarafından Yenileme jetonlarında sağlanan ana neden şudur:

Bir güvenlik nedeni vardır, refresh_tokenyalnızca yetkilendirme sunucusuyla access_tokendeğiştirilirken, kaynak sunucuları ile değiştirilir. Bu, uzun ömürlü bir erişim belirtecinde "bir saat için geçerli bir erişim belirtecinde, bir yıl için geçerli olan bir yenileme belirteciyle veya iptal edilene kadar geçerli" ile "yenilenmeden iptal edilen bir erişim belirtecinde" sızma riskini azaltır. jeton."

OAuth 2.0 Akışı hakkında daha ayrıntılı ve eksiksiz bilgi için lütfen aşağıdaki referansları incelemeyi deneyin:


5
Yenileme jetonu, yeni yenileme jetonunun alınmasına da yardımcı olmalı mı?
Gherman

5
Neden süresi dolduğunda yeni bir kısa ömürlü erişim belirteci almayasınız? Her halükarda sunucudan yeni bir erişim belirteci istemeniz gerekiyorsa neden uzun ömürlü yenileme_tokenına sahip olmalısınız? Veya bir yenileme_token ile canlı kimlik sağlayıcı tanımlama bilgisini korumam gerekmediği ve tanımlama bilgisi uzun süre gittikten ve kullanıcının kimlik bilgilerini girmek isteseydi bile yenileme_ belirtecine dayalı olarak yeni erişim_tokenları yayınladığı doğru mu? new access_token?
JustAMartin

2
@JustAMartin Bir OAuth2 İstemcisi olarak, bir yenileme belirteci olmadan, başka bir erişim belirteci almak için tüm yetkilendirme akışını yeniden başlatmam gerekir (kullanıcının 'oturum açmasını' ve bana yeniden izinler vermesini sağlama). Yenileme belirteçleri, Müşteri olarak zaten bir erişim belirteci istemek için Kullanıcının iznini aldığımın bir tür 'kanıtı' olarak bu gereksinimi atlıyor.
jrahhali

bir yenileme belirteci erişim belirteciyle aynı veya aynı verilere sahip olabilir mi? Yenileme belirtecinin başlıca kullanımı, kullanıcı deneyimini kolaylaştırmak ve bilgisayar korsanlarının bir kaynağa erişim süresini sınırlandırmaktır.
DaviesTobi alex

8

@Teyam SO gönderisinden bahsetti OAuth v2 Neden Hem Erişime hem de Yenileme Jetonlarına Sahip? ama orada başka bir cevabı tercih ederim: https://stackoverflow.com/a/12885823/254109

TL; DR refresh_token artırılmış güvenlik getirmez. Ölçeklenebilirliği ve performansı iyileştirme amacı içindir. Daha sonra, access_tokensadece bazı hızlı, geçici depolamalarda (bellek gibi) depolanabilir. Yetkilendirme ve kaynak sunucu ayrılmasına da izin verir.


3
@Teyam tarafından belirtildiği gibi bir güvenlik nedeni olması dışında: "yenileme_token yalnızca yetkilendirme sunucusuyla değiştirilirken erişim belirteci kaynak sunucularıyla değiştirilir"
huyz

Bu, yalnızca yetkilendirme sunucusunun kaynak sunucusu olarak bir şekilde daha güvenli olduğunu varsayarsak daha güvenlidir. Durum böyle değilse, aslında daha az güvenlidir. Yenileme belirtecinin güvenliği ihlal edildiğinde, bunu yeni bir erişim belirteci almak için kullanabilirim.
Arno van Lieshout

6

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.


5

"Bu yüzden bunun, baştan bana bir Erişim Jetonu vermekten ve tüm Yenileme Jetonu sistemini rahatsız etmekten daha güvenli olduğunu anlamıyorum." Ben de aynı soruyla mücadele ettim. Kısa cevap, yenileme belirtecinin kimlik bilgilerinin süresinin dolmadığından emin olmak için gerekli olmasıdır.

Bir örnek yardımcı olabilir: Tıbbi kayıtlarınızı saklayan bir veritabanım var. Tıbbi kayıtlarınızı eşinizle paylaşmayı kabul ediyorsunuz. Eşiniz, kayıtlarınızı veritabanımdan okumak için Erişim Jetonunu kullanır. Bundan iki hafta sonra eşiniz tıbbi kayıtlarınızı tekrar kontrol eder ve yenileme belirteci, kayıtlarınızı görüntüleme iznine (kimlik doğrulama sunucusundan) hala sahip olduklarından emin olmak için kullanılır. Yenileme belirteci, eşinizin kimlik bilgilerini (kullanıcı adı ve şifre) kimlik doğrulama sunucusuna yeniden girme ihtiyacını atlar, ancak kaynağa erişmek için hala meşruiyete sahip olmasını sağlar. Asla süresi dolmayan bir Erişim Jetonu, eşinizin tıbbi kayıtlarınıza erişim haklarını iptal edip etmediğinizi bilemez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.