為什么需要refresh token
refreshToken就是用來在accessToken過期以后來重新獲取accessToken的
0.使用流程
-> 1.登錄成功獲得 refresh token 并持久化
-> 2.通過 refresh token 請求刷新得到 access token 并臨時儲存
-> 3.請求業(yè)務接口使用 access token
-> 4.access token 過期或者快過期再次回到「 2 」
-> 5.refresh token 也過期則生命周期結束,需重新登錄
1.使用場景來看
- 如果是一個前后端分離的項目,使用springsecurity+jwt這種,前端用戶在登錄以后,后端返回給前端一個accessToken,如果沒有refresh token,又因為因為安全原因accessToken過期時間會設置的比較短,在accessToken過期以后,用戶將會被強制重新登錄,影響用戶體驗
而如果使用refresh Token,如果用戶持續(xù)地訪問這個網站,他們可以一直保持登錄狀態(tài),而不需要定期重新登錄 - 如果是業(yè)務服務器之間的相互調用,那么此時只用一個Access Token即可,強制重新登錄影響不大,只不過是如果使用 Refresh Token 在獲取新的 Access Token 的時候比直接重新登錄會方便一小丟丟
2.從是否需要讀取額外的狀態(tài)來看
token 的過期時間一般會比 refeshToken 的過期時間短很多,保證 token 被盜取后無法持久的做壞事,通過 AccessToken 訪問,只要通過簽名校驗合法即可通行,無需讀取額外的狀態(tài)來進一步確認是否撤銷,當 AccessToken 過期以后再通過 RefreshToken 讀取額外的狀態(tài)(數據庫 /緩存)確認是否繼續(xù)簽發(fā)
3.從安全程度來看
access token 有效期短 被盜損失更小 安全性更高
如果refresh token被盜了 想刷新access token的話 也需要提供過期的refresh token 盜取難度增加
同時refresh token只有在第一次獲取和刷新access token時才會在網絡中傳輸,因此被盜的風險遠小于access token 從而在一定程度上 更安全了一點
所謂的更安全就是讓盜取信息者更不容易獲得而已
關于 token 過期的疑惑,為什么需要 refresh token? - 糯米PHP (nuomiphp.com)
沒有理解refresh token的必要性或者說其為何比access token安全
Web API與OAuth:既生access token,何生refresh token
RFC 6819: OAuth 2.0 Threat Model and Security Considerations (rfc-editor.org)