如何使用Artifactory访问令牌来访问npm存储库

26

我希望使用访问令牌在CI环境中发布和检索来自artifactory npm仓库的内容。我已经使用artifactory API创建了一个Bearer令牌,但当我尝试在.npmrc中使用以下格式进行访问时:

//mydomain.jrog.io/:_authToken=myveryverylongaccesstoken
registry=https://mydomain.jfrog.io/mydomain/api/npm/npm

我总是收到401错误。

此外,虽然可能是不同的问题,但如果我尝试使用我的实际Artifactory凭据进行npm登录,则会收到以下响应:

adduser Incorrect username or password
npm WARN adduser You can reset your account by visiting:
npm WARN adduser 
npm WARN adduser     https://npmjs.org/forgot
npm WARN adduser 
npm ERR! code E403
npm ERR! forbidden No oauth npm default login configuration found: org.couchdb.user:myusername

Artifactory的文档明确指出这是建立访问令牌的用例,但有关设置npm存储库的文档似乎总是暗示您需要一个真实的用户帐户,并且没有提及访问令牌...

7个回答

35

你的Artifactory版本是多少?

"npm login"只支持5.4版本及以上(即_authToken),所以如果你的版本低于此,你唯一的机会就是通过基础认证(即_auth)进行身份验证。

基础认证设置相当简单,Artifactory提供了一个易于入手的入口来帮助您设置.npmrc

启动以下命令(不要忘记用Artifactory用户账户替换user和encrypted_password)

curl -u user:encrypted_password https://mydomain.jfrog.io/mydomain/api/npm/auth

它会输出类似于以下内容

_auth = YourLongBasicAuthToken always-auth = true email = user@server.com

将这3行复制到你的.npmrc中,这样应该就能正常工作了...


2
谢谢,这正是我的问题 :) - Saturn K
我能同时使用两个吗?我的CI只能使用“_auth”,而我的本地设置使用“_authToken”。我猜这是由于npm版本的不同造成的?我尝试同时设置这两个值,希望这会有所帮助,但它没有起作用。 - godblessstrawberry

7
生成.npmrc的内容,可以使用现有的用户,例如admin和它的密码。使用以下命令: curl -uadmin:<PASSWORD> http://<ARTIFACTORY_SERVER_DOMAIN>/artifactory/api/npm/auth 然后,您可以将_auth密钥替换/设置为任何base64编码的username:ACCESS_TOKEN
对于作用域包,请使用以下命令: curl -uadmin:<PASSWORD> http://<ARTIFACTORY_SERVER_DOMAIN>/artifactory/api/npm/npm-repo/auth/<SCOPE> 并使用任何用户和访问令牌设置..username.._password(base64)。

不需要密码,你也可以使用 APIKey: https://jfrog.com/help/r/jfrog-artifactory-documentation/npm-registry#:~:text=~/.npmrc-,Getting%20.npmrc%20entries%20directly%20from%20Artifactory,-Run%20the%20following - Bruno Marotta

4
  1. 使用基本认证 按照下面的步骤更改本地 .nprmc 文件,替换为以下命令输出的内容。
  • 自动获取生成的_authemailalways-auth字段 -> 运行以下命令直接从 Artifactory 获取这些字符串:

curl -u {用户名}:{API密钥} http://{artifactory服务器域名}/{域}/artifactory/api/npm/auth

注:


2

0

我的经验补充了其他人的评论。

我曾经使用jfrog并已将软件包放置在jfrog中。当尝试使用jfrog解决该问题时,出现了错误“npm ERR!无法验证身份,需要:Basic realm =“ Artifactory Realm””,当我检查日志时。

花费数小时尝试解决后,我找到了文档。 https://www.jfrog.com/confluence/display/JFROG/npm+Registry#npmRegistry-ConfiguringthenpmClientforaScopeRegistry

这非常有用。问题是我只粘贴了访问令牌而不是base64编码的访问令牌。 页面上有帮助的部分

然后我运行了curl -u admin命令,并使用新凭据和令牌获得了base64编码的访问令牌。

然后它开始工作了。希望对任何使用jfrog的人有所帮助。


0

除了之前提供的解决方案:

curl -u username:encrypted_password http://<ARTIFACTORY_SERVER_DOMAIN>/artifactory/api/npm/auth >> ~/.npmrc
curl -u username:personal_api_key http://<ARTIFACTORY_SERVER_DOMAIN>/artifactory/api/npm/auth >> ~/.npmrc

这里有另一种不使用curl的选项(*不适用于API密钥):

npm config set _auth $(echo -n username:encrypted_password | base64)

-7

针对 Windows 用户:

1/ 将https://registry.npmjs.org 添加到用户配置文件的 .npmrc 文件顶部:

registry=https://registry.npmjs.org

或者 2/ 运行以下命令

npm config set registry  https://registry.npmjs.org

1
用户正在询问如何处理私有npm仓库的身份验证问题。对于许多开发人员来说,切换到公共npm注册表不是一个选项,因为私有npm存储库中存储了私有IP。 - Siddhu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接