<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring Cloud Gateway整合OAuth2思路分享

          共 1450字,需瀏覽 3分鐘

           ·

          2022-04-18 01:06

          微服務(wù)做用戶認(rèn)證和授權(quán)一直都是一個(gè)難點(diǎn),隨著OAuth2.0的密碼模式被作廢,更是難上加難了。今天胖哥群里的一個(gè)群友搭建用戶認(rèn)證授權(quán)體系的時(shí)候遇到了一些棘手的問(wèn)題,這讓胖哥覺(jué)得是時(shí)候分享一些思路出來(lái)了。

          兩種思路

          通常微服務(wù)的認(rèn)證和授權(quán)思路有兩種:

          • 所有的認(rèn)證授權(quán)都由一個(gè)獨(dú)立的用戶認(rèn)證授權(quán)服務(wù)器負(fù)責(zé),它只負(fù)責(zé)發(fā)放Token,然后網(wǎng)關(guān)只負(fù)責(zé)轉(zhuǎn)發(fā)請(qǐng)求到各個(gè)微服務(wù)模塊,由微服務(wù)各個(gè)模塊自行對(duì)Token進(jìn)行校驗(yàn)處理。
          • 另一種是網(wǎng)關(guān)不但承擔(dān)了流量轉(zhuǎn)發(fā)作用,還承擔(dān)認(rèn)證授權(quán)流程,當(dāng)前請(qǐng)求的認(rèn)證信息由網(wǎng)關(guān)中繼給下游服務(wù)器。

          第一種非常簡(jiǎn)單,而且我在多個(gè)微服務(wù)項(xiàng)目中都是這樣設(shè)計(jì)的。如果你從來(lái)沒(méi)有設(shè)計(jì)過(guò),我其實(shí)建議按這個(gè)思路去做,你只需要搞一個(gè)負(fù)責(zé)管理用戶、角色權(quán)限的服務(wù)器,其它的微服務(wù)模塊都作為資源服務(wù)器自行和這個(gè)用戶授權(quán)服務(wù)器進(jìn)行交互,加上三戶模型體系就足以應(yīng)對(duì)各種場(chǎng)景了。

          第二種結(jié)合了OAuth2體系,網(wǎng)關(guān)不僅僅承擔(dān)流量轉(zhuǎn)發(fā)功能,認(rèn)證授權(quán)也是在網(wǎng)關(guān)層處理的,令牌會(huì)中繼給下游服務(wù)。這種模式下需要搭建一個(gè)UAA(User Account And ?Authentication)服務(wù)。它非常靈活,它可以管理用戶,也可以讓受信任的客戶端自己管理用戶,它只負(fù)責(zé)對(duì)客戶端進(jìn)行認(rèn)證(區(qū)別于用戶認(rèn)證)和對(duì)客戶端進(jìn)行授權(quán)。目前使用OAuth2對(duì)微服務(wù)進(jìn)行安全體系建設(shè)的都使用這種方式。

          接下來(lái)分享一下我在第二種思路上的成果。

          Spring Cloud Gateway 結(jié)合OAuth2提供UAA服務(wù)

          用的技術(shù)有:

          • Spring Cloud Gateway
          • Spring Authorization Server
          • Spring Security 5.0 OAuth2 Client
          • OIDC 1.0

          大致的思路

          UAA服務(wù)器自然由?Spring Authorization Server承擔(dān)。它負(fù)責(zé)整個(gè)用戶的管理,當(dāng)然你還可以分離一個(gè)專(zhuān)門(mén)的用戶服務(wù)器,只不過(guò)UAA需要通過(guò)Spring Cloud OpenFeign和用戶服務(wù)通信;另外它還是一個(gè)OAuth2授權(quán)服務(wù)器,管理OAuth2客戶端,處理OAuth2授權(quán)。重點(diǎn)來(lái)了,網(wǎng)關(guān)Gateway需要作為OAuth2客戶端注冊(cè)到UAA服務(wù)器,并作為一個(gè)OAuth2客戶端。

          微服務(wù)應(yīng)用

          當(dāng)User Agent(瀏覽器、APP)通過(guò)網(wǎng)關(guān)請(qǐng)求資源時(shí):

          上面執(zhí)行的是一個(gè)標(biāo)準(zhǔn)的OAuth2授權(quán)碼流程,Spring Cloud Gateway會(huì)把用戶引導(dǎo)到UAA服務(wù)器的登錄接口去登錄。

          終端用戶登錄后進(jìn)行授權(quán)確認(rèn),注意看F12的鏈路

          用戶確認(rèn)

          用戶勾選授權(quán)并確認(rèn)后,成功訪問(wèn)到了資源,同樣看調(diào)用的鏈路。

          成功訪問(wèn)資源

          授權(quán)確認(rèn)提交后,再次重定向到OAuth2授權(quán)碼登錄流程,最終獲取了資源。

          我們看最終/res/foo的請(qǐng)求細(xì)節(jié),居然沒(méi)有攜帶Token也拿到了用戶的所有權(quán)限。

          這都是網(wǎng)關(guān)令牌中繼的功勞,前端應(yīng)用很好地屏蔽了JWT令牌。

          ?

          如果有多個(gè)Gateway節(jié)點(diǎn)和UAA節(jié)點(diǎn),可能要結(jié)合Spring Session去實(shí)現(xiàn)分布式Session以及對(duì)一些客戶端信息、用戶信息進(jìn)行分布式管理。

          總結(jié)

          通過(guò)上面流程的介紹,動(dòng)手能力很強(qiáng)的小伙伴應(yīng)該能實(shí)現(xiàn)相關(guān)的功能了。更多關(guān)于權(quán)限相關(guān)的知識(shí),推薦關(guān)注碼農(nóng)小胖哥:



          推薦閱讀

          瀏覽 141
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  超碰97在线免费观看 | 日本三级视频在线播放 | 91久久久久久久久久久 | 竹菊精品一区二区三区 | 日美一级AV |