根据谁创建资源授权资源
我的一位同事向我提出了一個(gè)關(guān)于StackOverflow的有趣問(wèn)題,并由于我在Spring方面的經(jīng)驗(yàn),建議我回答一個(gè)很好的問(wèn)題。
問(wèn)題是:“ 如何基于使用注釋在REST中創(chuàng)建資源的用戶來(lái)授權(quán)特定資源 。”
要點(diǎn)是:
我想做的是創(chuàng)建一個(gè)名為@Authorize的注釋,并將其用于需要用戶授權(quán)才能執(zhí)行某些操作的用戶(此時(shí)用戶已通過(guò)身份驗(yàn)證)。 例如。 我有一個(gè)帶有g(shù)etOrder()方法的訂單服務(wù)。 我只希望創(chuàng)建此訂單的用戶訪問(wèn)它。
我對(duì)StackOverflow的回答
為了對(duì)Java中的方法實(shí)現(xiàn)授權(quán)控制,我強(qiáng)烈建議使用帶有 Spring Security API 的可擴(kuò)展訪問(wèn)控制標(biāo)記語(yǔ)言(XACML)實(shí)現(xiàn)的Spring Security。
Spring安全
Spring Security提供了兩種主要方法來(lái)保護(hù)對(duì)方法的訪問(wèn):
- 預(yù)授權(quán) :這允許在允許執(zhí)行該方法之前檢查某些條件/約束。 無(wú)法驗(yàn)證這些條件將導(dǎo)致無(wú)法調(diào)用該方法。
- 后授權(quán) :允許在方法返回后檢查某些條件/約束。 與預(yù)授權(quán)檢查相比,此方法使用較少,但可用于在復(fù)雜的互連業(yè)務(wù)層方法周圍,特別是在與該方法返回的對(duì)象相關(guān)的約束周圍,提供額外的安全性。
例如,說(shuō)訪問(wèn)控制規(guī)則之一是用戶在能夠調(diào)用方法getEvents()之前具有ROLE_ADMIN權(quán)限。 在Spring Security框架中執(zhí)行此操作的方法是使用PreAuthorize批注,如下所示:
public interface Sample { ... @PostAuthorize("hasRole('ROLE_ADMIN')") Event getEvent(); }本質(zhì)上,Spring Security使用運(yùn)行時(shí)面向方面編程(AOP)切入點(diǎn)在對(duì)該方法提出建議之前執(zhí)行,并在ossaccess.AccessDeniedException指定的安全性約束的情況下拋出ossaccess.AccessDeniedException 。
在本文檔的第27.3節(jié)中可以找到有關(guān)Spring Security的方法級(jí)別安全性的更多信息 。
可擴(kuò)展訪問(wèn)控制標(biāo)記語(yǔ)言(XACML)– ABAC的策略語(yǔ)言
Spring Security通過(guò)基于表達(dá)式的訪問(wèn)控制在實(shí)現(xiàn)訪問(wèn)控制方面做得很出色,但是基于屬性的訪問(wèn)控制(ABAC)允許對(duì)訪問(wèn)進(jìn)行更細(xì)粒度的控制,這是美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究院的推薦。
為了解決基于角色的訪問(wèn)控制(RBAC)的局限性,NIST提出了一種稱為ABAC(基于屬性的訪問(wèn)控制)的新模型。 在ABAC中,您現(xiàn)在可以使用更多的元數(shù)據(jù)/參數(shù)。 例如,您可以考慮:
- 用戶的身份,角色,職務(wù),位置,部門,出生日期…
- 資源的類型,位置,所有者,價(jià)值,部門...
- 上下文信息,例如用戶在資源上嘗試執(zhí)行的操作的時(shí)間
所有這些都稱為屬性。 屬性是ABAC的基礎(chǔ),因此是名稱。 您可以將這些屬性組合到策略中。 政策有點(diǎn)像ABAC的秘密武器。 策略可以授予和拒絕訪問(wèn)。 例如:
- 如果員工和記錄位于同一區(qū)域,則員工可以查看記錄
- 在下午5點(diǎn)至早上8點(diǎn)之間拒絕訪問(wèn)閱讀記錄。
策略可用于表達(dá)高級(jí)方案,例如
- 職責(zé)分工
- 基于時(shí)間的約束(請(qǐng)參見(jiàn)上文)
- 基于關(guān)系的訪問(wèn)控制(請(qǐng)參見(jiàn)上文)
- 委派規(guī)則委派Bob訪問(wèn)Alice的文檔。
有兩種主要語(yǔ)法可用于編寫(xiě)策略:
- 基于XACML的縮寫(xiě)授權(quán)語(yǔ)言(ALFA)
- 可擴(kuò)展訪問(wèn)控制標(biāo)記語(yǔ)言(XACML)
ABAC還帶有一個(gè)體系結(jié)構(gòu),用于定義如何評(píng)估和執(zhí)行策略。
該體系結(jié)構(gòu)包含以下組件:
- 策略執(zhí)行點(diǎn)(PEP):這是保護(hù)您要保護(hù)的API /應(yīng)用程序的組件。 PEP攔截流,對(duì)其進(jìn)行分析,然后向PDP發(fā)送授權(quán)請(qǐng)求(請(qǐng)參見(jiàn)下文)。 然后,它會(huì)收到執(zhí)行的決定(許可/拒絕)。
- 策略決策點(diǎn)(PDP)會(huì)收到授權(quán)請(qǐng)求(例如Alice可以查看記錄#123?),并根據(jù)已配置的策略集對(duì)其進(jìn)行評(píng)估。 最終,它會(huì)做出決定,并將其發(fā)送回PEP。 在評(píng)估過(guò)程中,PDP可能需要其他元數(shù)據(jù),例如用戶的職務(wù)。 為此,它可以求助于策略信息點(diǎn)(PIP)
- 策略信息點(diǎn)(PIP)是PDP與基礎(chǔ)數(shù)據(jù)源(例如LDAP,數(shù)據(jù)庫(kù),REST服務(wù))之間的接口,其中包含有關(guān)用戶,資源或其他方面的元數(shù)據(jù)。 您可以使用PIP檢索PDP在運(yùn)行時(shí)可能需要的信息,例如風(fēng)險(xiǎn)評(píng)分,記錄的位置或其他。
XACML的實(shí)現(xiàn)
全面披露–我在XACML技術(shù)委員會(huì)工作,并為Axiomatics工作, Axiomatics是實(shí)施XACML的動(dòng)態(tài)授權(quán)的提供者。
Axiomatics為他們的Axiomatics Policy Server提供了一個(gè)Spring Security SDK,它提供了四個(gè)表達(dá)式,可用于查詢PDP,作為保護(hù)方法調(diào)用的一部分
這些方法的確切簽名如下:
Collection<String> attributeTypes, Collection<String> attributeIds,
ArrayList<Object> attributeValues)
Collection<String> attributeTypes, Collection<String> attributeIds,
ArrayList<Object> attributeValues)
attributeTypes, Collection<String> attributeIds, ArrayList<Object>
attributeValues)
attributeCats, Collection<String> attributeTypes, Collection<String>
attributeIds, ArrayList<Object> attributeValues)
有關(guān)XACML實(shí)現(xiàn)的完整列表,可以在Wikipedia上查看此列表 。
翻譯自: https://www.javacodegeeks.com/2018/07/authorizing-resources-created.html
總結(jié)
以上是生活随笔為你收集整理的根据谁创建资源授权资源的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: struts2面试问题_Struts2面
- 下一篇: FXRibbon 1.2版发布