如果我不将它存储在我的数据库中,我可以检索Facebook访问令牌吗?

时间:2011-08-23 23:56:04

标签: facebook

如果用户在之前的会话中授予了权限,我被要求调查是否可以从Facebook检索Facebook访问令牌。问题是我们的业务逻辑层由不同的组维护,并且与Web开发组的发布计划不同。如果我要获得离线访问令牌,我可能无法将其存储长达两个月。对于在此期间获得的任何用户,有没有一种方法可以在没有用户进一步干预的情况下从Facebook检索令牌?

我认为这可能是一个安全漏洞,但我们的一位高级开发人员认为facebook可能会提供这样的功能。

谢谢, 罗布

4 个答案:

答案 0 :(得分:0)

简而言之。

但是离线访问请求已完成。 您无需任何用户点击即可申请新令牌。

您只需获得一个新的离线访问令牌并使用它。就像你没有请求离线访问一样,并且访问令牌已经过期,它没有明确说明,但确实有效:

  

除了访问令牌(access_token参数)之外,响应还包含令牌到期前的秒数(expires参数)。令牌过期后,您需要重新运行上述步骤以生成新代码和access_token,但如果用户已经授权您的应用,则不会再次提示他们这样做。如果您的应用需要具有无限到期时间的访问令牌(可能是在用户未使用您的应用后代表用户执行操作),您可以请求offline_access权限。

http://developers.facebook.com/docs/authentication/

这样你根本不需要存储它们。 除非您确实希望在用户未使用您的应用程序时执行操作。

答案 1 :(得分:0)

每次用户重新登录时,您都会获得access_token,而不是offline_access!

您可以使用FB.getAccessToken();

在JS中获取它

当用户实际未登录时,无法检索(离线)访问令牌。

答案 2 :(得分:0)

如果要长时间存储访问令牌,则需要请求offline_access权限,否则访问令牌只会持续很短的时间。无论哪种方式,最好将其存储在cookie或本地,因为它肯定会改善您的应用程序的延迟。但请务必尽可能经常检查其有效性。

答案 3 :(得分:0)

我认为access_token意味着,您有权代表用户做事。如果您必须在没有用户FB登录的情况下执行某些操作,则需要脱机access_token。但要小心,当用户更改他/她的FB密码或删除应用程序时,将忽略脱机access_token。

所以我希望没有用户权限就没有办法获得另一个access_token。我认为最简单的方法是检查access_token以进行/ me?access_token = GET请求,并检查答案。如果答案是错误,access_token无法正常工作,则必须续订。

要从流程中间的某个人那里获取access_token有点痛苦。但您也可以将变量放入重定向链接。

实施例: https://graph.facebook.com/oauth/authorize?client_id=API_KEY&scope=email $ REDIRECT_URI = YOUR_REGISTERED_APP_URL%3F $ PARAM

$ param可能是一个流信息,如:flow = 12342323

所以当你的用户回来时,$ _GET ['flow']将是12342323。