2011-08-31 221 views
0

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

  • 转到URL
  • 服务器检查的cookie的accessToken
  • 如果的accessToken存在,会自动在评论框的用户名/资料图片填充,并留下的accessToken在隐藏输入
    • 发送页面提交,验证访问令牌(这是用表格的其余部分提交)到客户端
    • 是一个真实的人有效的访问令牌。如果是这样,添加注释,以数据库
    • 刷新页面,以显示新的数据
  • 如果没有访问令牌,与<fb:login-button>更换用户名/资料图片,与所需的<script>小号一起。
    • 页发送到客户端
    • 当用户授权页/登录到Facebook上,刷新页面
    • (回顶,但这次访问令牌应该存在)

所以我有几个问题:

  • 这种事情安全吗?我正想着如果没有Facebook的双重身份验证(在页面生成时检查一次并再次检查评论提交),我将能够做到这一点,并且我无法用其他任何方式来维护自己的会话状态每个客户。这值得吗?

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

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

回答

2

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

+0

主要原因是,无论好坏,我希望尽可能多地在服务器端做这些事情。因此,在向Facebook进行调用之后,我并不需要大量的JavaScript在客户端执行DOM操作,我只想将身份验证(在这种情况下是访问令牌)传递给服务器,让服务器执行所有操作思考并让它在第一次尝试中吐出正确的(定制的)页面。我真的不喜欢javascript DOM操作;任何不平凡的事情都会让人感到困惑。 –

+1

一旦Facebook的Javascript SDK设置了cookie,Facebook的PHP SDK就可以获取相同的会话(通过cookie) - 然后您可以从PHP SDK(或者使用Python或您使用的任何服务器端语言)进行所有API调用 - 应该不需要自己手动传递访问令牌 – Igy

2

我不能回答你所有的问题,但我可以告诉你,在你的页面上的隐藏字段的访问令牌是从政策角度的风险,特别是如果你的页面可以通过任何第三方阅读第四方代码,如Google Analytics或AdSense。 Facebook会因此泄漏用户识别数据给第三方。 Facebook用户标识以纯文本格式存在于访问令牌中。 Facebook有自动化的流程扫描这些东西,并会自动禁止你的应用程序,如果它泄漏给第三方使用。

+0

嗯,但不是已经在cookie中的访问令牌,并且不能有任何第三方谁可以抓住HTML我看到也抓住cookie?我想,将访问令牌留在HTML之外并且让服务器在每个请求中检查cookie都没有任何意义。 –

+1

第三方将无法访问cookie - 只有您的用户才能访问他们自己的cookie – Igy