What is the purpose of a “Refresh Token”? 問(wèn)題:我有一個(gè)與 YouTube Live Streaming API 集成的程序。我以每 50 分鐘的時(shí)間間隔,使用刷新令牌(refresh token)獲取一個(gè)新的訪問(wèn)令牌(Access Token)。 我的問(wèn)題是,為什么 OAuth 要設(shè)計(jì)雙重 token? 當(dāng)我通過(guò) YouTube 進(jìn)行身份驗(yàn)證時(shí),它給了我一個(gè)刷新令牌。然后我使用這個(gè)刷新令牌大約每小時(shí)獲取一個(gè)新的訪問(wèn)令牌。 如果我有刷新令牌,我總是可以使用它來(lái)獲取新的訪問(wèn)令牌,因?yàn)樗肋h(yuǎn)不會(huì)過(guò)期。所以我不認(rèn)為這比從一開(kāi)始就給我一個(gè)訪問(wèn)令牌更安全。 回答簡(jiǎn)單地說(shuō),刷新令牌用于獲取新的訪問(wèn)令牌。 為了清楚地區(qū)分這兩個(gè)令牌并避免混淆,以下是 OAuth 2.0 授權(quán)框架中給出的功能:
出于安全原因,refresh_token 只與授權(quán)服務(wù)器交換,而 access_token 與資源服務(wù)器交換。這降低了“訪問(wèn)令牌有效期為一小時(shí),刷新令牌有效期為一年或撤銷(xiāo)前有效”與“訪問(wèn)令牌有效直至撤銷(xiāo)而無(wú)需刷新”中長(zhǎng)期存在的 access_token 泄漏的風(fēng)險(xiǎn)。 刷新令牌至少有兩個(gè)用途。首先,刷新令牌是一種“證明”,表明 OAuth2 客戶(hù)端已經(jīng)從用戶(hù)那里獲得了訪問(wèn)其數(shù)據(jù)的許可,因此可以再次請(qǐng)求新的訪問(wèn)令牌,而無(wú)需用戶(hù)通過(guò)整個(gè) OAuth2 流程。其次,與長(zhǎng)期訪問(wèn)令牌相比,它有助于增加整個(gè)安全流程。 刷新令牌作為不影響用戶(hù)體驗(yàn)的一種方式讓我們用一個(gè)例子來(lái)談?wù)劦谝粋€(gè)目的。假設(shè)您是一名用戶(hù),正在使用想要與您的 YouTube 帳戶(hù)數(shù)據(jù)進(jìn)行交互的第三方客戶(hù)端網(wǎng)絡(luò)應(yīng)用程序。一旦您授予客戶(hù)端應(yīng)用程序使用您的 YouTube 數(shù)據(jù)的權(quán)限,您是否希望客戶(hù)端應(yīng)用程序在其 YouTube 令牌過(guò)期時(shí)再次提示您獲得許可?如果 YouTube 令牌到期時(shí)間非常短(例如 5 分鐘),會(huì)發(fā)生什么? 如果客戶(hù)端應(yīng)用程序至少每 5 分鐘提示您一次許可,那會(huì)有點(diǎn)煩人! OAuth2 針對(duì)這個(gè)“問(wèn)題”提出的解決方案是刷新令牌。通過(guò)使用刷新令牌,訪問(wèn)令牌可以保持短暫的生命周期(這在訪問(wèn)令牌以某種方式泄露或被盜的情況下是可取的),并且刷新令牌可以保持長(zhǎng)期(更)生命周期,從而允許客戶(hù)端獲得新的訪問(wèn)權(quán)限令牌過(guò)期時(shí)無(wú)需用戶(hù)再次許可。 但是為什么要刷新令牌呢?如果重點(diǎn)是不讓用戶(hù)使用權(quán)限請(qǐng)求,那么為什么客戶(hù)端不能簡(jiǎn)單地說(shuō)“嘿,授權(quán)服務(wù)器,我想要另一個(gè)訪問(wèn)令牌。而是,“嘿授權(quán)服務(wù)器,這是我過(guò)期的令牌,給我一個(gè)新的!”。刷新令牌作為一種“證明”,證明客戶(hù)端在某個(gè)原始時(shí)間點(diǎn)被用戶(hù)授予訪問(wèn)權(quán)限。該“證明”采用由授權(quán)服務(wù)器數(shù)字簽名的刷新令牌的形式。通過(guò)客戶(hù)端提供刷新令牌,授權(quán)服務(wù)器可以驗(yàn)證客戶(hù)端在過(guò)去的某個(gè)時(shí)間點(diǎn)收到了用戶(hù)的許可,并且客戶(hù)端不必再次提示用戶(hù)。 刷新令牌作為提高安全性的一種手段然而,這提出了一個(gè)問(wèn)題,“好吧,如果刷新令牌被泄露或被盜,或者只是被惡意客戶(hù)端應(yīng)用程序保留而沒(méi)有應(yīng)用戶(hù)的要求將其刪除,會(huì)發(fā)生什么?攻擊者能不能繼續(xù)使用刷新令牌無(wú)限期地(或直到它過(guò)期)獲得有效的訪問(wèn)令牌?這個(gè)問(wèn)題導(dǎo)致討論我提到的第二個(gè)目的,刷新令牌有助于更安全的流程。 訪問(wèn)令牌出現(xiàn)的問(wèn)題是,一旦獲得,它們只會(huì)呈現(xiàn)給資源服務(wù)器(例如 YouTube)。因此,如果訪問(wèn)令牌被盜或泄露,您如何告訴資源服務(wù)器不要信任該令牌?好吧,你真的不能。唯一的方法是更改授權(quán)服務(wù)器上的私有簽名密鑰(首先對(duì)令牌進(jìn)行簽名的密鑰)。 另一方面,刷新令牌需要頻繁地提交給授權(quán)服務(wù)器,因此如果一個(gè)令牌被泄露,那么撤銷(xiāo)或拒絕整個(gè)刷新令牌是微不足道的,而不必更改任何簽名密鑰。 |
|