c端認證服務
- 協(xié)議
oauth協(xié)議查詢用戶是否存在
oids協(xié)議查詢用戶擁有的權限緩存到自包含的jwt對象
- jwt對象
由客戶端本地持有緩存,大大減輕了服務端的壓力
訪問令牌,過期時間短30min
刷新令牌,過期時間長7天
訪問令牌過期不用跳轉登陸頁面,自動由刷新令牌申請新的訪問令牌
其他業(yè)務微服務如何驗證jwt對象
使用與認證服務相同的公鑰對jwt對象的payload部分重新計算簽名
然后對比簽名是否與jwt對象的簽名部分一致
認證服務簽發(fā)jwt對象時,將客戶端指紋比如設備id嵌入到payload部分,同理其他微服務驗證時從payload部分提取客戶指紋驗證是否一致
- jwt對象為什么由客戶端本地持有
- 減輕服務端查詢壓力,想象一下如果未緩存,每一個用戶請求都需要進行鑒權
- 由于jwt對象自包含,認證服務簽發(fā)一個jwt后,其他業(yè)務微服務都可以直接對jwt對象進行密碼學驗證后即可使用,無需訪問認證服務實現(xiàn)了解藕,從而實現(xiàn)了【單點登陸】功能
- jwt在客戶端存儲所以服務端無狀態(tài),方便橫向擴展,不存在需要對權限對象進行復制的問題
- 風險
一致性問題:jwt對象何時更新
-》 設置較短的過期時間
將某個簽發(fā)但未過期的token加入黑名單過濾