1

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

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

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

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

人们为此使用什么?最明显的解决方案似乎是将三元组存储在 SQL Server 中,但考虑到所有现成的身份验证解决方案(尤其是使用 ADFS 和 WIF),实际实现授权和权限的信息如此之少(明显)似乎很奇怪。我在网上找到的所有示例都没有解释权限级别的内容。

4

2 回答 2

2

ADFS 通常是共享基础架构组件。将应用程序特定知识(如应用程序特定权限)迁移到其中的问题在于,随着时间的推移,可能会成为管理瓶颈。问问自己:随着时间的推移,谁将管理这些权限?您是否必须提交表格以供某人批准?这很可能是个问题。它会起作用,但会很麻烦。

一般来说,ADFS 应该提供每个人都可以从中受益的跨应用程序属性(例如,所有基于 AD 的属性、公司范围的属性、人力资源相关信息都是很好的例子)。

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

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

于 2012-06-14T01:31:56.033 回答
1

最简单的方法是将权限存储在 SQL Server 中,然后使用 ADFS 中的自定义SQL Server 属性存储来检索值。

您可以使用声明规则执行一些逻辑,但在 ADFS 本​​身中确实没有存储此类任何内容的好地方。

于 2012-06-13T18:02:54.263 回答