认证与权限安全
你当前正在浏览历史版本 Vert.x 4.4.9 的文档。 访问本页面的 最新版本。

.htdigest 身份认证提供者 (vertx-auth-htdigest)

该组件提供了基于 Apache .digest 文件格式进行 HTTP Digest 摘要身份认证的 AuthenticationProvider 实现。 该提供者在加载文件后不会监听文件变更。若系统需要动态用户与凭据管理,建议使用基于数据库的动态提供者(例如 JDBC 或 MongoDB 模块)。

要在项目中使用该组件,请在构建描述文件中添加以下依赖:

  • Maven(在 pom.xml 中):

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

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

创建提供者前需要准备一个 .htdigest 文件,可以通过 Apache 提供的 htdigest 命令行工具生成。

文件就绪后,按如下方式创建 HtdigestAuth 实例:

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

获得实例后,即可像使用标准 AuthenticationProvider 一样执行认证。

默认配置会尝试从项目根目录读取名为 .htdigest 的文件。

执行身份验证

使用该实现执行认证时,需将 HTTP Digest Authorization 请求头解析为对应的凭据对象:

Credentials authInfo = new HtdigestCredentials()
  .setUsername("Mufasa")
  .setRealm("testrealm@host.com")
  .setNonce("dcd98b7102dd2f0e8b11d0f600bfb0c093")
  .setMethod("GET")
  .setUri("/dir/index.html")
  .setResponse("6629fae49393a05397450978507c4ef1");

authProvider.authenticate(authInfo)
  .onSuccess(user -> System.out.println("用户:" + user.principal()))
  .onFailure(err -> {
    // 认证失败!
  });

提供者内部运行机制

提供者在启动时加载指定的 .htdigest 文件,不会监听后续的文件变更。若修改了文件,需要重新创建提供者实例。

除 digest 文件本身外,该实现不持有额外状态。因此,nonce 字符串与计数器的生成与防重放校验必须在提供者外部进行维护。

此外,本模块不支持 auth-int 类型的 qop,以避免为了校验完整请求体的哈希值而必须在内存中缓冲潜在的大体积二进制数据流。在现代 Web 浏览器中也极少使用该模式。

由于 htdigest 文件是纯粹的认证格式,对用户执行任何权限检查均将直接返回 false。