使用 ABAC/XACML 的授权与验证

Authorization vs. Validation with ABAC/XACML

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


示例 1

我有一个 class User 和一个 class Message。当用户 U1 创建一条新消息 M1M1 的创建者属性必须是 U1.

示例 2

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

示例 3

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


但是我应该在哪里检查呢?我应该以编程方式验证它还是向 PEP 请求授权它。特别是示例 2 并不是真正的“你不被允许那样做”-问题(授权),更多的是“你做错了什么”-问题(验证)。

None 你陈述的例子是 ABAC/XACML.

的好例子

示例 #1

When user U1 creates a new message M1 then the creator-attribute of M1 must be U1.

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

示例 #2

I have a class User. When someone creates a new user U2 then the password size should be larger then 8.

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

示例 3

I have a class User. When someone creates a new user U3 then the username should be unique.

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