认证与授权

.htdigest 认证提供程序

我们提供一个 AuthenticationProvider 的实现,它使用 .digest 文件格式来执行身份验证。该提供程序在加载后不会监视文件的更新。如果您需要动态用户管理,使用动态提供程序(例如 JDBC 或 Mongo 提供程序)会更方便。

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

  • Maven(在您的 pom.xml 中)

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

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

要创建一个实例,您首先需要一个 .htdigest 文件。此文件是使用 Apache htdigest 工具创建的。

一旦您拥有其中一个,就可以按如下方式创建一个 HtdigestAuth 实例

HtdigestAuth authProvider = HtdigestAuth.create(vertx, ".htdigest");

一旦您获得实例,就可以像任何 AuthenticationProvider 一样使用它进行身份验证。

默认配置假定在项目根目录中使用 .htdigest 文件。

认证

当使用此实现进行身份验证时,它假定摘要认证头被解析为一个 JSON 对象,我们从现在起将其称为身份验证信息

Credentials authInfo = new HtdigestCredentials()
  .setUsername("Mufasa")
  .setRealm("[email protected]")
  .setNonce("dcd98b7102dd2f0e8b11d0f600bfb0c093")
  .setMethod("GET")
  .setUri("/dir/index.html")
  .setResponse("6629fae49393a05397450978507c4ef1");

authProvider.authenticate(authInfo)
  .onSuccess(user -> System.out.println("User: " + user.principal()))
  .onFailure(err -> {
    // Failed!
  });

提供程序内部行为

该提供程序将在启动时加载指定的 .htdigest 文件,并且不会监视修改。如果您需要动态重新加载,您将需要重新启动该提供程序。

该实现除了摘要文件本身之外不包含任何其他状态,这意味着 nonce 字符串和计数器的验证和生成必须在此提供程序之外处理。

最后,不支持 auth-int qop,以避免为了验证完整请求的哈希值而不得不消耗潜在的大量数据块。现代网络浏览器通常也不支持此功能。

在验证用户特定权限时,它将始终返回 false,因为 htdigest 文件是纯粹的身份验证机制,而非授权。