Spring Cloud體系下配合Zuul網(wǎng)關(guān)進(jìn)行微服務(wù)認(rèn)證鑒權(quán)之一

背景

本文主題是作者在 Spring Cloud 體系下通過(guò) Zuul 網(wǎng)關(guān)來(lái)進(jìn)行認(rèn)證的遷移授權(quán)的前移、統(tǒng)一管理和業(yè)務(wù)服務(wù)進(jìn)行鑒權(quán)的思考和做法。
本文介紹的做法是根據(jù) Zuul 來(lái)做的,對(duì) Zuul 不熟悉的朋友可以看看下面這篇文章,通過(guò)這篇對(duì) Zuul 深入淺出的介紹之后能對(duì) Zuul 有個(gè)大致的了解。
出自方志朋的博客:深入理解Zuul之源碼解析

核心思想

本人認(rèn)為微服務(wù)中權(quán)限的處理應(yīng)該分為兩種:

  • 用戶(hù)的權(quán)限控制
  • 系統(tǒng)服務(wù)的權(quán)限控制

具體思路

先上圖

Zuul+微服務(wù)鑒權(quán).png
UML時(shí)序圖.png
  • 由圖中可以看出將請(qǐng)求簡(jiǎn)單的定義為內(nèi)部請(qǐng)求和外部請(qǐng)求。

再來(lái)分析外部請(qǐng)求(token)

  • 本人將 token 理解成認(rèn)證的令牌,token 完全由 Zuul 來(lái)具體管理(新建、刷新和銷(xiāo)毀)與其他服務(wù)無(wú)關(guān),但是 Zuul 中處理 token 的動(dòng)作指令由業(yè)務(wù)服務(wù)發(fā)出。
  • 用戶(hù)登錄:用戶(hù)請(qǐng)求登錄,Cookie 中無(wú) token,Zuul 不對(duì)其進(jìn)行認(rèn)證(即這個(gè)人我不認(rèn)識(shí),我不管),將請(qǐng)求投遞路由到業(yè)務(wù)服務(wù),業(yè)務(wù)服務(wù)該接口不會(huì)校驗(yàn)其權(quán)限,通過(guò)登錄邏輯處理,登錄成功返回,響應(yīng)頭中增加了登錄成功標(biāo)示和該用戶(hù)權(quán)限角色信息(authentication 后文通過(guò)該單詞代替 ),Zuul 接收到信息之后新建 token,并將tokenauthentication對(duì)應(yīng)起來(lái)。
  • 用戶(hù)請(qǐng)求信息:Cookie 中有 token,校驗(yàn)token的有效性,如果成功將取出對(duì)應(yīng)的authentication,設(shè)置進(jìn)路由的請(qǐng)求頭中,業(yè)務(wù)系統(tǒng)通過(guò)請(qǐng)求頭解析出該用戶(hù)的身份,并鑒權(quán)。
  • 用戶(hù)退出登錄:請(qǐng)求部分與用戶(hù)請(qǐng)求信息一致,返回時(shí)將在響應(yīng)頭中設(shè)置注銷(xiāo)登錄標(biāo)示,Zuul 獲取標(biāo)示之后會(huì)銷(xiāo)毀token與其對(duì)應(yīng)authentication

最后分析內(nèi)部請(qǐng)求

  • 由于是內(nèi)部請(qǐng)求,于是將安全校驗(yàn)的機(jī)制設(shè)置得相對(duì)簡(jiǎn)單了。
  • 將每個(gè)Service理解為一個(gè)獨(dú)立的第三方服務(wù)系統(tǒng),調(diào)用Service理解為請(qǐng)求客戶(hù)系統(tǒng)。
  • 凡是想調(diào)用某個(gè)Service之前,必須先去申請(qǐng)一個(gè)secretKey,然后每個(gè)請(qǐng)求都必須攜帶該secretKey,通過(guò)secretKey可以查出調(diào)用者,控制調(diào)用系統(tǒng)權(quán)限。
  • 補(bǔ)充:有人覺(jué)得通過(guò)一個(gè)secretKey來(lái)處理不夠安全,對(duì)于內(nèi)部請(qǐng)求安全級(jí)別高的,可以對(duì)應(yīng)secretKey設(shè)置 ip白名單,甚至設(shè)置secretKey的有效時(shí)間通過(guò)系統(tǒng)刷新來(lái)刷新secretKey,個(gè)人感覺(jué)大部分的企業(yè)不需要來(lái)刷新secretKey來(lái)提高安全級(jí)別,通過(guò) ip白名單的方式安全程度已經(jīng)夠高了。

總結(jié)

  • 本文只介紹了作者在改造系統(tǒng)權(quán)限體系時(shí)的想法思路,文中 Zuul 可以就理解為網(wǎng)關(guān),后面系列將介紹如何在 Zuul 中實(shí)現(xiàn),這里具體實(shí)現(xiàn)就沒(méi)有提及了。
  • 作者的token處理參考了Oauth2.0 協(xié)議的token機(jī)制,即具備刷新過(guò)期等機(jī)制,如果感覺(jué)本文有那么一些道理,想繼續(xù)看看我是怎么做的話,可以繼續(xù)關(guān)注,后面有計(jì)劃將整個(gè)實(shí)現(xiàn)機(jī)制開(kāi)源出來(lái)。
  • 文中的想法很多是我與公司團(tuán)隊(duì)的想法,歡迎大家與我交流分享,熱烈歡迎指正不對(duì)之處。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容