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默认配置, 会出现下列问题:

  1. 首次登录会成功
  2. 后续拉取依赖, 或者再次登录, 都会401

异常信息中除了401外, 还会提示need: Basic realm="Sonatype Nexus Repository Manager"

此时不是你的客户端问题, 而是Nexus的配置问题, 在Nexus的Settings -> Security -> Realms中, 将npm Bearer Token Realm配置为可用即可解决

posted @ 2025-07-11 11:26  coder_klong  阅读(50)  评论(0)    收藏  举报