Nacos 3.3.0(2026-10-29)把 Client API 鉴权默认改成 true。镜像里不设 NACOS_AUTH_ENABLE 时,JVM 也不会再塞关闭开关,配置文件里就是 nacos.core.auth.enabled=true。

Release Notes 的 Breaking Change 写得很直:没配凭证的老客户端会被拒。下面用官方镜像 nacos/nacos-server:v3.3.0 加 Spring Boot 4.1.2、nacos-client:3.3.0 拉配置,输出来自一次 verify.sh。

默认开:环境变量未设,属性已是 true

standalone 启动只注入 token 与 server identity,故意不写 NACOS_AUTH_ENABLE。容器里读到的结果如下。

===== phase1 auth default (NACOS_AUTH_ENABLE unset) =====
+ sudo docker run -d --name nacos330-auth -e MODE=standalone -e PREFER_HOST_MODE=hostname -e NACOS_AUTH_TOKEN=*** -e NACOS_AUTH_IDENTITY_KEY=serverIdentity -e NACOS_AUTH_IDENTITY_VALUE=security -p 18848:8848 -p 19848:9848 -v ./nacos-data:/home/nacos/data nacos/nacos-server:v3.3.0
NACOS_HTTP_UP_AFTER_SEC=12
+ sudo docker exec nacos330-auth sh -c 'echo NACOS_AUTH_ENABLE=${NACOS_AUTH_ENABLE:-UNSET}; tr "\0" "\n" < /proc/1/cmdline | tr " " "\n" | grep nacos.core.auth.enabled || echo JVM_AUTH_FLAG=ABSENT; grep ^nacos.core.auth.enabled= /home/nacos/conf/application.properties'
NACOS_AUTH_ENABLE=UNSET
JVM_AUTH_FLAG=ABSENT
nacos.core.auth.enabled=true

NACOS_AUTH_ENABLE=UNSET,进程命令行没有 -Dnacos.core.auth.enabled,镜像自带的 application.properties 已经是 true。首次初始化管理员后,用 Admin API 发布了 demo-data-id / DEFAULT_GROUP,内容 hello-from-nacos-330。

无凭证:Boot 4.1 客户端 403

同一条 ConfigService.getConfig,不传 username / password。

===== NO_CRED_AUTH_DEFAULT =====
+ env NACOS_SERVER=127.0.0.1:18848 java -jar ./app/target/nacos-auth-default-0.0.1-SNAPSHOT.jar
BOOT=4.1.2
CLIENT=nacos-client:3.3.0
MODE=NO_CRED
SERVER=127.0.0.1:18848
GET_CONFIG_ERR=http error, code=403,msg=Code: 401, Message: User not found! Please check user exist or password is right!.,dataId=demo-data-id,group=DEFAULT_GROUP,tenant=public

HTTP 层是 403,消息里带 401 和 User not found!。配置明明已经发布,没有凭证照样读不到。

带凭证:同一客户端拿到内容

===== WITH_CRED_AUTH_DEFAULT =====
+ env NACOS_SERVER=127.0.0.1:18848 NACOS_USERNAME=nacos NACOS_PASSWORD=NacosAuth330! java -jar ./app/target/nacos-auth-default-0.0.1-SNAPSHOT.jar
BOOT=4.1.2
CLIENT=nacos-client:3.3.0
MODE=WITH_CRED
SERVER=127.0.0.1:18848
GET_CONFIG_OK=true
CONTENT=hello-from-nacos-330

SDK 侧就是 PropertyKeyConst.USERNAME / PASSWORD。Spring 配置里对应常见的 spring.cloud.nacos.username / password,或环境变量再映射进去。

临时关:NACOS_AUTH_ENABLE=false

同一 data volume 换成显式关闭 Client 鉴权。官方说明这是升级过渡用的兼容开关,Admin / Console 鉴权不受这个变量牵连。

===== phase2 NACOS_AUTH_ENABLE=false (same data volume) =====
+ sudo docker run -d --name nacos330-auth ... -e NACOS_AUTH_ENABLE=false ... nacos/nacos-server:v3.3.0
NACOS_HTTP_UP_AFTER_SEC=12
+ sudo docker exec nacos330-auth sh -c 'echo NACOS_AUTH_ENABLE=${NACOS_AUTH_ENABLE:-UNSET}; tr "\0" "\n" < /proc/1/cmdline | tr " " "\n" | grep nacos.core.auth.enabled || echo JVM_AUTH_FLAG=ABSENT'
NACOS_AUTH_ENABLE=false
-Dnacos.core.auth.enabled=false
===== NO_CRED_AUTH_OFF =====
+ env NACOS_SERVER=127.0.0.1:18848 java -jar ./app/target/nacos-auth-default-0.0.1-SNAPSHOT.jar
BOOT=4.1.2
CLIENT=nacos-client:3.3.0
MODE=NO_CRED
SERVER=127.0.0.1:18848
GET_CONFIG_OK=true
CONTENT=hello-from-nacos-330

镜像启动脚本把 NACOS_AUTH_ENABLE=false 写成 -Dnacos.core.auth.enabled=false。无凭证客户端又能读到同一条配置。显式 true 则与默认开一致;升到 3.3.0 后若属性文件里没有这条,行为就按新默认走。

参考来源

— 感谢阅读 —
广告

一起交流

分享你的思考,让讨论更进一步。