使用Laravel Passport和负载均衡器

3
在我的Laravel应用中,我使用Passport的Password Grant为iOS应用程序提供API访问权限。
在生产环境中,我还使用了一个负载均衡器来将请求分发到两个服务器。所有这些都是在Forge中创建的。
我可以使用Password Grant令牌通过iOS对用户进行身份验证,并让API返回bearer access_token。然而,负载均衡器随后将下一个请求发送到另一台服务器,该服务器似乎无法识别access_token,因此会抛出401错误。
问题1:有没有人在负载平衡环境中使用Passport的经验?如果有,你遇到过这个问题吗?
问题2:access_token存储在哪里?我在数据库中通过ID引用它,但token本身并没有存储在那里。如果没有,我不知道如何在服务器之间保持持久性。

你正在使用哪种会话驱动程序?所有服务器都有相同的APP_KEY吗? - sisve
嗨,卡梅伦,你的问题解决了吗?我也遇到了同样的问题,像@ChristianF建议的那样,密钥是相同的,但仍然无法工作。 - shaile
@shaile,你是否会因为负载均衡器将请求转发到不同的应用服务器而出现401错误?我现在已经在生产环境中让它工作了,所以我可能能够提供帮助。 - ChristianF
谢谢@ChristianF,不,我没有收到任何401错误,这是否与实例正在侦听的80或443端口有关? - shaile
不确定为什么。 - George
显示剩余2条评论
1个回答

0

虽然有多种方法可以解决这个问题,但大多数都很麻烦(例如让客户端将令牌作为请求参数添加到后续请求中等)。我认为最好、最干净的解决方案是在Forge上使用粘性会话


据我所知,粘性会话会强制设备在一定的天数内(最多7天)保持向同一服务器请求,如果在7天后请求被传递到另一台服务器,则会抛出授权错误,这并不总是最干净的方式。最干净的方法是让服务器使用相同的通行证密钥来验证令牌,尤其是没有会话的情况下。 - George

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接