文档

如何解决MSE Nacos实例登录失败问题

更新时间:

本文介绍如何解决MSE Nacos实例登录失败问题。

问题现象

程序连接MSE Nacos时出现以下错误。

  • login failed.

  • caused: No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken;

问题原因

  • 应用程序中配置了Nacos的usernamepassword,并同时开启了MSE Nacos的鉴权功能。由于MSE Nacos的鉴权功能使用的是阿里云RAM,不支持开源的默认鉴权插件,因此报错。

    关于阿里云RAM和MSE Nacos的鉴权功能的详细信息,请参见阿里云RAMNacos Client访问鉴权

  • 应用程序中配置了Nacos的usernamepassword,且未开启MSE Nacos的鉴权功能,但传入的usernamepassword不正确,导致login failed

    说明

    未开启MSE Nacos的鉴权功能时,您可以通过MSE的公网地址拼接URL的方式访问Nacos开源控制台,然后创建账号。但该方式会导致您的权限控制无法生效。例如,仅给予某个账号只读权限,但实际上并不会进行操作拦截。

解决方案

  • 检查MSE Nacos实例是否已经打开鉴权功能。具体操作,请参见Nacos Client访问鉴权

    • 若未打开,可以通过Nacos 开源控制台创建对应的usernamepassword

    • 若不希望使用usernamepassword或已打开鉴权功能,请参照下文移除usernamepassword

  • 检查应用配置,是否有配置Nacos的usernamepassword。若存在,则需要移除相关信息。

    • 若直接使用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上是否存在usernamepassword参数。若存在,请移除该部分信息后重试。例如:

    dubbo.registry.address=nacos://${mseNacos实例域名}:8848?username=&password=
  • 若没有在应用配置中找到配置Nacos的usernamepassword,且使用的是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
  • 本页导读 (1)
文档反馈