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