學(xué)習(xí)完整課程請移步 互聯(lián)網(wǎng) Java 全棧工程師
本節(jié)視頻
Access Token
Access Token 是客戶端訪問資源服務(wù)器的令牌。擁有這個令牌代表著得到用戶的授權(quán)雨涛。然而匪凉,這個授權(quán)應(yīng)該是 臨時(shí) 的闲先,有一定有效期镀脂。這是因?yàn)榇氐郑珹ccess Token 在使用的過程中 可能會泄露阐斜。給 Access Token 限定一個 較短的有效期 可以降低因 Access Token 泄露而帶來的風(fēng)險(xiǎn)箱蝠。
然而引入了有效期之后,客戶端使用起來就不那么方便了汇陆。每當(dāng) Access Token 過期怒炸,客戶端就必須重新向用戶索要授權(quán)。這樣用戶可能每隔幾天毡代,甚至每天都需要進(jìn)行授權(quán)操作阅羹。這是一件非常影響用戶體驗(yàn)的事情。希望有一種方法教寂,可以避免這種情況捏鱼。
于是 oAuth2.0 引入了 Refresh Token 機(jī)制
Refresh Token
Refresh Token 的作用是用來刷新 Access Token。認(rèn)證服務(wù)器提供一個刷新接口酪耕,例如:
http://www.funtl.com/refresh?refresh_token=&client_id=
傳入 refresh_token
和 client_id
导梆,認(rèn)證服務(wù)器驗(yàn)證通過后,返回一個新的 Access Token。為了安全问潭,oAuth2.0 引入了兩個措施:
- oAuth2.0 要求,Refresh Token 一定是保存在客戶端的服務(wù)器上 婚被,而絕不能存放在狹義的客戶端(例如 App狡忙、PC 端軟件)上。調(diào)用
refresh
接口的時(shí)候址芯,一定是從服務(wù)器到服務(wù)器的訪問灾茁。 - oAuth2.0 引入了
client_secret
機(jī)制。即每一個client_id
都對應(yīng)一個client_secret
谷炸。這個client_secret
會在客戶端申請client_id
時(shí)北专,隨client_id
一起分配給客戶端。客戶端必須把client_secret
妥善保管在服務(wù)器上旬陡,決不能泄露拓颓。刷新 Access Token 時(shí),需要驗(yàn)證這個client_secret
描孟。
實(shí)際上的刷新接口類似于:
http://www.funtl.com/refresh?refresh_token=&client_id=&client_secret=
以上就是 Refresh Token 機(jī)制驶睦。Refresh Token 的有效期非常長,會在用戶授權(quán)時(shí)匿醒,隨 Access Token 一起重定向到回調(diào) URL场航,傳遞給客戶端。