9.6.1 认证与鉴权机制概览
在 Nacos 中,认证用于确认访问者身份,鉴权用于判定是否具备访问配置与服务的权限。目标是在不影响配置下发与服务发现的前提下,提供可控访问边界、账号管理与操作审计能力。本节给出认证/鉴权的原理草图、启用配置、访问示例、排错与练习。
认证机制通常基于账号密码与 Token/JWT。登录获取令牌,请求携带令牌,服务端校验令牌合法性与有效期。为降低风险,应配合 HTTPS 传输、定期轮换密钥与令牌过期策略,防止中间人攻击与令牌泄露。鉴权以 RBAC 为核心,通过“用户—角色—权限”映射实现细粒度授权,权限粒度常见为命名空间、配置集(DataId/Group)与服务资源。
1)启用认证与鉴权(配置示例)
以下示例假设 Nacos 单机模式,配置文件路径:/opt/nacos/conf/application.properties。
# 开启认证与鉴权
nacos.core.auth.enabled=true
# 认证系统使用的 JWT secret(请替换为强随机值)
nacos.core.auth.plugin.nacos.token.secretKey=Base64EncodedSecretKeyChangeMe
# Token 有效期(秒)
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
# 控制台启用鉴权(默认开启)
nacos.core.auth.enable.userAgentAuthWhite=false
重启 Nacos:
/opt/nacos/bin/shutdown.sh
/opt/nacos/bin/startup.sh -m standalone
预期效果:访问控制台与 OpenAPI 需要登录,未携带有效 Token 的请求返回 403/401。
2)登录获取 Token 与访问 API(完整命令链)
以默认账号 nacos/nacos 为例,获取 Token 并访问配置接口:
# 登录获取 Token
TOKEN=$(curl -s -X POST \
"http://127.0.0.1:8848/nacos/v1/auth/login" \
-d "username=nacos&password=nacos" | awk -F'"' '/accessToken/{print $4}')
echo "Token=$TOKEN"
# 使用 Token 访问配置列表(示例命名空间 public)
curl -s -G "http://127.0.0.1:8848/nacos/v1/cs/configs" \
--data-urlencode "tenant=public" \
--data-urlencode "dataId=app.yaml" \
--data-urlencode "group=DEFAULT_GROUP" \
-H "Authorization: Bearer ${TOKEN}"
命令解释:
- /v1/auth/login 返回 accessToken;
- 访问配置接口时通过 Authorization: Bearer <token> 传递;
- tenant 为空表示 public 命名空间。
3)RBAC 鉴权示例(角色与权限概览)
在控制台创建用户与角色、绑定命名空间权限(示意)。
若使用 OpenAPI 进行授权,需在管理界面先创建用户/角色,再调用权限相关 API(部分接口需要管理员角色)。
用户 A -> 角色 Dev
Dev -> 权限: namespace=dev, dataId=app.*, group=DEFAULT_GROUP
预期效果:
- 用户 A 仅能访问 dev 命名空间内的配置/服务;
- 访问其他命名空间返回 403。
4)排错清单与命令
- 问题1:登录接口返回 401/403
- 检查是否开启认证:
bash grep -n "nacos.core.auth.enabled" /opt/nacos/conf/application.properties - 检查时间同步(Token 校验依赖系统时间):
bash date - 问题2:Token 可获取但访问接口 403
- 确认是否以 Bearer 方式传递:
bash curl -I -H "Authorization: Bearer ${TOKEN}" "http://127.0.0.1:8848/nacos/v1/console/namespace/list" -
检查角色与权限绑定是否正确(控制台 UI)。
-
问题3:服务端日志提示 token secret 未配置
- 检查
token.secretKey是否为空并重启:
bash grep -n "token.secretKey" /opt/nacos/conf/application.properties
5)练习
1. 启用认证与鉴权,创建用户 devuser,并限制其只能访问 dev 命名空间。
2. 使用 curl 登录并读取 dev 命名空间配置,验证能成功;再访问 public 命名空间验证被拒绝。
3. 修改 token.expire.seconds 为 60 秒,验证过期后访问返回 401。