Nexus仓库开启鉴权以及出现的问题
1. 开启鉴权
Docker仓库
需要单独配置, 取消勾选匿名拉取
Settings -> Respository -> Repositories -> [Your Docker Repositories] -> Allow Anonymous Docker Pull
其他仓库
安全配置里取消匿名访问, 这样访问Nexus所有接口都需要鉴权
Settings -> Security -> Anonymous Access -> Access
2. 客户端配置支持鉴权
Maven
为指定的Repository配置Server节点来支持鉴权信息
<servers>
<server>
<id>nexus</id>
<username>Your Username</username>
<password>Your Password</password>
</server>
</servers>
<repositories>
<repository>
<id>nexus</id>
<url>http://Your Nexus URL</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
如果配置了鉴权信息, 拉取依赖时仍然401(首先请保证用户密码正确), 检查settings中的mirror配置, 如
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://Your Nexus URL</url>
</mirror>
</mirrors>
镜像的工作逻辑是不是带鉴权的, 如果mirrorOf配置的*, 会把所有请求都镜像到指定仓库,
而如果该仓库刚好是配置了鉴权的Nexus仓库, 就会导致401, 从而产生配置了Server但没有生效的错觉.
所以请务必将mirrorOf中移除掉鉴权仓库的id(!nexus), 并且保证mirror.url是不需要鉴权的
Npm
Npm是支持登录指令的(还可以指定仓库), 登录后会在.npmrc中生成鉴权配置, 语义不可读
npm login
npm login --registry=http://Your Nexus URL
一般如果采用Nexus默认配置, 会出现下列问题:
- 首次登录会成功
- 后续拉取依赖, 或者再次登录, 都会401
异常信息中除了401外, 还会提示need: Basic realm="Sonatype Nexus Repository Manager"
此时不是你的客户端问题, 而是Nexus的配置问题, 在Nexus的Settings -> Security -> Realms中, 将npm Bearer Token Realm配置为可用即可解决

浙公网安备 33010602011771号