本文介绍如何解决MSE Nacos实例登录失败问题。
问题现象
程序连接MSE Nacos时出现以下错误。
login failed.
caused: No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
问题原因
应用程序中配置了Nacos的
username
和password
,并同时开启了MSE Nacos的鉴权功能。由于MSE Nacos的鉴权功能使用的是阿里云RAM,不支持开源的默认鉴权插件,因此报错。关于阿里云RAM和MSE Nacos的鉴权功能的详细信息,请参见阿里云RAM和Nacos Client访问鉴权。
应用程序中配置了Nacos的
username
和password
,且未开启MSE Nacos的鉴权功能,但传入的username
和password
不正确,导致login failed
。说明未开启MSE Nacos的鉴权功能时,您可以通过MSE的公网地址拼接URL的方式访问Nacos开源控制台,然后创建账号。但该方式会导致您的权限控制无法生效。例如,仅给予某个账号只读权限,但实际上并不会进行操作拦截。
解决方案
检查MSE Nacos实例是否已经打开鉴权功能。具体操作,请参见Nacos Client访问鉴权。
若未打开,可以通过Nacos 开源控制台创建对应的
username
和password
。若不希望使用
username
和password
或已打开鉴权功能,请参照下文移除username
和password
。
检查应用配置,是否有配置Nacos的
username
和password
。若存在,则需要移除相关信息。若直接使用
Nacos Client
,请检查是否初始化Client时配置了以下信息。若存在,请移除该部分信息后重试。
properties.put(PropertyKeyConst.SERVER_ADDR, "${mseNacos实例域名}"); properties.put(PropertyKeyConst.USERNAME, "${username}"); properties.put(PropertyKeyConst.PASSWORD, "${password}"); // 注册中心 NamingService namingService = NamingFactory.createNamingService(properties); // 配置中心 ConfigService configService = ConfigFactory.createConfigService(properties);
若使用
Spring Cloud Alibaba
,请检查应用配置是否完成了以下配置。若存在,请移除该部分信息后重试。
#通用设置 spring.cloud.nacos.username= spring.cloud.nacos.password= #注册中心 spring.cloud.nacos.discovery.username= spring.cloud.nacos.discovery.password= #配置中心 spring.cloud.nacos.config.username= spring.cloud.nacos.config.password=
若使用
Dubbo
, 请检查配置的注册中心URL上是否存在username
或password
参数。若存在,请移除该部分信息后重试。例如:
dubbo.registry.address=nacos://${mseNacos实例域名}:8848?username=&password=
若没有在应用配置中找到配置Nacos的
username
和password
,且使用的是Spring Cloud Alibaba
,请在部署环境中检查启动参数以及环境变量是否包含相关信息。若存在,请移除这部分信息后重试。#启动参数 ps -ef | grep java | grep ${应用名} | grep -E 'username|password' #环境变量 env | grep -iE 'username|password'
若以上方案均没有找到对应信息,且使用的是
Spring Cloud Alibaba
,可在代码中全局检索username=
和password=
的关键字。若存在,请移除这部分信息后重试。说明Spring Cloud会读取环境变量、启动参数和依赖包中的配置文件,并按照一定的顺序尝试获取配置。若您的应用配置文件中不包含这些配置,但在其他文件有对应配置,也会导致其生效。
若以上方案均没有找到对应信息,且使用的是
Spring Cloud Alibaba
,请排查应用所依赖的Nacos配置中是否包含对应信息。若存在,请移除这部分信息后重试。#Nacos配置中心中的配置文件名为: ${spring.application.name}.properties ${spring.application.name}.yaml ${spring.application.name}.yml