使用AWS ELB弹性负载平衡器将Facebook身份验证回调到错误的服务器
最终编辑/结论: 对于下面“上下文”一节中记录的特定用例,粘性会话没有帮助。这指出了在生成身份验证请求之前需要建立会话。通过设置带有路由链接的页面,问题不会重现 问题: 对于AWS ELB弹性负载平衡器下的多个Web服务器,Facebook身份验证回调可能会指向发出身份验证请求以外的服务器 我们正在使用node.js和passport进行身份验证 背景: 用户被指定了一个特定的路由(类似于ourwebsite.com/dofbstuff),该路由的处理程序首先进行passport身份验证:使用AWS ELB弹性负载平衡器将Facebook身份验证回调到错误的服务器,facebook,authentication,amazon-web-services,callback,Facebook,Authentication,Amazon Web Services,Callback,最终编辑/结论: 对于下面“上下文”一节中记录的特定用例,粘性会话没有帮助。这指出了在生成身份验证请求之前需要建立会话。通过设置带有路由链接的页面,问题不会重现 问题: 对于AWS ELB弹性负载平衡器下的多个Web服务器,Facebook身份验证回调可能会指向发出身份验证请求以外的服务器 我们正在使用node.js和passport进行身份验证 背景: 用户被指定了一个特定的路由(类似于ourwebsite.com/dofbstuff),该路由的处理程序首先进行passport身份验证: ap
app.get(“/dofbstuff”,
passport.authenticate('facebook',{
范围:[“电子邮件”,“发布操作”],
callbackURL:config.facebook.fbstuffCallback
} )
在这个用例中,该应用程序可以完美地用于一个应用程序服务器,但可以挂起多个服务器
问题:
解决这个问题最简单的方法是什么
可能的解决办法:
passport.use(新FacebookStrategy(…),函数(accessToken){etc})
与
callTheAuthenticationServer(函数(accessToken){etc})
另一个选项是设置共享会话存储(AWS ElastiCache非常适合)因此,所有服务器都将会话存储在同一个数据存储中。这样,用户的会话数据并不特定于某个后端服务器。抱歉-但我不知道Facebook为其回调创建了这样一个cookie。你真的实现了你所说的吗?@javabrain是的,我实现了这个,它与此无关Facebook方面。粘性会话是ELB AWS控制台中的一个配置选项。auth回调来自Facebook方面。当你告诉Facebook“转到此回调URL”-ELB不知道Facebook发布此get(或post)的上下文在.No?的回调URL处,ELB在用户的浏览器上设置了一个cookie。该cookie在后续访问时告诉ELB您以前在哪个服务器上,并将您的第二个请求发送给同一个服务器。我将您链接到文档。您的群集作为单个服务器群集用于单个用户。因此,粘性会话必须与h将cookie从用户客户端浏览器发送到应用服务器-为该会话维护到同一服务器的流量。但是,当Facebook调用回调URL时,任何其他应用服务器都可能收到该调用。我不知道粘性会话如何解决此问题。我甚至不知道传入的Facebook回调路由如何与特定se关联通过elasticache进行会话(可能有多个会话同时进行,所以它将转到哪个回调)?