首页 文章

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

提问于
浏览
1

我正在开发一个项目,该项目使用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 回答

  • 2

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

    您可以使用claims rules做一些逻辑,但实际上没有一个好地方可以在ADFS本身中存储此类任何内容 .

  • 1

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

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

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

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

相关问题