一、该问题的重现步骤是什么?
1. boot版本 使用NGINX 做服务端负载均衡,会偶尔出现服务端401的问题“请求未授权”。
2. boot版本,在本地模拟做负载均衡,同事A电脑上开启一个服务,开启一个nginx服务,配置负载,同事B电脑上只开启一个服务,两个服务代码完全相同。登录的时候会先后调用两个接口,接口1:blade自带的获取token接口;接口2:根据接口1返回的token获取用户详细信息。如果第一个获取token的请求先到达A的电脑上,第二获取用户信息的请求到达B的电脑上,会提示签名认证失败,定位到代码是下面这段。
3.奇怪的是,如果在B的电脑上打上断点,就不会报这个错。
4.nginx配置如下
二、你期待的结果是什么?实际看到的又是什么?
boot单体版本支持nginx负载均衡。
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
jwt是分布式无状态认证,不管负载到哪一台服务器,只要token合法,都是可以认证通过的。
如果是多台服务器注意要做好时钟同步,jwt是会校验时间戳的。
你的情况需要在截图处打log,看一下未授权时请求头的token是什么,然后再进行排查
多台服务时间不一致导致的这个问题,在生成的token时候调用了setNotBefore(Date nbf)方法,token解析时,如果解析时间在设置的nbf时间之前,就会报错,最终导致上述截图地方返回的是null
想问解决了么....我现在做nginx负载均衡也出现这个问题了。
是多台服务器么?如果是多台做一下时钟同步再看看
扫一扫访问 Blade技术社区 移动端