繁体   English   中英

使用AWS ELB弹性负载平衡器将Facebook身份验证回调到错误的服务器

[英]Facebook authentication callback to wrong server with AWS ELB elastic load balancer

最终编辑/结论:

对于下面“上下文”部分中记录的特定用例,粘性会话无济于事。 这指出了在生成身份验证请求之前需要建立会话的需求。 通过设置一个带有指向该路线的链接的页面,该问题不再出现。

问题:

对于在AWS ELB弹性负载均衡器下的多个Web服务器,Facebook身份验证回调可能会定向到服务器,而不是发出身份验证请求。

我们正在使用带有护照的node.js进行身份验证。

语境:

为用户提供了一条特定的路线(例如ourwebsite.com/dofbstuff之类的东西),该路线的处理程序首先对护照进行身份验证:

    app.get( '/dofbstuff',
        passport.authenticate( 'facebook', {    
                            scope: [ 'email', <snip> 'publish_actions' ],
                            callbackURL:config.facebook.fbstuffCallback
                         } )

在这种使用情况下,该应用程序完美地适用于一台应用程序服务器,但是挂在多台服务器上。

题:

解决这个问题的最简单方法是什么?

潜在的解决方案:

  1. 在应用服务器上,替换:
passport.use( new FacebookStrategy(...),function(accessToken){ etc. } )

  callTheAuthenticationServer( function(accessToken){ etc. } )
  1. (续),然后让身份验证服务器向Facebook发布身份验证请求(该请求驻留在其自己的DNS地址中以进行回叫),然后向应用服务器发出响应。 然后,请求将如何转发到身份验证服务器以在客户端(用户的浏览器)上生成Facebook登录对话框?

  2. 让应用服务器找出要从NAT转发的端口。 ELB将需要接受URL中带有该端口的Facebook回调(即myserver.com/fbauthcallbackroute:portnumber)。

  3. https://aws.amazon.com/blogs/aws/aws-iam-now-supports-amazon-facebook-and-google-identity-federation/声称“通过集成,也可以为Facebook或Google身份启用类似的流程他们的SDK与您的应用配合使用,并只需创建其他角色即可。” 我不知道这是否意味着您可以使用身份联盟作为获取Facebook令牌的手段。 如果是这样,该过程记录在哪里?

其他说明:

我发现此问题已经发布在此处(在ruby rails环境中): Facebook身份验证+负载平衡器

我还在github上的https://github.com/jaredhanson/passport-facebook/issues/104上记录了一个护照-facebook的错误。

AWS ELB具有“粘性会话”,该粘性会话将在浏览会话期间将特定用户(通过cookie)保留在同一实例上。

另一个选择是设置共享会话存储(AWS ElastiCache非常适合此设置),以便所有服务器将会话存储在同一数据存储中。 这样,用户的会话数据就不特定于单个后端服务器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM