簡體   English   中英

在XACML中可以激活多個角色時如何處理作用域角色

[英]How to deal with scoped roles when multiple roles can be activated in XACML

首先,用戶可以同時具有多個角色,並且角色具有作用域。 例如,一個用戶具有三個角色:/ scopeA / editor,/ scopeA / programmer,/ scopeB / editor

和/ scopeA / editor可以訪問資源/ scopeA / post / scopeA / programmer可以訪問資源/ scopeA / bug

/scopeB/editor has access to resource /scopeB/post

所以問題來了:

我如何聲明一個策略:如果角色包中有一個名為“ / XX / editor”的角色,那么當“ XX == YY”時,相應的用戶可以訪問“ / YY / post”

我在這里找到了類似的問題,並提出了解決問題的方法,但是當涉及多個角色時(角色屬性值是一個包),我的回答是不對的。 因為角色屬性值是一個包,所以我不能只獲取角色屬性值的前兩個斜杠之間的部分,然后將其與資源屬性的斜杠進行比較,

然后我試圖找到一個高階袋函數來做到這一點,“ urn:oasis:names:tc:xacml:3.0:function:any-of”函數可以做到這一點,但是第一個“ function arguments”呢任何功能?

這是我的工作:any-of函數的第一個參數是“ string-equal”,第二個參數是用於獲取resouce-id的前兩個斜杠之間的部分的函數,第三個參數是袋子的主題的屬性值。

所以我要做的就是定義一個函數來獲取前兩個斜杠之間的部分,對嗎?

有更好的方法來做我想要的嗎? 如果不清楚,請讓我知道,謝謝~~

這是一個很好的問題。 我們稱此問題為關系挑戰屬性 本質上,用戶在您所稱的給定上下文或范圍內具有角色。

如果我僅根據用戶身份從數據庫讀取用戶角色,那么我將獨立於范圍(例如編輯器,發布者,審閱者)獲取角色列表。

這將導致冒着我可能在我應擔任的角色范圍之外編輯帖子的風險。

有幾種方法可以解決此問題。 一種方法是在策略信息點中定義更嚴格的映射。

使用策略信息點

假設XACML請求說:“ Alice可以編輯帖子123嗎? ”。 您的政策應注明(采用ALFA語法):

policy editPost{
    target clause resourceType=="post" and actionId=="edit"
    apply firstApplicable
    rule allowEditors{
        target clause userRole=="editor"
        permit
    }
}

范圍的概念不會直接顯示在策略中。 到屬性源的基礎映射如下:

  • 使用SELECT角色FROM usersRoleAssignment將userRole映射到表usersRoleAssignment的字段角色WHERE uid =? AND范圍=?
    • uid將映射到XACML請求中出現的用戶身份。
    • 作用域將是資源屬性,也將在PIP中進行如下映射
  • 使用SELECT范圍FROM帖子將范圍映射到表帖子的字段范圍WHERE pid =?
    • pid將映射到相關帖子的標識符。 這也出現在XACML請求中。

這意味着您的屬性userRole應該確實稱為scopedUserRole 我給出的建模只是一個例子。 您還可以通過其他幾種方式來對效果進行建模。 無論哪種方式,所有繁重的工作都發生在PIP內部。 主要缺點是您無法看到授權邏輯的語義。

使用屬性值和函數

獲得相似結果的另一種方法是將范圍和角色之間的關系存儲在值本身中。 這就是您在問題中所提到的。

您可以使用諸如string-starts-with或string-ends-with或string-contains之類的字符串函數來實現您感興趣的功能。還可以使用string-regexp-match函數。

有關功能的詳細信息,請參見XACML 3.0規范

如果功能在XACML中不足,則可以:

  • 實施自己的
  • 實施可處理您的屬性值並產生新值的PIP。 更多關於PIP的信息

創建一個稱為元組的新數據類型

XACML的問題在於它使關系扁平化。 使用具有多個部分的新數據類型(即元組)將解決此問題。 這將需要自定義編碼,但需要做很多工作。

在XACML請求中使用XML內容

如果所有信息都來自XACML請求,則可以將其表示為XML有效負載,作為XACML請求內<Content/>元素的一部分。 然后,您可以使用屬性選擇器和XPath來檢索您感興趣的內容。

HTH。 請同時查看我的博客Axiomatics博客以獲取更多提示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM