Scribe - 同时进行多次回调

时间:2012-11-18 17:09:47

标签: java facebook oauth callback scribe

我正在制作一个允许支持facebook的服务器软件模块。 问题出在回调URL上。如果一个客户端启动授权进程,则另一个客户端同时或在第一个用户完成之前启动进程。我怎么能检查用户先完成了什么?

我需要一种方法来检查我得到的客户端回调。一种解决方案是将其他寄存器锁定,直到第一个完成,但我不想这样做。还有另外一种方法吗?我曾考虑在回调结束时加入?client=clientid,但我听说facebook只允许在Facebook上的应用程序中指定的确切网址。

更新 它无法将client =“clientid”添加到回调中。还有其他想法吗?

3 个答案:

答案 0 :(得分:2)

经过一些搜索后,我发现facebook会允许参数:state。 (感谢@jacob https://stackoverflow.com/a/6470835/1104307

所以我刚刚做了?state = clientId。

对于任何使用scribe的人来说,代码都是这样的:

service.getAuthorizationUrl(null) + "&state=" + clientId;

答案 1 :(得分:1)

我认为添加和客户端= clientID等GET参数没有问题。 Facebook会将您重定向到您指定的URL,并使用REQUEST参数检查完成请求的人员。如果您将网址指定为http://yoursite.com并将重定向传递到http://some-sub-domain.yoursite.com或完全不同的位置,则会出现此问题。

答案 2 :(得分:1)

如果您使用的是服务器端流程,则oauth 2流程将为:

  1. 将用户重定向到Facebook
  2. facebook然后将用户重新指向您指定的回调
  3. 您的服务器使用curl之类的东西来获取访问令牌
  4. 您的服务器需要更多卷曲才能获得更多用户数据或更新用户数据
  5. 我的建议是在步骤1中设置会话cookie,同时将此会话ID存储在您的服务器上。然后会话cookie将自动发送到步骤2中的回调URL,您可以通过这种方式识别数据库中的会话。

    这适用于所有服务提供商(google,twitter,linkedin等),是保持会话连续性的首选方式。