如何开启 Nacos 服务端 Token 鉴权防止未授权访问?

文章导读
开启 Nacos 服务端 Token 鉴权需要配置 nacos.core.auth.enabled=true 并设置自定义 Token 密钥,适用于所有生产环境部署,但需注意 Nacos 默认鉴权是弱鉴权体系,不适合高安全诉求场景。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

开启 Nacos 服务端 Token 鉴权需要配置 nacos.core.auth.enabled=true 并设置自定义 Token 密钥,适用于所有生产环境部署,但需注意 Nacos 默认鉴权是弱鉴权体系,不适合高安全诉求场景。

先说结论:Nacos 服务端 Token 鉴权通过启用 auth.enabled 参数并配置自定义密钥实现,能有效防止未授权访问配置和服务注册接口。

  • 先判断:确认部署方式(Docker/K8S/直接部署)和网络环境(内网/公网)
  • 优先做:配置 nacos.core.auth.enabled=true 和 nacos.core.auth.plugin.nacos.token.secret.key 密钥
  • 再验证:通过 OpenAPI 登录获取 accessToken 并测试带 Token 访问配置接口

命令速用版

Docker 部署开启鉴权的完整命令:

dockerrun`--namenacos-server`\-p8848:8848\-e MODE=cluster\-e NACOS_AUTH_ENABLE=true\-e NACOS_AUTH_TOKEN=您的 Base64 编码密钥\-e NACOS_AUTH_IDENTITY_KEY=自定义身份识别 key\-e NACOS_AUTH_IDENTITY_VALUE=自定义身份识别 value\nacos/nacos-server

OpenAPI 登录获取 Token:

curl-XPOST'127.0.0.1:8848/nacos/v3/auth/user/login'\-d'username=nacos&password=nacos'

带 Token 访问配置接口:

curl-XGET'127.0.0.1:8848/nacos/v2/cs/config?accessToken=您的 accessToken'

为什么会这样

Nacos 默认不开启鉴权是为了方便内部可信网络快速部署,但生产环境必须开启。

如何开启 Nacos 服务端 Token 鉴权防止未授权访问?

Nacos 是内部微服务组件,设计定位是在可信内部网络运行。默认鉴权实现是弱鉴权体系,主要防止业务错用而非恶意攻击。开启鉴权后,客户端、SDK 和 OpenAPI 都需要配置身份信息才能访问 Nacos 服务。Token 机制是轻量级认证方式,客户端首次通过用户名密码认证成功后,服务端使用密钥生成有时效性的 Token,后续请求携带 Token 即可授权访问。

分步处理

步骤 1:确定部署方式

K8S/Docker 部署通过环境变量配置,直接部署修改 application.properties 文件。Docker 部署使用 NACOS_AUTH_ENABLE、NACOS_AUTH_TOKEN、NACOS_AUTH_IDENTITY_KEY、NACOS_AUTH_IDENTITY_VALUE 环境变量。直接部署在 conf/application.properties 中添加对应参数。

步骤 2:配置鉴权核心参数

必须配置以下参数:

  • nacos.core.auth.enabled=true(开启鉴权功能开关)
  • nacos.core.auth.plugin.nacos.token.secret.key(生成 Token 的密钥,建议大于 32 位字符串,进行 Base64 编码)
  • nacos.core.auth.server.identity.key(服务端身份标识的键)
  • nacos.core.auth.server.identity.value(服务端身份标识的值)

密钥配置注意事项:所有 Nacos 节点配置必须一致,不使用默认值,定期更换增强安全性。

如何开启 Nacos 服务端 Token 鉴权防止未授权访问?

步骤 3:重启 Nacos 服务

修改配置后需要重启 Nacos 服务器使更改生效。Docker 部署重新创建容器,直接部署重启服务进程。

步骤 4:客户端配置鉴权信息

Java SDK 初始化 ConfigService 时传入用户名和密码:

Propertiesproperties=newProperties();properties.put("serverAddr",serverAddr);properties.put("username","${username}");properties.put("password","${password}");ConfigServiceconfigService=NacosFactory.createConfigService(properties);

Spring Cloud Alibaba 项目在 application.properties 中配置:

spring.cloud.nacos.discovery.metadata.token=sa-token

怎么验证是否生效

通过 OpenAPI 登录获取 accessToken,然后用该 Token 访问配置或服务接口。登录成功返回 accessToken 和 tokenTtl 信息,后续请求在 URL 后添加参数 accessToken=$accessToken。如果未配置鉴权或 Token 无效,请求会被拒绝访问。

验证检查点:

如何开启 Nacos 服务端 Token 鉴权防止未授权访问?
  • 不带 Token 访问配置接口应返回鉴权失败
  • 带有效 Token 访问应正常返回配置信息
  • 客户端 SDK 配置用户名密码后能正常拉取配置

常见坑

  • Token 未生效:检查是否正确设置了 nacos_auth_enable 和 nacos_auth_token,两个参数缺一不可
  • 密钥不一致:集群部署时所有节点必须使用相同的 Token 密钥,否则服务端间通信会失败
  • Token 过期:默认 accessToken 过期时间为 18000 秒,可适当调整 nacos_auth_token_timeout 值
  • 命名空间不一致:检查客户端与服务端的 namespace 配置是否一致
  • 暴露公网风险:Nacos 不可暴露在公网环境,应在公网环境下严格限制访问来源
  • 使用默认值:nacos.core.auth.server.identity.key 和 value 避免使用默认值以降低安全风险

常见问题

Nacos 默认鉴权强度如何?

Nacos 默认鉴权是弱鉴权体系,主要防止业务错用而非恶意攻击。如果运行在不可信网络环境或有强鉴权诉求,需要参考官方简单实现进行自定义插件开发。

Token 密钥有什么要求?

Token 密钥建议使用大于 32 位的字符串,并进行 Base64 编码增强安全性。所有 Nacos 节点必须配置相同的密钥值,集群部署时密钥不一致会导致服务端间通信失败。

开启鉴权后客户端如何配置?

客户端 SDK 初始化时需传入用户名和密码参数,OpenAPI 调用需先登录获取 accessToken,后续请求在 URL 中添加 accessToken 参数。Spring Cloud 项目可通过 metadata.token 配置。

从哪个版本开始 Nacos 控制台默认开启鉴权?

从 Nacos3.0.0 版本开始,Nacos 的控制台访问默认开启鉴权。早期版本需要手动配置 nacos.core.auth.enabled=true 开启。

参考来源

  • Nacos 官方文档 - 配置鉴权
  • Nacos 官方文档 - 鉴权插件
  • Nacos 官方文档 - Authorization 参数说明
  • 阿里云 MSE Nacos 服务文档 - Nacos 鉴权配置
  • Nacos Docker 镜像文档 - 环境变量配置说明