代码之家  ›  专栏  ›  技术社区  ›  Michael Ekoka

Facebook Connect还是OpenID?从开发人员的角度

  •  19
  • Michael Ekoka  · 技术社区  · 15 年前

    我最近与一个应用程序签约,该应用程序要求Facebook Connect作为其身份验证机制之一。

    使用我的Facebook Connect解决方案,我意识到它正在实施一个单一的登录认证方案,如果你登录到一个网站,你就可以登录到所有网站。就我个人而言,我不喜欢这种方法,并且发现在试图通过一个您(开发人员)可以控制的进程来漏斗式地传递所有身份验证系统时,很难(并非不可能)使用这种方法。我也认为这是不必要的 security issues (see Risks of Internet Deployment) 只是为了稍微改善用户体验。

    在研究使用该技术的策略时,我注意到,博客圈几乎把facebook connect作为认证的圣杯,相互呼应,高喊“openid太复杂了”。同时,我还没有看到很多杰出的开发人员和安全专家在这件事上扬起旗帜或发表意见。我在OpenID上唯一的经验是在StackOverflow和相关站点上。起初我也很难理解它是什么,但一旦我意识到我可以用我的谷歌证书登录,这段经历就证明是非常顺利的。

    我是偏执狂还是错过了每个人都有的东西?Facebook Connect真的是OpenID的一个更好的选择吗,还是每个人都在喝别人的“酷爱”?


    编辑:

    在完成这项工作后,我确认Facebook Connect登录方案并不理想。整个iframe/js/cookie/reload是丑陋的,很容易成为问题。将FB登录集成到现有的认证系统本身就是一个练习。你必须做出一些妥协。我得写一篇完整的文章来解释我是怎么做到的。

    Facebook似乎对我的单一登录有点着迷。大多数人不知道facebook为自己的站点启用了openid,但即使他们实现它的方式也是为了模拟SSO,使其变得有点毫无意义。我认为OpenID的工作方式是:你去一个新的网站,如果你有一个OpenID帐户,输入URL,登录到你的提供商,然后你就进入了。然后,您可以继续完成其他信息。

    FB没有预先提供OpenID登录。相反,您首先必须注册并登录,然后转到“帐户设置”,在“链接帐户”下,选择一个OpenID提供程序。但是,与理解这一点的stackoverflow不同的是,Facebook只允许您使用自己的openid登录,前提是您指示提供商记住该设置。为什么?它使它更像SSO。如果你不选中要求记住的Google框,OpenID在Facebook上就不起作用。

    撇开登录不谈,Facebook Connect一般都可以工作,但仍有许多角落需要绕开。有几件事让我揪着头发诅咒那个API:

    • Facebook文档是分散的,没有适当地简化。在打开它的第一个小时内,您的浏览器中将至少打开10个选项卡。如果/当你偶然发现一些你认为将来可能有用的有趣的话题时,一定要正确地为它们加上书签,不要依赖导航来再次找到它们,因为有时重要的文章会被深埋。我知道维基记录API的方法最近让很多项目变得懒惰,但这很常见,这就是Facebook。他们应该有办法雇用一个团队来提供适当的用户指南。所以,在开始之前,记得给自己准备一个好的Facebook书签文件夹。
    • API中有很多方法,幸运的是找到了一个如何使用它们的例子,你必须依靠直觉。
    • 很多时候,当一些事情不能如你所愿工作时,没有人知道为什么。访问论坛页面时,以假设和谣言的形式给出解释。例如,在登录时,为什么有些应用程序有弹出式登录窗口,而其他应用程序有JS模式对话框?有可能控制这种行为吗?没有人确定。有传言称,Facebook正在进行一些测试,但没有让任何人知道。
    • 并不是每件事都像广告上说的那样有效。也就是说,你可能会发现自己被鼓励使用某个功能,浪费宝贵的时间学习、实现、调试它,然后只会发现当你将它放入一个Try/Catch异常处理程序时,它不适用于Facebook Connect。例如 feed.publishUserAction .
    • Facebook太难做到用户友好。他们浪费宝贵的资源来推一个只工作一半时间的automagic API(XFBML),而不是鼓励开发人员利用他们辛苦获得的知识,使用大多数时间被证明有效的更基本的东西(伪SQL+HTML)。例如,我浪费时间尝试使用Ajax/XFBML/JS的组合从朋友的服务器上提取图片。它可以满足几个请求,然后完全停止工作。然后我决定使用他们的Facebook查询语言(FQL)直接从数据库中提取数据,并用HTML创建自己的标记。工作100%。我的建议是,如果你是一个真正的开发者,不要接受Facebook试图为每个人提供的“一切都很容易”的口头禅,事实并非如此。除了熟悉编程平台的脸谱网客户端API(PHP、Python、Java等)之外,还要投资于直接从服务器中拉取的东西。 fql 以及您可以在浏览器上使用 JS Client API (不要与FBJ混淆)。你很可能会发现后两个是你做大多数事情所需要的。

    我相信名单不会在那里结束,但从我的头上看,它在这里。

    3 回复  |  直到 13 年前
        1
  •  6
  •   Michael Ekstrand    15 年前

    警告:强烈意见如下。

    是的,他们在喝苦艾酒。Facebook Connect是一个专有的、依赖于提供商的单点登录附加功能。Facebook倒闭了,或者被认为不值得信任,你就被解雇了。

    OpenID绕过了这一点。目前它存在着主要的用户体验问题,但从长远来看,它是一个更好的解决方案,因为它使系统不依赖于(并通过)单个提供者(并过滤所有流量)。而且,它的规范和实现看起来更干净——没有任何javascript/iframe的东西。只是简单的HTTP请求和重定向。这也为您提供了更好的浏览器兼容性。

    Facebook Connect修复了用户体验问题,但牺牲了浏览器支持和提供商选择。这是一个短期的务实的胜利,但我认为从长远来看这不是一个好主意。

        2
  •  2
  •   Cyril Gupta    15 年前

    单一登录方案现在在主要应用程序中相当常见。如果你登录Gmail,你就可以登录到谷歌的所有产品。我认为这在某种程度上是有意义的,特别是如果应用程序是相互连接的,那么这是一项重要的服务,而且提供商有最好的安全人员在幕后工作。

    现在对于OpenID,我认为这也是一个好主意,但是OpenID仍然不是很容易访问。它本应改革中小型网站的登录,但它没有。有很多网站使用它,但显然不够。大多数网站仍然使用自己的登录方案,称之为昏昏欲睡或与单独的提供商不安。

    但我认为,像OpenID这样的东西迟早会出现,但要使其发挥作用,就需要大力推动。像谷歌这样的人。

    想象一下,如果你能用你的谷歌ID登录。

    目前,我认为你不必对Facebook Connect感到不舒服,但我推荐OpenID,尽管我自己还没有使用它:)( 嗜睡 )

        3
  •  0
  •   DanSingerman    15 年前

    你看过吗 Google Friend Connect ?它类似于Facebook Connect,但它是基于开放ID的,因此不完全属于谷歌。它似乎也解决了开放ID用户体验问题。

    rpxnow.com 也很好地解决了开放ID用户体验问题。