laravel 在 AWS 上部署期间护照无效令牌

laravel passport invalid token during deployment on AWS

我的设置如下: 我有一个用 Vue.js 编写的前端,一个 Laravel 5.6 中的 API 和 AWS 上的基础设施。一切都在 docker 个容器中运行。我们在前端和 API 之间有 4 个 API 容器和一个负载均衡器。身份验证适用于 Laravel Passport v5 和不记名令牌。

基本上一切正常,验证成功。

但是当我们部署新版本的API时,出现了以下情况: 2 API 个实例具有版本 1,另外 2 个 API 个实例具有版本 2。 这是有意为之的,因为我们希望在不停机的情况下进行持续部署。一段时间后,2 个 v1 实例也被新的 v2 实例替换。所有实例都使用相同的数据库。

不幸的是,在此期间 window,身份验证不再有效。前端似乎使用正确的新令牌向 API 发出了一些请求。负载均衡器将一些请求分配给 v1 实例,一些请求分配给 v2 实例。对 v2 实例的请求成功,对 v1 实例的请求不成功(401 未授权)。

我的问题:护照如何验证不记名令牌?为什么 v1 实例不能验证 v2 实例生成的令牌,反之亦然?即使它们都使用相同的数据库,我可以监督实例之间的差异并影响通行证吗?

我们已经解决了这个问题,我会为那些对以下内容感兴趣的人解释一下: 问题是,作为我们部署过程的一部分,我们总是调用 artisan 命令 "php artisan passport:keys" 以使护照在新的 docker 容器中工作。

如果您仔细查看此命令,它会生成 2 个文件: oauth-private.key 和 oauth-public.key

这些文件对于不记名令牌的生成至关重要。问题是,如果您有多个具有不同 oauth 文件的 API docker 容器,它们将无法验证彼此的令牌。

所以解决方案是更改部署并始终部署相同的 oauth 文件。