2012-06-13 63 views
1

我正在使用用於用戶信息的Active Directory,用於身份驗證和SSO的ADFS以及使用ASP.NET MVC構建的幾個自定義應用程序。使用ADFS和WIF存儲基於角色的權限

授權模型是聲明和基於角色的;也就是說,用戶的角色可以通過ADFS發佈的令牌(使用WIF)作爲對相關應用程序的聲明來訪問。

每個角色都有一個針對應用程序各種資源(即角色Admin對資源X擁有WRITE權限的角色)的已定義權限列表。我們有基本的授權模式,可以很好地處理一些硬編碼的權限。

我的問題是:什麼是最好的方式/地方來存儲各種角色的實際權限?這可以在ADFS內完成,否則將需要一個單獨的存儲(我猜測後者)?權限遵循與XACML(用戶/角色:資源:操作)相同的寬泛模式,並且XACML解決方案可能很容易併入,但最流行的XACML(XACML.NET)的.NET實現似乎使用XML作爲唯一存儲機制是不可行的(我們有很多資源來存儲權限 - 潛在的數千個)。

這是什麼人使用?最明顯的解決方案似乎是將三元組存儲在SQL Server中,但考慮到所有現成的身份驗證解決方案(特別是使用ADFS和WIF),實際實現授權和許可的信息很少(顯而易見)似乎很奇怪。我在網上找到的所有例子都沒有在權限級別解釋事物。

回答

1

最簡單的事情是將權限存儲在SQL Server中,並在ADFS中使用自定義的SQL Server attribute store來檢索值。

你可以用claims rules做一些邏輯,但是在ADFS中本身並不存在這種類型的存儲。

+0

這是我懷疑的一種,謝謝。 – MarkH

+0

出於興趣:如何將三重「角色管理員對資源X具有WRITE權限」轉換爲看起來像「.../claim/role = Admin」的聲明? – nzpcmad

2

ADFS通常是共享基礎架構組件。將應用程序特定的知識(如特定於應用程序的權限)移動的問題是隨着時間的推移,它可能會成爲管理瓶頸。問問自己:隨着時間的推移誰將管理這些權限?你需要提交一份表格供有人批准嗎?這可能是一個問題。它會工作,但這將是一件麻煩事。一般來說,ADFS應提供每個人都可以受益的跨應用程序屬性(例如,所有基於AD的屬性,公司範圍屬性,HR相關信息都是很好的示例)。

當然,您可以讓ADFS從分佈式管理的數據庫中提取數據。

在某些情況下,人們會部署特定於應用程序的STS(通常稱爲「RP-STS」),該令牌將令牌轉換爲應用程序(或應用程序組)所期望的內容。例如SharePoint就是這樣做的。

+0

我們正在使用的ADFS實例將僅在相關應用程序中共享,而相關權限適用於這些應用程序,並且應用程序會使用相同的權限集合...所以我認爲我從這個角度感到高興。 我認爲如上所述,儘管ADFS可能不適合存儲這些權限,因爲它們不是以用戶/聲明爲中心的。 關於特定於應用程序的實現的有趣點 - 由於各種原因,這並不適合我們的模型,但這是一個有趣的選項。 – MarkH