我的设置如下: 我有一个用Vue.js编写的前端,Laravel 5.6中的API和AWS上的基础架构。一切都在docker容器中运行。我们在前端和API之间有4个API容器和一个负载均衡器。身份验证可与Laravel Passport v5和承载令牌一起使用。
基本上一切正常,并且身份验证成功。
但是,当我们部署API的新版本时,会遇到以下情况: 2个API实例具有版本1,其他2个API实例具有版本2。 这是有目的的,因为我们希望在不停机的情况下进行连续部署。一段时间后,两个v1实例也将被新的v2实例替换。所有实例都使用相同的数据库。
不幸的是,在此时间段内,身份验证不再起作用。似乎前端使用正确的新令牌向API发出了一些请求。负载平衡器将一些请求分配给v1实例,将一些请求分配给v2实例。对v2实例的请求成功,对v1实例的请求没有成功(401未经授权)。
我的问题:护照如何验证不记名令牌?为什么v1实例无法验证v2实例生成的令牌,反之亦然?即使实例都使用相同的数据库,我还能监视哪些实例之间的差异并影响护照?
答案 0 :(得分:1)
我们已经解决了这个问题,我向有兴趣的人解释一下: 问题是,在部署过程中,我们总是将artisan命令称为“ php artisan Passport:keys”,以使护照可以在新的Docker容器中工作。
如果您仔细查看此命令,它将生成2个文件: oauth-private.key和oauth-public.key
这些文件对于生成承载令牌至关重要。关键是,如果您有多个具有不同oauth文件的API docker容器,则它们将无法验证彼此的令牌。
解决方案是更改部署并始终部署相同的oauth文件。