使用ADFS和WIF存储基于角色的权限

时间:2012-06-13 14:37:07

标签: asp.net permissions wif adfs xacml

我正在开发一个项目,该项目使用Active Directory提供用户信息,ADFS用于身份验证和SSO,以及一些使用ASP.NET MVC构建的自定义应用程序。

授权模型是声明和基于角色的;也就是说,用户的角色可以通过ADFS发布的令牌(使用WIF)作为相关应用程序的索赔进行访问。

每个角色都有针对应用程序各种资源的已定义权限列表(即,角色Admin对资源X具有WRITE权限)。我们的基本授权模型与一些硬编码权限配合良好。

我的问题是:存储各种角色的实际权限的最佳方式/地点是什么?这可以在ADFS内完成,还是需要一个单独的商店(我猜的是后者)?权限遵循与XACML(用户/角色:资源:操作)相同的广泛模式,并且XACML解决方案可能很容易合并,但最流行的XACML(XACML.NET).NET实现似乎只使用XML作为唯一存储机制不可行(我们有很多资源来存储权限 - 可能有数千个)。

人们使用什么?最明显的解决方案似乎只是将三元组存储在SQL Server中,但考虑到所有现成的身份验证解决方案(特别是使用ADFS和WIF),实际实现授权和权限的信息很少(显而易见),这似乎很奇怪。我在网上找到的所有例子都没有在权限级别解释事情。

2 个答案:

答案 0 :(得分:2)

ADFS通常是共享基础架构组件。将应用程序特定知识移动到它(例如应用程序特定权限)的问题在于,随着时间的推移可能成为管理瓶颈。问问自己:谁会随着时间的推移管理这些权限?你需要提交一份表格供有人批准吗?这可能是一个问题。它会起作用,但这将是一件麻烦事。

通常,ADFS应提供每个人都可以从中受益的跨应用程序属性(例如,所有基于AD的属性,公司范围的属性,HR相关信息,都是很好的例子)。

当然,您可以从以分布式方式管理的数据库中获取ADFS数据。

在某些情况下,人们部署特定于应用程序的STS(通常称为“RP-STS”),将令牌转换为应用程序(或应用程序组)所期望的内容。例如,SharePoint就是这样做的。

答案 1 :(得分:1)

最简单的方法是在SQL Server中存储权限,只需在ADFS中使用自定义SQL Server attribute store来检索值。

你可以用claims rules做一些逻辑,但实际上没有一个好的地方可以在ADFS本身存储任何类型的东西。