介绍如何在 Nacos 2.0.2 + CentOS 7 环境中开启权限认证,包括 解压部署 和 Docker Compose 部署 两种方式,提供客户端 Spring Boot 项目的接入配置和nacos接口验证示例。
环境说明
- 操作系统:CentOS 7
- Nacos 版本:2.0.2
- 部署方式:解压部署 / Docker Compose
- 鉴权机制:Nacos 内置权限系统
- 数据库:MySQL 持久化(用于存储用户、权限等)
一、解压部署方式开启权限认证
1. 修改 Nacos 配置文件
编辑 conf/application.properties
文件,添加或修改以下配置:
properties
# 开启权限认证
nacos.core.auth.enabled=true
# 是否开启权限认证模块。开启后 Nacos 控制台、服务注册、配置拉取等都必须进行身份认证。
# 单机调试建议开启模拟真实环境;生产环境必须开启。
# 注意:开启后客户端必须配置 username/password,否则连接 Nacos 会失败(403)
# token 有效期(单位秒)
nacos.core.auth.default.token.expire.seconds=18000
# 登录后生成的 token 的有效时间,单位为秒。默认 18000 秒(5 小时)。
# 可根据实际业务需求延长或缩短。token 失效后用户需重新登录。
# token 密钥(必须为 Base64 编码字符串)
nacos.core.auth.default.token.secret.key=U2VjcmV0S2V5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDE=
# 该密钥用于生成和验证 token,必须是合法的 Base64 字符串。
# 多节点部署时所有节点必须设置相同的值,否则 token 无法互通。
# 修改密钥后旧 token 会立即失效,用户需重新登录。
# 开启服务间身份验证(可选)
nacos.core.auth.caching.enabled=true
# 启用权限信息缓存,提高性能。修改用户权限后可能存在刷新延迟。
nacos.core.auth.enable.userAgentAuthWhite=false
# 是否开启基于 User-Agent 的身份白名单机制。
# 该配置主要用于 1.x 升级场景,2.x 新部署不建议开启,存在绕过风险。
# 服务间通信身份校验信息(可选)
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
# 配置服务间通信的身份认证信息(key-value 对)。
# 多节点部署时用于节点间的身份信任校验。单机部署可以不配置。
我看有文章说要配置spring.security.user.name
/ spring.security.user.password
,但这两个是 Spring Boot 的 Basic Auth,与 Nacos 无关,不需要配置。
2. 重启 Nacos 服务
bash
cd bin
sh shutdown.sh
sh startup.sh -m standalone
二、客户端如何携带用户名密码连接?
以 Spring Boot 项目为例:
yaml
spring:
cloud:
nacos:
discovery:
server-addr: ${NACOS_HOST:localhost}:${NACOS_PORT:8848}
username: ${NACOS_USERNAME}
password: ${NACOS_PASSWORD}
namespace: dev
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
username: ${NACOS_USERNAME}
password: ${NACOS_PASSWORD}
namespace: ${spring.cloud.nacos.discovery.namespace}
在启动脚本中注入环境变量:
方式一:命令行传参
bash
nohup env NACOS_USERNAME=nacos NACOS_PASSWORD=your-password java -jar app.jar &
执行命令会被日志记录,存在暴露风险,如果是内部测试,则无所谓。
方式二:使用 .env 文件
.env
文件内容:
plain
NACOS_USERNAME=nacos
NACOS_PASSWORD=your-password
设置权限:
bash
chmod 600 .env
启动脚本中加载 .env
:
bash
#!/bin/bash
BASE_DIR=$(cd "$(dirname "$0")"; pwd)
ENV_FILE="$BASE_DIR/.env"
if [ -f "$ENV_FILE" ]; then
set -a
source "$ENV_FILE"
set +a
else
echo "[ERROR] .env 文件不存在"
exit 1
fi
# 其他脚本如start/stop/restart/status等等。
三、Docker Compose 部署开启权限认证
使用如下 docker-compose.yml
配置:
yaml
version: '3.7'
services:
nacos:
image: nacos/nacos-server:2.0.2
container_name: nacos
restart: always
environment:
NACOS_AUTH_ENABLE: "true"
MODE: standalone
SPRING_DATASOURCE_PLATFORM: mysql
MYSQL_SERVICE_HOST: your-mysql-host
MYSQL_SERVICE_DB_NAME: nacos_config
MYSQL_SERVICE_PORT: 3306
MYSQL_SERVICE_USER: nacos
MYSQL_SERVICE_PASSWORD: nacos123
JVM_XMS: 512m
JVM_MMS: 512m
JVM_XMN: 256m
ports:
- "8848:8848"
volumes:
- ./logs:/home/nacos/logs
说明:
NACOS_AUTH_ENABLE=true
是开启权限认证的关键配置- 默认账号为
nacos/nacos
,可登录后在数据库中修改,也可以在控制台中修改,一定要修改密码。
四、接口行为对比:开启权限认证前后变化
通过以下接口调用对比,可以清晰看到开启权限认证前后 Nacos 行为的变化。
接口 1:获取用户列表(高敏接口)
bash
curl -X GET "http://<nacos-host>:8848/nacos/v1/auth/users?pageNo=1&pageSize=10" \
-H "User-Agent: Nacos-Server"
预期结果:
情况 | 响应 |
---|---|
权限认证未开启 | 返回 200,直接获取用户信息 |
权限认证已开启 | 返回 403,提示认证失败。 |

接口 2:获取当前登录用户信息
plain
curl -X POST "http://localhost:8848/nacos/v1/auth/users/login?username=nacos&password=nacos" \
-H "User-Agent: Nacos-Server"
一旦使用默认密码,攻击者就可以使用这个接口登录获取 token,在接口中增加头获取到信息了,所以一定要修改密码。
通过这个接口获取 token,请求时带上 token,上面的接口就会获取到信息
plain
curl -X GET "http://localhost:8848/nacos/v1/auth/users?pageNo=1&pageSize=10" \
-H "User-Agent: Nacos-Server" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTc0NTMzNDc4NX0.KOeW8XmpZKEXAsVCbf3ac8hNUfK04F7xS-MB_Kr4aMs"
结果:

六、配置建议与常见问题总结
配置项 | 是否必需 | 单机建议 | 踩坑提醒 |
---|---|---|---|
nacos.core.auth.enabled |
是 | 建议开启 | 客户端需配置账号密码 |
token.expire.seconds |
否 | 可默认 | token 过期需重新登录 |
token.secret.key |
是 | 建议配置 | 必须是 Base64 编码,集群需统一 |
caching.enabled |
否 | 建议开启 | 权限更新可能有延迟 |
userAgentAuthWhite |
否 | 不建议开启 | 存在绕过风险 |
server.identity.* |
否 | 单机无需 | 集群部署必须一致 |