如何开启 Nacos 服务端鉴权防止未授权服务注册
开启 Nacos 鉴权后,默认 Token 失效时间为 18000 秒,且 2.2.1 版本后社区版本将移除默认密钥值,必须自行配置才能启动节点。
原因分析
Nacos 是一个内部微服务组件,需要在可信的内部网络中运行,不可暴露在公网环境。默认情况下,Nacos 引擎不启用鉴权,会响应所有请求,这会导致配置中心对外直接暴露。根据 2025 年 3 月 5 日发布的文档,Nacos 提供的是简单鉴权实现,为防止业务错用的弱鉴权体系,不是防止恶意攻击的强鉴权体系。如果运行在不可信的网络环境或者有强鉴权诉求,需要参考官方简单实现做替换增强。
解决方案
非 Docker 环境配置
修改 application.properties 文件,开启鉴权之前配置为:nacos.core.auth.enabled=false。开启鉴权之后,需要设置以下参数:
nacos.core.auth.system.type=nacosnacos.core.auth.enabled=truenacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
自定义密钥时,推荐将配置项设置为 Base64 编码的字符串,且原始密钥长度不得低于 32 字符。例如:nacos.core.auth.default.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=。注意:鉴权开关是修改之后立马生效的,不需要重启服务端。
Docker 环境配置
使用官方镜像时,在启动 docker 容器时添加环境变量NACOS_AUTH_ENABLE=true。示例命令:
docker run --env PREFER_HOST_MODE=hostname --env MODE=standalone --env NACOS_AUTH_ENABLE=true -p 8848:8848 nacos/nacos-server
还可以添加其他鉴权相关的环境变量:NACOS_AUTH_TOKEN_EXPIRE_SECONDS(token 失效时间,默认 18000 秒)、NACOS_AUTH_TOKEN(token,默认 SecretKey012345678901234567)。
Kubernetes 环境配置
在 Kubernetes 的 Deployment 或 StatefulSet 配置中,通过环境变量方式设置鉴权参数:
spec:
containers:
- name: nacos-server
image: nacos/nacos-server
env:
- name: NACOS_AUTH_ENABLE
value: "true"
- name: NACOS_AUTH_TOKEN
value: "你的 Base64 编码密钥"确保配置了所有必要的鉴权环境变量,并考虑使用 ConfigMap 或 Secret 来管理敏感信息。
OpenAPI 鉴权使用
开启鉴权后,首先需要使用用户名和密码登录 Nacos。示例:
curl -X POST '127.0.0.1:8848/nacos/v3/auth/user/login' -d 'username=nacos&password=nacos'
若用户名和密码正确,返回信息例如:{"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTYwNTYyOTE2Nn0.2TogGhhr11_vLEjqKko1HJHUJEmsPuCxkur-CfNojDo","tokenTtl":18000,"globalAdmin":true}。接下来进行配置信息或服务信息时,应当使用该 accessToken 鉴权,在 url 后添加参数accessToken=$accessToken。
注意事项
- 密钥需要保持节点间一致,长时间不一致可能导致
403 invalid token错误。 - 文档中提供的密钥为公开密钥,在实际部署时请更换为其他密钥内容,防止密钥泄漏导致安全风险。
- 开启 Nacos 鉴权功能之后,无法通过 Nacos 开源控制台访问 Nacos 实例,仅支持使用 MSE 控制台访问该实例(针对阿里云 MSE 场景)。
- 创建的 Nacos 引擎默认不启用鉴权,Nacos 引擎会响应所有请求,建议仅在生产环境中部署集群模式并开启鉴权。
- 关闭使用 User-Agent 判断服务端请求并放行鉴权的功能:
nacos.core.auth.enable.userAgentAuthWhite=false。 - 配置自定义身份识别的 key 和 value:
nacos.core.auth.server.identity.key=example、nacos.core.auth.server.identity.value=example。
参考来源
来源:Nacos 官方文档 - 服务端如何开启鉴权(2025 年 3 月 5 日发布)
来源:阿里云 MSE 控制台文档 - 配置鉴权(2026 年 4 月 23 日发布)
来源:Nacos 快速开始指南(2026 年 4 月 14 日的资料)
来源:Nacos 鉴权配置说明(2024 年 9 月 26 日收录)