Access Token 與 Refresh Token
access token 是在 Oauth2.0 協議中,客戶端訪問資源服務器的令牌(其實就是一段全局唯一的隨機字符串)。擁有這個令牌代表著得到用戶的授權。它里面包含哪些信息呢?答案是:
哪個用戶 在什么時候 授權給哪個客戶端 去做什么事情
對于不想知道原理,只想知道怎么使用 access token 的讀者,請看 Access Token 機制詳解
對于想要從原理上了解 Oauth2.0 的讀者,請看 簡單介紹 Oauth2.0 原理
這些信息,從 access token 本身是看不出來的。鑒權服務器上有一套 token 管理模塊,會在存儲系統中存放這些信息。
這個 access token 是臨時的,有一定有效期。這是因為,access token 在使用的過程中可能會泄露。給 access token 限定一個較短的有效期可以降低因 access token 泄露而帶來的風險。
然而引入了有效期之后,使用起來就不那么方便了,因為每當 access token 過期,使用方就必須獲取新的 access token。怎么獲取呢?那就是重新授權,也就是要打開鑒權頁面。這樣用戶可能每隔幾天,甚至每天都需要進行授權操作。這是一件非常影響用戶體驗的事情。希望有一種方法,可以避免這種情況。
于是 Oauth2.0 引入了 refresh token 機制。當鑒權服務器發送 access token 給使用方時,同時也發送一個 refresh token。 這個 refresh token 的有效期很長,作用是可以用來刷新 access token。鑒權服務器提供一個刷新接口,例如:
POST /refresh
參數: refreshtoken
返回:新的 access token
注:這個例子僅限于說明,實際當中獲取 access token 和刷新 access token 是同一個接口,不會單獨為刷新 access token 做一個接口
傳入 refresh token,鑒權服務器驗證 refresh token 是合法的之后,返回一個新的 access token。這樣,當 access token 過期后,使用方就使用 refresh token 來獲取一個新的 access token。
問題來了,這樣做難道不會破壞安全性嗎?前面說 access token 可能會泄漏,于是設置較短的有效期,可是現在又同時給一個 refresh token,那 refresh token 是怎么保證安全的呢?
答案是,為了 refresh token 的安全,Oauth2.0 要求,refresh token 一定要保存在使用方的服務器上,而絕不能存放在移動 app、PC端軟件、瀏覽器上,也不能在網絡上隨便傳遞。調用 refresh 接口的時候,一定是從使用方服務器到鑒權服務器的 https 訪問。所以,refresh token 比 access token 隱蔽得多,也安全得多。當然,這需要使用方正確的遵守 Oauth2.0 的要求。
若有疑問,可以直接評論。

浙公網安備 33010602011771號