【问题标题】:Facebook Access Token questionsFacebook 访问令牌问题
【发布时间】:2011-11-07 08:19:33
【问题描述】:

我正在玩 Facebook Connect,试图在我的网站上使用 Facebook 作为手段或身份验证。目前我的工作流程如下所示:

  • 转到网址
  • 服务器检查 AccessToken 的 cookie
  • 如果AccessToken存在,评论框自动填写用户名/头像,隐藏输入中留下AccessToken
    • 向下发送页面给客户端
    • 在提交时,验证访问令牌(已与表单的其余部分一起提交)对于真人来说是有效的访问令牌。如果是这样,请在数据库中添加评论
    • 刷新页面以显示新数据
  • 如果没有访问令牌,请将用户名/头像替换为<fb:login-button>,以及所需的<script>s。
    • 向下发送页面给客户端
    • 当用户授权页面/登录facebook时,刷新页面
    • (返回顶部,但这次访问令牌应该存在)

所以我有几个问题:

  • 这安全吗?我正在考虑在没有 Facebook 双重身份验证的情况下我能够做到的方法(在页面生成时检查一次并在评论提交时再次检查),除了维护我自己的会话状态之外,我想不出任何其他方法每个客户。那值得做吗?

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

  • 鉴于每个想要做某事的人都必须提供来自 Facebook 的唯一令牌,这应该会产生阻止 CSRF 的副作用,因为每个操作都可以追溯到有效的 Facebook 帐户。对吗?

【问题讨论】:

    标签: facebook-graph-api facebook


    【解决方案1】:

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

    【讨论】:

    • 主要原因是,无论好坏,我都想尽可能多地在服务器端做这些事情。因此,在调用 Facebook 之后,我不想让大量的 javascript 在客户端用 DOM 做聪明的事情,我只想将身份验证的东西(在这种情况下是访问令牌)传递给服务器,让服务器完成所有工作思考并让它在第一次尝试时吐出正确的(定制的)页面。我真的不喜欢 javascript DOM 操作;任何不平凡的事情都会很快变得混乱。
    • 一旦 Facebook 的 Javascript SDK 设置了 cookie,Facebook 的 PHP SDK 就可以获取相同的会话(通过 cookie) - 然后您可以从 PHP SDK 进行所有 API 调用(或从 Python 或任何服务器-您使用的语言) - 应该不需要自己手动传递访问令牌
    【解决方案2】:

    我无法回答您的所有问题,但我可以告诉您,从政策角度来看,将访问令牌放在页面的隐藏字段中是有风险的,特别是如果您的页面可以被任何第三方代码读取,例如作为谷歌分析或 AdSense。 Facebook 会因为它向第三方泄露用户识别数据而责备你。 Facebook 用户 ID 以纯文本形式存在于访问令牌中。 Facebook 具有自动扫描这些内容的流程,如果您的应用将用户 ID 泄露给第三方,它将自动禁止您的应用。

    【讨论】:

    • 嗯,但是访问令牌不是已经在 cookie 中,并且任何可以抓取我看到的 HTML 的第三方都不能抓取 cookie 吗?我想将访问令牌从 HTML 中删除并让服务器检查每个请求的 cookie 不会花费我任何费用。
    • 第三方无法访问 cookie - 只有您的用户可以访问他们自己的 cookie
    猜你喜欢
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2012-06-02
    • 2018-09-08
    • 2012-12-07
    • 2011-10-28
    • 1970-01-01
    相关资源
    最近更新 更多