【问题标题】:Authorization vs. Validation with ABAC/XACML使用 ABAC/XACML 进行授权与验证
【发布时间】:2017-11-11 19:40:02
【问题描述】:

我不确定 ABAC/XACML 的授权边界在哪里,我应该在哪里使用验证。


示例 1

我有一个类 User 和一个类 Message。当用户 U1 创建新消息 M1 时,M1 的创建者属性必须是 U1

示例 2

我有一个类用户。当有人创建新用户 U2 时,密码大小应大于 8。

示例 3

我有一个类用户。当有人创建新用户 U3 时,用户名应该是唯一的。


但是我应该在哪里检查。我应该以编程方式验证它还是通过向 PEP 请求授权它。尤其是示例 2 并不是真正的“您不允许这样做”问题(授权),而是“您做错了什么”问题(验证)。

【问题讨论】:

    标签: validation authorization access-control xacml abac


    【解决方案1】:

    你所说的例子都不是 ABAC/XACML 的好例子。

    示例 #1

    当用户 U1 创建一条新消息 M1 时,M1 的创建者属性必须是 U1。

    这完全是业务逻辑。创建消息的行为会将 M1 的所有者属性设置为 U1。它与 XACML 无关。 XACML 是关于授权,即是否允许用户执行某项操作。在这种情况下,您可以编写一条关于用户 U1 是否可以创建消息的 XACML 规则;用户 U1 是否可以查看或编辑属于 U2 的消息。

    示例 #2

    我有一个类用户。当有人创建新用户 U2 时,密码大小应大于 8。

    这是来自您的应用程序的 PoV 验证。您的应用与身份验证或密码无关。它依赖于密码管理器。密码管理器本身(例如 LDAP、AD...)有关于密码强度/生命周期/格式的策略。这些策略可能在 XACML 中,但迄今为止,我只看到了专有格式。

    示例 3

    我有一个类用户。当有人创建新用户 U3 时,用户名应该是唯一的。

    再次,这是关于验证。这与您的应用无关,而是与您使用的用户帐户管理解决方案有关,例如LDAP。在那里,您可以决定制定禁止相同用户名或禁止某些字符的规则,例如标志。用户管理解决方案肯定可以使用 XACML,但从您应用的 PoV 来看,这是正交的。

    【讨论】:

    • 谢谢!你回答了这个问题,但我认为我的错是在示例中使用了Users。例如。 示例 1 是一个 REST 接口,Creator 是它的一个属性。只有管​​理员可以选择另一个creator 然后他自己。 示例 2 可以是 BankAccount,它必须在创建时具有正平衡。 示例 3 可以是一个类 Building,它必须有一个唯一的 Adress。我认为这三个例子都可以用 ABAC/XACML 解决,但我不确定它们是否应该。如何区分授权和验证? ABAC/XACML 不也是业务逻辑吗?
    • 长话短说,当我们在字段级别工作时是授权还是验证(subject 可以像 CREATE CHANGE DELETE 一样执行action resource 的特定字段取决于此字段的值和其他约束)?
    • 那将是授权。底线:您是否关心报告用户试图对给定资源执行给定操作的事实?如果是,就是授权
    猜你喜欢
    • 2014-12-03
    • 2016-02-20
    • 2021-06-05
    • 2012-06-29
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 2019-12-31
    相关资源
    最近更新 更多