【问题标题】:Pushgateway throws 401 - UnauthorizedPushgateway 抛出 401 - 未经授权
【发布时间】:2021-07-26 12:47:22
【问题描述】:

我正在尝试将指标推送到经过基本身份验证的推送网关。但我遇到了 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) 没有提到任何关于加密密码的内容,密码是以明文形式提供的。

有人可以指出我缺少什么吗?

【问题讨论】:

    标签: basic-authentication bcrypt prometheus-pushgateway


    【解决方案1】:

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

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

    信息由$分隔,salt是哈希的第22个字符;在你的例子中:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 2018-05-19
      • 2020-06-11
      • 2017-02-22
      • 2018-10-08
      相关资源
      最近更新 更多