【问题标题】:laravel passport invalid token during deployment on AWS在 AWS 上部署期间 laravel 护照无效令牌
【发布时间】:2019-04-17 05:41:14
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: laravel amazon-web-services laravel-5.6 laravel-passport


    【解决方案1】:

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

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

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

    因此解决方案是,更改部署并始终部署相同的 oauth 文件。

    【讨论】:

      猜你喜欢
      • 2019-12-22
      • 2021-01-14
      • 2018-04-11
      • 2016-07-21
      • 2019-05-15
      • 2020-01-14
      • 2020-12-18
      • 2019-09-13
      • 1970-01-01
      相关资源
      最近更新 更多