为什么 OAuth 里除了 Access Token 之外,还需要 Refresh Token?
What is the purpose of a “Refresh Token”?
問題:我有一個與 YouTube Live Streaming API 集成的程序。我以每 50 分鐘的時間間隔,使用刷新令牌(refresh token)獲取一個新的訪問令牌(Access Token)。 我的問題是,為什么 OAuth 要設計雙重 token?
當我通過 YouTube 進行身份驗證時,它給了我一個刷新令牌。然后我使用這個刷新令牌大約每小時獲取一個新的訪問令牌。 如果我有刷新令牌,我總是可以使用它來獲取新的訪問令牌,因為它永遠不會過期。所以我不認為這比從一開始就給我一個訪問令牌更安全。
回答
簡單地說,刷新令牌用于獲取新的訪問令牌。
為了清楚地區分這兩個令牌并避免混淆,以下是 OAuth 2.0 授權框架中給出的功能:
-
訪問令牌由授權服務器在資源所有者的批準下頒發給第三方客戶端。客戶端使用訪問令牌訪問由資源服務器托管的受保護資源。刷新令牌是用于獲取訪問令牌的憑據。
-
刷新令牌由授權服務器頒發給客戶端,用于在當前訪問令牌失效或過期時獲取新的訪問令牌,或者獲取具有相同或更窄范圍的附加訪問令牌。
出于安全原因,refresh_token 只與授權服務器交換,而 access_token 與資源服務器交換。這降低了“訪問令牌有效期為一小時,刷新令牌有效期為一年或撤銷前有效”與“訪問令牌有效直至撤銷而無需刷新”中長期存在的 access_token 泄漏的風險。
刷新令牌至少有兩個用途。首先,刷新令牌是一種“證明”,表明 OAuth2 客戶端已經從用戶那里獲得了訪問其數據的許可,因此可以再次請求新的訪問令牌,而無需用戶通過整個 OAuth2 流程。其次,與長期訪問令牌相比,它有助于增加整個安全流程。
刷新令牌作為不影響用戶體驗的一種方式
讓我們用一個例子來談談第一個目的。假設您是一名用戶,正在使用想要與您的 YouTube 帳戶數據進行交互的第三方客戶端網絡應用程序。一旦您授予客戶端應用程序使用您的 YouTube 數據的權限,您是否希望客戶端應用程序在其 YouTube 令牌過期時再次提示您獲得許可?如果 YouTube 令牌到期時間非常短(例如 5 分鐘),會發生什么?
如果客戶端應用程序至少每 5 分鐘提示您一次許可,那會有點煩人! OAuth2 針對這個“問題”提出的解決方案是刷新令牌。通過使用刷新令牌,訪問令牌可以保持短暫的生命周期(這在訪問令牌以某種方式泄露或被盜的情況下是可取的),并且刷新令牌可以保持長期(更)生命周期,從而允許客戶端獲得新的訪問權限令牌過期時無需用戶再次許可。
但是為什么要刷新令牌呢?如果重點是不讓用戶使用權限請求,那么為什么客戶端不能簡單地說“嘿,授權服務器,我想要另一個訪問令牌。而是,“嘿授權服務器,這是我過期的令牌,給我一個新的!”。刷新令牌作為一種“證明”,證明客戶端在某個原始時間點被用戶授予訪問權限。該“證明”采用由授權服務器數字簽名的刷新令牌的形式。通過客戶端提供刷新令牌,授權服務器可以驗證客戶端在過去的某個時間點收到了用戶的許可,并且客戶端不必再次提示用戶。
刷新令牌作為提高安全性的一種手段
然而,這提出了一個問題,“好吧,如果刷新令牌被泄露或被盜,或者只是被惡意客戶端應用程序保留而沒有應用戶的要求將其刪除,會發生什么?攻擊者能不能繼續使用刷新令牌無限期地(或直到它過期)獲得有效的訪問令牌?這個問題導致討論我提到的第二個目的,刷新令牌有助于更安全的流程。
訪問令牌出現的問題是,一旦獲得,它們只會呈現給資源服務器(例如 YouTube)。因此,如果訪問令牌被盜或泄露,您如何告訴資源服務器不要信任該令牌?好吧,你真的不能。唯一的方法是更改??授權服務器上的私有簽名密鑰(首先對令牌進行簽名的密鑰)。
另一方面,刷新令牌需要頻繁地提交給授權服務器,因此如果一個令牌被泄露,那么撤銷或拒絕整個刷新令牌是微不足道的,而不必更改任何簽名密鑰。
access token (the one that expires soonest) is stored in local storage
refresh token only stored in memory for security reasons
that is why if you refresh after first time period, you have to log in
關于 refresh token 的超時時間
if your access token expired, and it was refreshed using the refresh token --> that doesn’t make the refresh token duration reset. The refresh token’s timeout will continue to tick from the moment you first logged in
總結
以上是生活随笔為你收集整理的为什么 OAuth 里除了 Access Token 之外,还需要 Refresh Token?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Intel淘汰一批14nm老奔腾、赛扬:
- 下一篇: 机械革命推出新款极光 Pro 游戏本:i