nacos2.4.1版本开启鉴权
背景:springboot项目,集成nacos后一直是直接访问就可以,无需用户名密码,个人感觉这种方式太不安全了,毕竟像redis、mysql等密码都在nacos中放着,随便一个人只要知道服务器ip就能看到,对项目的安全隐患太大,而且看官网给开启鉴权的步骤也很简单,所有就打算实现nacos用户名密码登录,提供项目的安全性。
直接上步骤:
1、根据官网步骤,修改nacos配置文件中的几项参数:
nacos.core.auth.default.token.secret.key=$custom_base64_token_secret_key
nacos.core.auth.server.identity.key=$custom_server_identity_key
nacos.core.auth.server.identity.value=$custom_server_identity_value
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=true
官网链接:
nacos2.4.1 怎么配置开始账号密码登录 | Nacos 官网
2、重启nacos
在nacos安装目录的bin目录下执行命令:
关闭nacos:sh shutdown.sh
开启nacos(单机模式): sh startup.sh -m standalone
3、访问nacos主页:
http://XXXX:8848/nacos/#/login
首次登录会提示是初始化登录,用户名为nacos,密码自己设置,设置后会让你再次登录一下,登录成功的话,就算是nacos开启鉴权成功了,后续可以在右上角再修改密码;
登录失败的话,问题来了,我这边通过nacos/nacos登录一直提示用户名或密码错误
打开开发者工具,查看login接口返回的报错信息
a、403:一般是用户名和密码不对,参考各自nacos使用的是内置数据库还是mysql,找到对应的用户名,修改密码,注意密码是加密后的,可以用Bcrypt Generator - Online Hash Generator and Checker
进行对密码加密,然后将值更新到对应的数据库中。
b、400:报错信息为:caused: No Such Algorithm: HmacSHA256;
这个是因为nacos通过这个算法对密码加解密,但是由于这个算法包在javac中,而我的项目环境只安装了jre导致的,所以解决方案有两种:
一、在jre的扩展包中增加对应的包(经验证未生效);
二、安装完整的jdk(采用并生效)
我采用的是第二种,将原来的jre卸载,并安装同版本的jdk,安装成功后,在nacos登录页面登录成功。
至此,nacos开启鉴权已完成。
接下来是springboot项目相关配置文件的改造
由于采用了dubbo进行服务间接口调用,所有需要在配置文件中dubbo相关的地方加上nacos的用户名和密码
还有其他配置调整,根据自身项目情况修改即可。