使用jhipster生成的微服务,采用其默认的JWT认证方式。代码中获取用户是通过SecurityUtils.getCurrentUserLogin().orElse("admin");方式获取用户信息。
在测试系统中,测试完全没有问题。但是发布到正式环境后系统调用gateway中认证通过,但是调用其它的微服务认识失败,报错Invalid JWT signature。
开始以为是nginx代理的问题,但是添加上cookie、autothention后还是不行,最后网上搜索发现可能是prod配置文件的设置问题。经过prod和dev两个配置文件比较,发现如下不同:
测试配置文件如下:
正式配置文件如下:
secret不一样。而且gateway和其它服务器的secret一串数字也不一样。这个secret是用来生成jwttoken的,gateway中按照自己的加密方式生成token,拿到其它服务中肯定不认识,因为他们的加密不一样。所以将prod中的secret修改成测试文件中的字符串,所有服务器保持一致,问题搞定。