2

我正在使用服务器端身份验证编写一个 Web 应用程序,并且我一直试图找出一种在我的应用程序中利用 Facebook 的 Javascript SDK 的方法。

FB.init 的文档将可选的 authResponse 参数定义为用于“手动设置可从 getAuthResponse 检索的对象”。它还指出,一旦获得,应用程序可以存储整个 authResponse 对象以供将来访问。如果应用程序使用 FB.login(Javascript SDK 的身份验证),这可能会起作用,但是使用服务器端身份验证的应用程序呢?

服务器端身份验证使我的应用程序能够获取用户的访问令牌,这是图形 API 调用所需的最关键信息。我希望仅此 access_token 就足以构造一个有效的 authResponse 对象,用于进行身份验证以与 Javascript SDK 一起使用。

仅使用包含有效“accessToken”字段的 authResponse 调用 FB.init(使用有效的 appID、channelUrl 和其他参数)是不够的。包括 userId 也是不够的。理想情况下,仅这些参数就可以工作。为 authResponse 定义的唯一其他人是“expiresIn”和“signedRequest”。这些参数中的哪一个(如果有的话)足以生成有效的 authResponse 对象?它们必须分配给什么值?

我设法挖掘了“签名请求”的描述: https ://developers.facebook.com/docs/authentication/signed_request/

这份文件提出了许多问题。我假设签名是由对称算法产生的。如果没有,则无法生成它。假设有可能,有效载荷的描述绝不是具体的。有一个包含 9 个参数的列表,其中没有一个是按要求标记的。

4

2 回答 2

0

就像 CBroe 说的,你不应该手动传递任何东西。您首先调用FB.getLoginStatus并将您的 javascript 处理程序作为参数传递给此方法。您将从 getLoginStatus 调用返回 authResponse。

当然,理论上您可以将 access_token 参数传递给任何 FB.api 调用,例如 /me?access_token=blah_blah,其中 blah_blah 是您拥有的字符串,但同样,这不是必需的,您最好将其委托给响应处理程序。

使用 javascript sdk 和服务器端身份验证进行访问令牌生成/扩展/验证时要非常小心。您最终会维护两个单独的代码路径,并最终一遍又一遍地对 Facebook 进行相同的调用。即使您将访问令牌存储在您身边,也最好选择一种最适合您的方法,而不是通过服务器端调用来获取访问令牌并在客户端调用 FB.api 来使用访问权限令牌。

于 2012-07-17T12:37:07.300 回答
0

有一个解决方案。我没想到这很容易。

FB.api('/me?access_token={{ access_token }}', function (me) {
    console.log(me); //do anything with me
});

因此,您之前不需要在 FB 中设置 Objekt 变量 - 只需将 access_token 作为参数添加到您的请求中即可。

于 2013-04-30T14:49:41.507 回答