跳转到内容
OpenClaw 不踩坑恶意 Skills ,企业需 Skills Registry:Nacos 3.2 发布点此了解

配置访问凭据

注意

  • Nacos是一个内部微服务组件,需要在可信的内部网络中运行,不可暴露在公网环境,防止带来安全风险。
  • Nacos提供简单的鉴权实现,为防止业务错用的弱鉴权体系,不是防止恶意攻击的强鉴权体系。
  • 如果运行在不可信的网络环境或者有强鉴权诉求,请参考官方简单实现做进行自定义插件开发

当服务端开启鉴权后,SDK、OpenAPI 和控制台请求都需要携带身份信息。不同鉴权插件使用的身份材料不同。

服务端鉴权类型客户端常用身份材料说明
nacosusernamepasswordaccessToken默认 Nacos 鉴权。SDK 会用用户名密码登录并自动携带 token。
ldapusernamepasswordaccessTokenLDAP 校验用户名密码,Nacos 签发 token。
oidcAuthorization: Bearer ...accessToken使用外部 IdP 签发的 OAuth2/OIDC token。

SDK 配置

Java SDK 在传入 usernamepassword 后,会使用默认登录接口获取 accessToken,并把 token 注入后续请求。

Properties properties = new Properties();
properties.setProperty(PropertyKeyConst.SERVER_ADDR, "127.0.0.1:8848");
properties.setProperty(PropertyKeyConst.USERNAME, "${username}");
properties.setProperty(PropertyKeyConst.PASSWORD, "${password}");
ConfigService configService = NacosFactory.createConfigService(properties);
NamingService namingService = NacosFactory.createNamingService(properties);

OpenAPI 配置

默认 Nacos 鉴权和 LDAP 鉴权

先使用用户名和密码登录:

Terminal window
curl -X POST 'http://127.0.0.1:8848/nacos/v3/auth/user/login' \
-d 'username=nacos&password=${password}'

返回示例:

{
"accessToken": "eyJhbGciOiJIUzI1NiJ9...",
"tokenTtl": 18000,
"globalAdmin": true,
"username": "nacos"
}

之后请求 OpenAPI 时携带 token。推荐使用 Authorization header:

Terminal window
curl -X GET 'http://127.0.0.1:8848/nacos/v2/cs/config?dataId=example.properties&group=DEFAULT_GROUP' \
-H 'Authorization: Bearer ${accessToken}'

兼容旧调用时,也可以通过 accessToken 参数传递:

Terminal window
curl -X GET 'http://127.0.0.1:8848/nacos/v2/cs/config?accessToken=${accessToken}&dataId=example.properties&group=DEFAULT_GROUP'

OIDC/OAuth2 鉴权

当服务端使用 nacos.core.auth.system.type=oidc 时,不使用 /v3/auth/user/login 获取 token。请从企业 IdP 获取 OAuth2/OIDC token,然后请求 Nacos 时携带:

Terminal window
curl -X GET 'http://127.0.0.1:8848/nacos/v2/cs/config?dataId=example.properties&group=DEFAULT_GROUP' \
-H 'Authorization: Bearer ${idp_access_token}'

OIDC/OAuth2 的服务端配置请参考运维手册 - OIDC/OAuth2 认证

常见问题

默认登录接口返回当前鉴权类型不支持

/v3/auth/user/login 只适用于 nacosldap。如果服务端使用 oidc,请从外部 IdP 获取 token。

token 突然失效

常见原因包括:

  • token 已过期。
  • 集群节点之间 nacos.core.auth.plugin.nacos.token.secret.key 不一致。
  • 服务端切换了鉴权插件类型。
  • 权限被修改,但客户端仍在使用旧 token。

有 token 但仍然无权限

认证成功只表示服务端识别了调用者。是否能读取或写入目标资源,还取决于该身份的角色、权限以及资源可见性。