我想要实现的目标
使用以下策略保护 Keycloak 中的资源:
if (resource.status == 'draft') $evaluation.grant();
else $evaluation.deny();
按照他们官方的说法文件 https://keycloak.gitbooks.io/authorization-services-guide/content/topics/overview/overview.html and 邮件列表回复 http://lists.jboss.org/pipermail/keycloak-user/2016-July/007070.html,似乎基于属性的访问控制是可能的,但是,我找不到让它工作的方法。
我尝试过的
- Using 授权服务 https://keycloak.gitbooks.io/authorization-services-guide/content/topics/service/overview.html:我无法弄清楚在哪里以及如何从资源实例注入属性。
- Using 授权上下文 https://keycloak.gitbooks.io/authorization-services-guide/content/topics/enforcer/authorization-context.html:我希望获得与资源和范围相关的策略,以便我可以自己评估它们。
到目前为止,我两种方法都没有取得任何进展。老实说,我对授权服务中使用的术语感到不知所措。
Question在 keycloak 中定义策略时如何使用资源实例的属性?
我在 Keycloak 4.3 中通过创建 JavaScript 策略解决了这个问题,因为属性策略(尚不存在)。这是我工作的代码示例(请注意,属性值是一个列表,因此您必须与列表中的第一项进行比较):
var permission = $evaluation.getPermission();
var resource = permission.getResource();
var attributes = resource.getAttributes();
if (attributes.status !== null && attributes.status[0] == "draft") {
$evaluation.grant();
} else {
$evaluation.deny();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)