Validation 授权与ABAC/XACML验证
我不确定ABAC/XACML的授权边界在哪里,我应该在哪里使用验证Validation 授权与ABAC/XACML验证,validation,authorization,access-control,xacml,abac,Validation,Authorization,Access Control,Xacml,Abac,我不确定ABAC/XACML的授权边界在哪里,我应该在哪里使用验证 例1 我有一个class用户和一个class消息。当用户U1创建新消息M1时,M1的创建者属性必须是U1 例2 我有一个class用户。当有人创建一个新用户U2时,密码大小应该大于8 例3 我有一个class用户。当有人创建一个新用户U3时,用户名应该是唯一的 但是我应该在哪里检查呢。我应该以编程方式验证它还是通过向PEP发出请求来授权它。特别是示例2并不是一个“您不允许这样做”的问题(授权),更多的是一个“您做错了什么”的
例1 我有一个class用户和一个class消息。当用户U1创建新消息M1时,M1的创建者属性必须是U1 例2 我有一个class用户。当有人创建一个新用户U2时,密码大小应该大于8 例3 我有一个class用户。当有人创建一个新用户U3时,用户名应该是唯一的
但是我应该在哪里检查呢。我应该以编程方式验证它还是通过向PEP发出请求来授权它。特别是示例2并不是一个“您不允许这样做”的问题(授权),更多的是一个“您做错了什么”的问题(验证)。您陈述的示例中没有一个是ABAC/XACML的好例子 示例#1 当用户U1创建新消息M1时,M1的创建者属性必须是U1 这完全是商业逻辑。创建消息的行为将M1的所有者属性设置为U1。它与XACML无关。XACML涉及授权,即是否允许用户执行操作。在本例中,您可以编写一条XACML规则,说明用户U1是否可以创建消息;用户U1是否可以查看或编辑属于U2的消息 示例2 我有一个类用户。当有人创建新用户U2时,密码大小应大于8 这是从应用程序的PoV进行的验证。你的应用程序与身份验证或密码无关。它依赖于密码管理器。密码管理器本身(例如LDAP、AD…)具有关于密码强度/生存期/格式的策略。这些策略可能在XACML中,但到目前为止,我只看到了专有格式 例3 我有一个类用户。当有人创建新用户U3时,用户名应该是唯一的
同样,这是关于验证的。这与您的应用程序无关,而是与您使用的用户帐户管理解决方案有关,例如LDAP。在这里,您可以决定制定规则,禁止使用相同的用户名或某些字符,例如@符号。用户管理解决方案当然可以使用XACML,但从应用程序的PoV来看,这是正交的。谢谢!您回答了这个问题,但我认为我的错误是在示例中使用了
Users
。例如,示例1是一个REST接口,Creator
是它的一个属性。只有管理员可以选择其他创建者
然后选择自己。示例2可以是银行账户
,创建时必须有正余额。示例3可以是类建筑
,它必须具有唯一的地址
。我认为所有三个例子都可以用ABAC/XACML解决,但我不确定它们是否应该解决。如何区分授权和验证?ABAC/XACML业务逻辑不是也一样吗?长话短说,当我们在字段级别工作时,它是授权还是验证(一个主题
可以做一个操作
比如创建一个资源
的特定字段的更改删除,这取决于该字段的值和其他约束)?这就是授权。一句话:您是否关心报告用户试图对给定资源执行给定操作的事实?如果是,那就是授权