认证与授权

ABAC 认证提供者

我们提供了一个 AuthorizationProvider 的实现,该实现使用简单的基于属性的访问控制(Attribute Based Access Control)。此提供者由一个策略(Policy)对象支持,该对象包含属性与给定用户的匹配规则,匹配成功后,列出的授权将授予该用户。

一旦提供者返回了用户的授权,其验证机制与任何其他 AuthorizationProvider 相同。

要使用此项目,请将以下依赖项添加到您的构建描述符的依赖项部分

  • Maven(在您的 pom.xml 中)

<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-auth-abac</artifactId>
<version>5.0.1</version>
</dependency>
  • Gradle(在您的 build.gradle 文件中)

compile 'io.vertx:vertx-auth-abac:5.0.1'

要创建实例,您首先需要一个策略对象。

例如

{
  "name" : "Only MFA users have DELETE rights",
  "attributes" : {
    "/principal/amr": {
      "eq": "mfa"
    }
  },
  "authorizations" : [ {
    "type" : "wildcard",
    "permission" : "web:DELETE"
  } ]
}

一旦您获得了其中之一,就可以按如下方式创建一个 PolicyBasedAuthorizationProvider 实例:

Policy policy = new Policy(
  new JsonObject()
    .put("name", "Only MFA users have DELETE rights")
    .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);

您可以从文件或通过代码加载单个策略,也可以向提供者加载多个策略。当加载多个策略时,所有策略都会与用户进行匹配,并返回所有授权。

策略使用属性。Vert.x 仅提供简单的属性实现,用于匹配相等性、否定或集合中的值。但这并非限制,因为您可以使用组合(composition)实现自己的属性,并将其注册到策略中。

Attribute.create(user -> {
  // get the current origin
  return "localhost".equals(user.get("origin"));
});