access token 是在 Oauth2.0 協議中,客戶端訪問資源服務器的令牌(其實就是一段全局唯一的隨機字符串)。擁有這個令牌代表着得到用戶的授權。它里面包含哪些信息呢?答案是:
哪個用戶 在什么時候 授權給哪個客戶端 去做什么事情
對於 Oauth2.0 不了解的讀者,請看我的另一篇文章:簡單介紹 Oauth2.0 原理
這個授權是臨時的,有一定有效期。這是因為,access token 在使用的過程中可能會泄露。給 access token 限定一個較短的有效期可以降低因 access token 泄露而帶來的風險。
然而引入了有效期之后,客戶端使用起來就不那么方便了。每當 access token 過期,客戶端就必須重新向用戶索要授權。這樣用戶可能每隔幾天,甚至每天都需要進行授權操作。這是一件非常影響用戶體驗的事情。希望有一種方法,可以避免這種情況。
於是 Oauth2.0 引入了 refresh token 機制。refresh token 的作用是用來刷新 access token。鑒權服務器提供一個刷新接口,例如:
POST /refresh
參數: refreshtoken
返回:新的 access token
傳入 refresh token,鑒權服務器驗證通過后,返回一個新的 access token。為了安全,Oauth2.0 引入了兩個措施:
1,Oauth2.0 要求,refresh token 一定是保存在服務器上(應用方的服務器)的,而絕不能存放在狹義的客戶端(例如移動 app、PC端軟件、瀏覽器) 上。調用 refresh 接口的時候,一定是從服務器到服務器的訪問;
2,Oauth2.0 引入了 client_id 、client_secret 機制。即每一個應用都會被分配到一個 client_id 和一個對應的 client_secret。應用必須把 client_secret 妥善保管在服務器上,決不能泄露。刷新 access token 時,需要驗證這個 client_secret。
於是,實際上的刷新接口應該是類似這樣的:
POST /refresh
參數:
refresh token
client_id
signatrue 簽名,由 sha256(client_id + refresh_token + client_secret) 得到
返回:新的 access token
以上就是 refresh token 機制。refresh token 的有效期非常長,會在用戶授權時,隨 access token 一起重定向到回調 url,傳遞給應用。
若有疑問,可以直接評論。