[JWT]校验用户身份信息失败,但依然能获取token的值,求解
1. 问题描述?#
我在 A 服务器与 B 服务器上分别部署了一模一样的 Laravel9 项目代码,使用 nginx 做负载均衡,将接口请求轮流转发到两台服务器上,客户端访问网站域名后会先到达 master 服务器,然后由 master 服务器轮流转发请求到 A 与 B 服务器上处理 PHP 的逻辑
A 与 B 的 Linux 版本号,PHP 版本,nginx 版本都是一模一样的,PHP 代码文件里,.env 文件中的 JWT 的秘钥、加密方式、有效时间都是一模一样的
现在的问题是
当我请求登录时,master 服务器将登录请求转发给 A 服务器,生成一个 JWT 的 token 返回给客户,客户带着这个 token 做后续请求时,master 服务器将后续请求转发给 B 服务器,在 B 服务器上第一次验证用户身份时是验证不通过的,但是可以拿到 token 的值
也就是 auth (‘user’)->check () 的结果是 false
但是 auth (‘user’)->getToken () 的结果是有值的
但是当再次发起请求时无论是 A 处理还是 B 处理都是可以成功校验用户 token 和身份信息的,只有在另一台服务器第一次校验 token 时会校验失败
但是两台服务器的各个配置版本,JWT 版本、秘钥、加密方式都是一模一样的
一开始以为 nginx 转发的时候没有把 request Headers 里面的 Authorization 带过去,但后来发现不是这个问题(因为在校验不成功的时候我使用 PHP 把 token 打印出来了,说明拿到 token 了但是 check 校验不成功),各位大佬有什么思路可以支支招吗?
2. 运行环境#
1). 当前使用的 Laravel 版本?#
Laravel 9.18.0
2). 当前使用的 php/php-fpm 版本?#
PHP 版本:8.0.22(两台服务器都是这个版本)
php-fpm 版本:8.0.22
3). 当前系统#
centos7.6(两台服务器上都是这个版本)
4). 业务环境#
JWT 版本:”tymon/jwt-auth”: “1.0.x-dev”
#JWT 的生效时间(分钟)
JWT_TTL=720(两台服务器都是一模一样的)
#JWT 的秘钥
JWT_SECRET = 暂时保密(两台服务器都是一模一样的)
#JWT 的算法
JWT_ALGO=HS256(两台服务器都是一模一样的)
推荐文章: