使用API​​**(aka身份验证令牌)部署到Maven Central

如何在不使用未加密本地密码的情况下与Maven Central / Nexus通信(尤其是使用Gradle,但不仅限于此)。

基本原理

不幸的是,Gradle(和许多其他构建工具)没有提供任何机制来本地加密密码(或至少编码)。 没有这种简单的活动,例如向同事显示您的全局Gradle配置( ~/.gradle/gradle.properties ),就很难受,更不用说以纯文本形式在磁盘上存储密码带来的更严重的风险(请参见以及Sony Pictures Entertainment hack )。 它是Gradle,因此,在使用了所有Groovy魔术后,就有可能在Linux上实现与系统**环的集成来获取密码,但是我不知道有任何现有的插件/机制可以这样做,所以我宁愿这样做。宁愿不写它。

另一个问题是,如今,在无处不在的自动化和云环境中,通常使用允许执行给定操作的API**。 但是,它的丢失不会为攻击者提供劫持该帐户的可能性(例如,令牌既不能用于登录管理面板,也不能用于更改电子邮件或密码,而这需要额外的身份验证)。

如果您需要在CI服务器上保留有效的凭据以进行自动甚至连续发布,这一点非常重要。 多亏了我的gradle-nexus-staging-plugin ,无需在Nexus GUI中执行任何手动步骤即可将工件升级到Maven Central,所以这是我要在Codearte中处理我的私人项目和FOSS项目的下一个问题。

Nexus API**生成

互联网上搜索“ Maven*api**”并没有帮助,因此我开始研究Nexus REST API文档,发现实际上有一种(未知的)方式可以生成和使用API​​**(也称为身份验证令牌)。

  1. 登录Nexus托管Sonatype OSS存储库托管 (或您自己的Nexus实例)。
  2. 单击右上角的登录名,然后选择“配置文件”。
  3. 从带有“摘要”文本的下拉列表中选择“用户令牌”。
  4. 点击“访问用户令牌”。

    使用API​​**(aka身份验证令牌)部署到Maven Central

    在Nexus中生成API**

  5. 输入密码
  6. 复制并粘贴您的API用户名和API**(到〜/ .gradle / gradle.properties或CI服务器配置中)。
  7. 像往常一样以更安全的方式工作。

摘要

使用API​​**可以将工件部署到Maven Central / Nexus很好,并且设置起来非常容易。 有人可能会说许可策略是粗粒度的(除了密码/电子邮件更改外,什么也不做,其他所有操作),但在我看来,这对于工件存储库系统类来说似乎足够了。 另外,这种方法也应与Sbt,Ivy,Leiningen以及其他尝试将工件上传到Maven Central的其他方法一起使用(包括通过使用settings-security.xml消除主密码加密的限制来包括Maven本身)。 希望该帖子将使其广为人知。

翻译自: https://www.javacodegeeks.com/2015/09/deploy-to-maven-central-using-api-key-aka-auth-token.html