解决nacos-v1.4.5由于未配置jwt签名令牌导致的无法登录问题
问题描述
博主在docker中部署nacos
遇到了数据库配置正常却无法登录的问题。
看报错提示首先想到的是不是我数据库里面的nacos
登录密码有问题。一般默认登录名和密码都是 nacos/nacos 。既然初始密码不行那我就自己把数据库里面的密码改了不就行了。nacos
的密码采用了Bcrypt加密算法,通过在线工具生成密码再修改数据库,再次登录。还是报密码错误。
分析问题
看来是另有原因导致了这个问题。于是打开浏览器开发者工具,查看nacos登录接口,发现状态码是500,可知是内部服务器出错。那么查看docker中nacos的日志文件。nacos的日志文件为nacos目录下的logs目录的nacos.log
。
查看日志 vim ./logs/nacos.log
,通过查找发现:
现在错误很明显了。报错的原因是**由未配置JWT的令牌密钥导致的登录无法签发JWT令牌,从而显示密码错误**。(真是害人精,你要么在运行服务的时候直接报错让服务无法启动,要么你就直接报啥错,说个密码错误等下用户一直以为是自己密码出问题了。)现在找到问题所在就好解决了。
报错日志:
1 | caused: The specified key byte array is 0 bits which is not secure enough for any JWT HMAC-SHA algorithm.The JWT JWA Specification(RFC 7518, |
解决方法
根据报错在网上查找解决方法,最后发现有篇CSDN博客有详细的解决方法,同时在nacos的github上的issue也有相关的讨论。总的来说就是在nacos的配置文件中配置个密钥就行了。配置文件为nacos目录下的:conf/application.properties
。
1 | #不同版本配置项有出入,根据你的nacos版本选择配置 |
但是博主是通过docker部署的,理论上上面的方法我也可以采用,但是直接修改配置文件就又要配置数据卷,显得麻烦一点。通过进入容器,查看nacos容器的默认配置文件。
发现它是通过读取一个名为:NACOS_AUTH_TOKEN
的环境变量实现的。那么只要在启动容器的时候配置这个环境变量不就好了?
配置docker-compose.yaml
:
使用docker-compose
构建容器:
1 | docker-compose up -d |
再次登录,成功解决问题。