前言
我在項目上寫了個配置頁面,之前很簡單直接登錄,畢竟配置頁面自己人用就沒有做token機制,后來公司的安全審核不過,現在要加上token和刷新機制。小結一下。
token和刷新機制
token機制就是在登錄成功后返回一個token,並緩存起來,之后每個請求頭里帶上token,后端驗證不通過返回401,前端就直接跳轉到登錄頁。這樣就能防止直接訪問某個鏈接就能跳到登錄頁的尷尬局面。
token刷新機制就是在使用的時候使用某個機制使得這個token不過期,不會跳轉到登錄頁。而沒有使用的時候token會過期,他隔得太久了再調接口就是401,就會跳到登錄頁。
兩種token刷新機制
第一種(后端提供刷新接口)
客戶端 | 服務端 | |
---|---|---|
--- | 發送username & password | ---> |
<--- | 返回accesstoken & refreshtoken | --- |
--- | 訪問接口攜帶accesstoken | ---> |
<--- | 返回信息/401 | --- |
--- | accesstoken過期訪問刷新接口攜帶refreshtoken | ---> |
<--- | 返回新的accesstoken/401 | --- |
--- | 訪問接口攜帶新的accesstoken | ---> |
<--- | 返回信息/401 | --- |
這種情況下 refreshtoken可以設置的時間長一點,而accesstoken設置的時間短一點,我們固定一個用戶活躍周期;
活躍周期 = token周期 * 2 ;
eg:活躍周期(at);token周期(et);accesstoken(5 min);refreshtoken(1 day);
用戶在15:00登錄,返回token,et[15:00-15:05];at[15:00-15:10];
如果用戶在15:06調用接口,攜帶accesstoken會返回401過期,此時在活躍周期范圍內,則調用refreshtoken刷新接口,返回新的accesstoken;
此時:et[15:06-15:11],at[15:06-15:16];
如果用戶在15:17分調用接口攜帶accesstoken會返回401過期,此時不再活躍周期內,則跳轉到登錄頁;
第二種(靠前端cookie實現)
客戶端 | 服務端 | |
---|---|---|
--- | 發送username & password | ---> |
<--- | 返回accesstoken | --- |
cookie存儲設置過期時間 | ||
--- | 訪問接口攜帶accesstoken | ---> |
<--- | 返回信息/401 | ---> |
調用成功,覆蓋延長cookie過期時間 | ---> |
這種情況后端accesstoken可以設置的時間長一點;
前端將token存在cookie中,維護一個過期時間,每次調用接口成功后就覆蓋延長這個過期時間,不調用接口的時候自然會超時了;
以上;