我正试图将指标推向基本的认证推送网关。但是我遇到了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>"));
以上密码为加密后输入push gateway config中的密码。
这里的文档(https://github.com/prometheus/client_java#with-basic-auth)没有提到任何关于加密密码的内容,密码以明文形式提供。
谁能指出我错过了什么?正如您概述的文档中所述,bcrypt过程仅适用于使用导出器工具包的导出器,而Java客户机以纯文本形式接受参数。
这背后的原因是bcrypt是为密码存储而设计的。Bcrypt在内部为您生成一个盐和从纯文本重新计算哈希所需的各种信息。
信息由$
分隔,salt是哈希的第22个字符;在您的示例中:
2y
为BCrypt算法版本10
为算法的强度d6t8zGfPMZBLFLpoClFcRe
为盐- 余数是哈希值
向导出方进行身份验证时,basic-auth将以明文形式发送密码,bcrypt可用于在服务器端验证密码。
如果您要从客户端发送散列密码,导出器(服务器)将不知道如何恢复明文密码(它是散列,而不是加密)。
如果秘密在服务器端泄露,盐(假定)确保密码难以恢复。在客户端,您负责确保明文密码不泄露。