【问题标题】:Storage of Role-based Permissions using ADFS and WIF使用 ADFS 和 WIF 存储基于角色的权限
【发布时间】:2012-06-13 14:37:07
【问题描述】:

我正在开发一个项目,该项目使用 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),实际实现授权和权限的信息如此之少(明显)似乎很奇怪。我在网上找到的所有示例都无法解释权限级别的内容。

【问题讨论】:

    标签: asp.net permissions wif adfs xacml


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我们正在使用的 ADFS 实例将仅在相关权限适用的相关应用程序之间共享,并且这些应用程序将使用相同的权限集......所以我想我'从那个角度我很高兴。我认为如上所述,ADFS 可能不是存储这些权限的正确位置,因为它们不是以用户/声明为中心的。关于特定于应用程序的实现的有趣点 - 由于各种原因,它不太适合我们的模型,但这是一个有趣的选择。
    【解决方案2】:

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

    您可以使用 claims rules 进行一些逻辑处理,但在 ADFS 本​​身中确实没有存储此类内容的好地方。

    【讨论】:

    • 出于兴趣:如何将三重“角色管理员对资源 X 具有 WRITE 权限”转换为看起来像“.../claim/role = Admin”的声明?
    猜你喜欢
    • 2018-05-29
    • 2023-03-15
    • 1970-01-01
    • 2014-06-24
    • 2014-02-03
    • 2020-12-17
    • 2021-09-16
    • 1970-01-01
    • 2019-12-08
    相关资源
    最近更新 更多