【问题标题】:Is It Possible to Model Complex Claims (hierarchical / nested / etc)?是否可以对复杂的声明进行建模(分层/嵌套/等)?
【发布时间】:2014-04-14 13:53:37
【问题描述】:

将 Windows Identity Foundation (WIF) 与安全令牌服务 (STS) 结合使用,是否可以创建可以满足以下问题的复杂声明:

对于声称拥有“支持”角色的用户,该用户:

  • 只能查看和使用resource1
  • 不能更新、创建或删除资源2
  • 不能创建或删除资源3
  • 只能使用和更新带有“资源”标签的资源。

这是一个必然人为的例子,但这可能吗?我想我想用基本声明授权经过身份验证的用户,然后在应用程序中添加相关的复杂声明(这些声明将存储在数据库中并在应用程序用户的控制下)。

谢谢, 理查德

【问题讨论】:

    标签: .net wif claims-based-identity adfs2.0 adfs


    【解决方案1】:

    你绝对可以这样建模——它们只是字符串——你可以对字符串做任何事情,你可以对声明做任何事情;)

    但这绝对是一种反模式。声明描述了用户的身份——可能包括粗粒度的授权信息。这里有一条细线。

    但对于您的用例,您宁愿在 ClaimsAuthorizationManager 中实施您的授权策略,并使用身份声明作为输入来“计算”您的细粒度授权决策。

    【讨论】:

    • 您将如何处理例如用户有权访问多个资源的情况,因此这些资源可能是声明。但是,对于每个资源,他都有不同的角色(例如,资源 X 的读者和资源 Y 的作家)。在这种情况下,您不能只将“读者”作为角色声明,因为它需要针对资源进行限定。即使使用 ClaimsAuthorizationManager 它仍然需要知道哪个角色应用于哪个资源。您将如何处理这种情况?
    • 也许在声明中处理此问题的一种方法是拥有一个名为“ReaderForResource”的新声明类型,然后值将是“X”等?这似乎可行,但这肯定会导致在具有大量角色/权限的系统中产生大量新的声明类型。指导将不胜感激!
    • 声明用于描述用户的身份 - 不是细粒度的 authZ 规则和权限。将其留给一些专用的 authZ 逻辑。或者你真的想建立对大量名称/值对列表的依赖?
    • 了解声明是针对身份的。我打算使用 AuthorizationManager 从代码中删除逻辑和依赖项,但结果似乎声明将是一个逻辑位置,可以从 AuthMgr 访问此信息。我们如何以有效的方式为用户访问这些信息?我是否遗漏了有关复杂权限场景的一些信息?不幸的是,CBAC 的每个示例总是微不足道的,并且从未详细说明如何处理更复杂的场景。
    猜你喜欢
    • 2014-11-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2013-02-28
    • 2012-08-24
    • 2018-11-23
    • 1970-01-01
    • 2016-07-06
    相关资源
    最近更新 更多