如何在不使用未加密本地密码的情况下与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密钥(也称为身份验证令牌)。
- 登录Nexus托管Sonatype OSS存储库托管 (或您自己的Nexus实例)。
- 单击右上角的登录名,然后选择“配置文件”。
- 从带有“摘要”文本的下拉列表中选择“用户令牌”。
- 点击“访问用户令牌”。
- 输入密码
- 复制并粘贴您的API用户名和API密钥(到〜/ .gradle / gradle.properties或CI服务器配置中)。
- 像往常一样以更安全的方式工作。
摘要
使用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