<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-auth-abac</artifactId>
<version>5.0.12</version>
</dependency>
认证与权限安全
你当前正在浏览历史版本 Vert.x 5.0.12 的文档。 访问本页面的 最新版本。
ABAC 基于属性的访问控制授权提供者 (vertx-auth-abac)
该组件提供了一个基于属性访问控制(Attribute-Based Access Control, ABAC)的 AuthorizationProvider 实现。
该提供者基于策略(Policy)对象运作,策略中定义了对当前用户的属性匹配规则;当规则匹配成功时,策略所列出的权限集合将自动授予该用户。
一旦提供者为用户计算并返回了授权集合,后续的权限断言机制与其它标准 AuthorizationProvider 完全一致。
要在项目中使用该组件,请在构建描述文件中添加以下依赖:
-
Maven(在
pom.xml中):
-
Gradle(在
build.gradle文件中):
compile 'io.vertx:vertx-auth-abac:5.0.12'
创建提供者实例首先需要定义 Policy 策略对象。
例如:
{
"name" : "仅完成多因素认证(MFA)的用户拥有 DELETE 权限",
"attributes" : {
"/principal/amr": {
"eq": "mfa"
}
},
"authorizations" : [ {
"type" : "wildcard",
"permission" : "web:DELETE"
} ]
}
定义策略后,按如下方式创建 PolicyBasedAuthorizationProvider 实例并注册策略:
Policy policy = new Policy(
new JsonObject()
.put("name", "仅完成多因素认证(MFA)的用户拥有 DELETE 权限")
.put("attributes", new JsonObject()
.put("/principal/amr", "mfa"))
.put("authorizations", new JsonArray()
.add(new JsonObject()
.put("type", "wildcard")
.put("permission", "web:DELETE"))));
PolicyBasedAuthorizationProvider.create()
.addPolicy(policy);
你可以从文件加载策略,也可以通过代码动态创建,并支持向提供者注册多个策略。当注册了多个策略时,所有策略均会针对该用户进行匹配评估,所有匹配成功的权限都会聚合返回。
策略核心基于属性(Attributes)进行判定。Vert.x 默认提供了用于判断相等(Equality)、否定(Negation)或集合包含(Value in Collection)的简单属性实现。这并不是限制,你完全可以通过组合模式实现自定义属性判定,并将其注册到策略中:
Attribute.create(user -> {
// 获取当前请求来源主机
return "localhost".equals(user.get("origin"));
});