如何使用 API 密钥访问 gradle 中的 artifactory 上的 Maven 存储库?

Gho*_*ica 5 api-key artifactory gradle maven

我们有一个 JFrog 工件,其中包含 Maven 存储库(和其他元素)。

在我的 gradle 设置中,我定义了:

repositories {
    maven {
        url = uri("https://eu.artifactory....../whatever/")    
        credentials {
            username = "my-full-user-id"
            password = "my-real-password"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

工作正常。当我更改密码条目以使用我的 JFrog API KEY时,它有效。

但是:使用 api 密钥仅在username包含我的真实用户 ID 时才有效。

然而:当“直接”向 JFrog 发出 https 请求时(例如使用 python 脚本),不需要提供用户名:只需在请求标头中包含 API KEY 就足够了。

事实是:在我们的设置中,我们手头有 API 密钥,但没有用户 ID。所以我希望能够在 gradle 中定义一个无需用户名即可工作的 Maven 依赖项。

但当

  • 我在 gradle 设置中将用户名留空,gradle 抱怨它为空。
  • 我尝试了除了我的真实用户 ID 之外的其他任何操作,我得到了401 Unauthorized响应

问题:是否可以在 gradle 中使用“maven 风格”存储库定义,该定义与 API KEYS 一起使用并且不需要相应的用户 ID?

tho*_*est 5

Artifactory 支持基于标头的身份验证,您可以在标头中提供 API 密钥X-JFrog-Art-Api(请参阅Artifactory REST API)。我手头没有 Artifactory 实例来测试,但 Gradle 的HTTP 标头身份验证应该可以解决问题:

repositories {
    maven {
        url = uri("http://repo.mycompany.com/maven2")
        credentials(HttpHeaderCredentials::class) {
            name = "Private-Token"
            value = "TOKEN"
        }
        authentication {
            create<HttpHeaderAuthentication>("header")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)