Facebook Access令牌问题

时间:2011-08-31 05:23:44

标签: facebook-graph-api facebook

我正在玩Facebook Connect,试图在我的网站上使用Facebook作为手段或身份验证。目前我的工作流程看起来像这样:

  • 转到网址
  • 服务器检查AccessToken的cookie
  • 如果存在AccessToken,请在注释框中自动填写用户的姓名/个人资料图片,并将AccessToken保留为隐藏输入
    • 将页面发送到客户端
    • on submit,验证访问令牌(与表单的其余部分一起提交)是真人的有效访问令牌。如果是,请向数据库
    • 添加注释
    • 刷新页面以显示新数据
  • 如果没有访问令牌,请将用户的姓名/个人资料图片替换为<fb:login-button>,以及所需的<script>
    • 将页面发送到客户端
    • 当用户将页面/日志授权到facebook时,请刷新页面
    • (回到顶部,除了这次访问令牌应该存在)

所以我有几个问题:

  • 这样安全吗?我正在考虑如果没有Facebook的双重身份验证(在页面生成时检查一次并再次检查提交评论),我将能够做到这一点,而我无法想象保持我自己的会话状态的任何其他方式每个客户。那值得吗?

  • 当我退出Facebook时,访问令牌是否会过期?我认为它应该,但似乎我可以继续使用相同的访问令牌来获取数据(即名称,网址等)后我手动去Facebook并登出自己。是因为我只是要求公开信息,只有更多侵入性权限才会在注销时失效?

  • 鉴于每个想要做某事的人都必须从Facebook提供一个独特的令牌,这应该具有阻止CSRF的副作用,因为每个动作都可以追溯到有效的Facebook帐户。是吗?

2 个答案:

答案 0 :(得分:2)

我无法回答您的所有问题,但我可以告诉您,从政策角度看,在您网页上隐藏字段中设置访问令牌存在风险,尤其是如果您的网页可以被任何第三方代码读取,例如作为Google Analytics或AdSense。由于Facebook正在向第三方泄露用户识别数据,因此Facebook将为您指明这一点。 Facebook用户标识以纯文本形式存在于访问令牌中。 Facebook拥有可自动扫描这些内容的流程,并会在您的应用程序泄露给第三方时自动禁止您的应用。

答案 1 :(得分:2)

为什么不直接使用Facebook Javascript SDK来检测他们目前是否已登录Facebook?这也将使访问令牌在Javascript中可用,因此您可以对API进行客户端调用。 您也可以通过Facebook设置的会话cookie访问相同的访问令牌服务器端。

相关问题