0

我正在尝试将指标推送到经过基本身份验证的推送网关。但我遇到了 401 - 未经授权

所以我安装了一个本地推送网关并配置了基本身份验证:

密码按照此处所述进行加密:https ://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md#about-bcrypt

basic_auth_users:
  pushgateway: $2y$10$d6t8zGfPMZBLFLpoClFcReK6z4gxkDr2H8jnEfOaUpjpLX4.tbyTS%

在我的代码中,我指定了用户名和密码,如下所示:

this.pushGateway.setConnectionFactory(new BasicAuthHttpConnectionFactory("pushgateway","<password>"));

上面的密码是加密并放入推送网关配置的密码。

此处的文档(https://github.com/prometheus/client_java#with-basic-auth)没有提及加密密码的任何内容,密码以明文形式提供。

有人可以指出我错过了什么吗?

4

1 回答 1

0

如您概述的文档中所述,bcrypt 过程仅适用于使用 exporter-toolkit 的导出器,而 Java 客户端以纯文本形式获取参数。

其背后的原因是 bcrypt 是为密码存储而设计的。bcrypt 在内部为您生成盐以及从纯文本重新计算哈希所需的各种信息。

信息被分隔$,salt 是散列的第 22 个字符;在你的例子中:

  • 2y是BCrypt算法版本
  • 10是算法的强度
  • d6t8zGfPMZBLFLpoClFcRe是盐
  • 余数是哈希

在向导出器进行身份验证时,basic-auth 将以纯文本形式发送密码,并且 bcrypt 可用于在服务器端对其进行验证。

如果您要从客户端发送散列,导出器(服务器)将不知道如何恢复明文密码(它是散列,而不是加密)。

如果秘密在服务器端泄露,盐(据说)确保密码难以恢复。在客户端,您有责任确保不泄露纯密码。

于 2021-08-12T13:10:39.883 回答