我写了一个Java客户端来调用jfrog api(https://artifactory.abcdcompany.com/artifactory/api/security/encryptedPassword(,它可以提供加密的密码。
选项 1:
使用用户名和 API 密钥使用基本身份验证所遵循的流程如下。
- 创建了一个输入字符串 = "用户名:APIKey">
- 我们创建了一个 encodedString = Base64.getEncoder.encodeToString(inputString(。
- 创建了一个新的字符串作为字符串ToBeSent = "Basic " + encodedString;
- 然后我们将标头设置为 Request.setHeader(HTTPHeaders.Authoirization,stringToBeSent(;
我能够连接到资源并获得 HTTP 状态 200。此外,我收到了响应,但在响应中,我收到的不是获得加密密码,而是我在上述步骤 1 中使用的相同 API 密钥。
选项 2: 此外,我们尝试使用以下方法: request.setHeader("X-JFrog-Art-API", "APIKey"(;但无济于事。我收到的 API 密钥与发送的 API 密钥相同。
在通过 API 调用时,是否应该在服务器端启用任何功能以使工件工厂使用加密密码进行响应。
由于Artifactory不内部存储密码(仅存储密码的哈希值(,因此如果不给它纯文本密码,它就无法"提供"加密密码。
该 api 中真正发生的事情是,Artifactory 的加密模块被调用到您发送的字符串上,它决定是否应该加密(基于加密时修改的字符串的结构( - 如果是,字符串被加密然后返回。
由于您正在发送一个 api 密钥,加密模块知道它不会加密它(因为没有意义(。
使用该 api 的正确方法是发送您的纯文本密码以使其由加密模块加密(因为 Artifactory 不会在内部存储用户密码(。