如何對(duì)資源(前端頁面+后端接口)進(jìn)行權(quán)限控制
在微服務(wù)架構(gòu)中,請(qǐng)求的攔截在gateway中完成,而權(quán)限的查詢是在uaa中完成,在gateway和uaa集成部署的情況下實(shí)現(xiàn)較為簡(jiǎn)單,如果兩者分離實(shí)現(xiàn)起來就會(huì)比較麻煩,一種方案是在gateway的資源filter中內(nèi)部調(diào)用uaa的權(quán)限查詢模塊,該方案是可行的,但是存在兩個(gè)弊端:
響應(yīng)延時(shí):每個(gè)資源的請(qǐng)求都會(huì)附帶一次uaa內(nèi)部調(diào)用,加重uaa服務(wù)的負(fù)擔(dān)并延長(zhǎng)了響應(yīng)時(shí)間。
過度依賴:gateway作為api網(wǎng)關(guān),過度依賴了api提供方(uaa)的內(nèi)部方法,導(dǎo)致系統(tǒng)耦合度提升。
因此應(yīng)尋找一種低響應(yīng)延時(shí)、松散依賴的解決方案:“token擴(kuò)展”。
"token擴(kuò)展"的思路為在token形成時(shí)追加用戶資源權(quán)限(ar)屬性,在資源的攔截中獲取ar并與當(dāng)前請(qǐng)求的資源比對(duì),相當(dāng)于將用戶的資源權(quán)限緩存到了token中,uaa通過客戶端瀏覽器將權(quán)限信息傳遞至gateway,gateway直接解析request獲取AR,避免了內(nèi)部調(diào)用導(dǎo)致的過度依賴問題和相應(yīng)延時(shí)問題。此方案應(yīng)注意在用戶登錄期間的AR變動(dòng)需在下次登錄后方能生效?。。?/p>
具體步驟如下:
uaa中擴(kuò)展token屬性(具體步驟參考最后部分),如在token中擴(kuò)展ar屬性,內(nèi)部包含當(dāng)前用戶有權(quán)限訪問的前端頁面列表
{...,"ar":["a.html","b.html"]}
gateway中攔截鑒權(quán)
//解析ar Cookie accessTokenCookie = OAuth2CookieHelper.getAccessTokenCookie(request); Maptoken 屬性擴(kuò)展additionalInformation = tokenStore.readAccessToken(accessTokenCookie.getValue()) .getAdditionalInformation(); List ar = (List ) additionalInformation.get("ar"); //鑒權(quán) for (String resourceUrl : ar) { if (resourceUrl == null) { continue; } if (resourceUrl.startsWith(requestUri)) { return false; } }
org.springframework.security.oauth2.provider.token.TokenEnhancer#enhance提供了擴(kuò)展token屬性的可能性,以下demo在token中增加ar屬性,并使用@Component注入容器以生效。
@Component public class ArTokenEnhancer implements TokenEnhancer { @Override public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) { addClaims((DefaultOAuth2AccessToken) accessToken,authentication); return accessToken; } private void addClaims(DefaultOAuth2AccessToken token, OAuth2Authentication authentication) { MapadditionalInformation = token.getAdditionalInformation(); additionalInformation.put("ar", "something you like"); token.setAdditionalInformation(additionalInformation); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72705.html
摘要:權(quán)限設(shè)計(jì)的雜談這篇文章的定位,不是宣傳某個(gè)框架,僅僅之是梳理一下有關(guān)權(quán)限方面的一些想法和最近項(xiàng)目中的一些探索過程。而這兩者的取舍則是有設(shè)計(jì)人員決定的。數(shù)據(jù)抽象原則最小特權(quán)劃分從某個(gè)程度上來說決定了控制的對(duì)象,而數(shù)據(jù)抽象原則是是決定了操作。 權(quán)限設(shè)計(jì)的雜談 這篇文章的定位,不是宣傳某個(gè)框架,僅僅之是梳理一下有關(guān)權(quán)限方面的一些想法和最近項(xiàng)目中的一些探索過程。我們主要想解決一下問題。 什么...
摘要:口服務(wù)的負(fù)載均衡。服務(wù)的注冊(cè)與發(fā)現(xiàn)接口管理服務(wù)注冊(cè)是指向服務(wù)注冊(cè)中心注冊(cè)一個(gè)服務(wù)實(shí)例,服務(wù)提供者將自己的服務(wù)信息如服務(wù)名地址等告知服務(wù)注冊(cè)中心。服務(wù)注冊(cè)中心會(huì)提供服務(wù)的健康檢查方案,檢查被注冊(cè)的服務(wù)是否可用。服務(wù)降級(jí)的功能。 微服務(wù)具有以下的特點(diǎn)。 口 按照業(yè)務(wù)來劃分服務(wù),單個(gè)服務(wù)代碼量小,業(yè)務(wù)單一,易于維護(hù)。 口 每個(gè)微服務(wù)都有自己獨(dú)立的基礎(chǔ)組件,例如數(shù)據(jù)庫、 緩存等,且運(yùn)行在獨(dú)立...
摘要:參與者流量來自于內(nèi)部系統(tǒng)和外部流量,其中大部分來自于外部流量。水平擴(kuò)容服務(wù)的水平擴(kuò)容重要性不言而喻。 背景 目前微店中臺(tái)團(tuán)隊(duì)為了滿足公司大部分產(chǎn)品、運(yùn)營以及部分后端開發(fā)人員的嘗鮮和試錯(cuò)的需求,提供了一套基于圖形化搭建的服務(wù)端接口交付方案,利用該方案及提供的系統(tǒng)可生成一副包含運(yùn)行時(shí)環(huán)境定義可立即運(yùn)行的工程代碼,最后,通過 某種serverless平臺(tái) 實(shí)現(xiàn)生成后代碼的部署、CI、運(yùn)行、反...
摘要:協(xié)議轉(zhuǎn)換微服務(wù)架構(gòu)允許使用不同的協(xié)議以便于獲得使用不同技術(shù)的優(yōu)勢(shì)。過于龐大的在實(shí)現(xiàn)時(shí),應(yīng)當(dāng)避免將非通用邏輯如領(lǐng)域特定數(shù)據(jù)轉(zhuǎn)換放入其中。服務(wù)應(yīng)始終對(duì)其數(shù)據(jù)域擁有完全的所有權(quán)。構(gòu)建一個(gè)過于龐大的,從服務(wù)團(tuán)隊(duì)爭(zhēng)奪控制權(quán),這違反了微服務(wù)的理念。 我們團(tuán)隊(duì)的后端服務(wù)中,一開始只有一個(gè)大服務(wù),所有的東西都往里面寫,可以想象下,當(dāng)這個(gè)服務(wù)變得不斷的龐大,將會(huì)變得多么難以維護(hù)。后來逐漸把一些數(shù)據(jù)服務(wù)抽...
摘要:本文主要是從前端的角度,使用搭建一個(gè)簡(jiǎn)易的測(cè)試項(xiàng)目,在自己搭建的代理服務(wù)的下實(shí)現(xiàn)簡(jiǎn)單的微信分享。在微信測(cè)試工具中調(diào)試接口,點(diǎn)擊發(fā)送即可會(huì)出現(xiàn)比較漂亮的分享鏈接。 一、背景簡(jiǎn)介: 目前流行的前后端分離項(xiàng)目,一般都處于不同的域名下,前后端開發(fā)過程中,是分別部署在不同服 務(wù)器上,在做接口聯(lián)調(diào)時(shí),會(huì)出現(xiàn)跨域的情況,部署上線時(shí),基本不存在這種需要,因此搭建一個(gè) 前端代理服務(wù),方便開發(fā)。 作為一個(gè)...
閱讀 2950·2021-11-15 18:02
閱讀 3843·2021-10-14 09:43
閱讀 3796·2021-09-08 10:41
閱讀 2550·2019-08-30 15:53
閱讀 1837·2019-08-30 14:14
閱讀 1989·2019-08-29 16:12
閱讀 3179·2019-08-29 14:03
閱讀 1308·2019-08-29 13:46