我最近签订合同,开发一个需要Facebook-Connect作为其身份验证机制之一的应用程序.
在我的Facebook-Connect解决方案上工作,我意识到它正在实施单点登录身份验证方案,如果您登录到一个网站,您将登录到所有这些网站.就个人而言,我并不喜欢这种方法,并且发现在尝试通过您(开发人员)可以控制的单个进程来汇集所有身份验证系统时,很难(并非不可能)使用该方法.我还认为它引入了不必要的安全问题(请参阅Internet部署的风险),只是为了略微改善用户体验.
在研究与该技术合作的策略时,我注意到博客圈几乎已经将Facebook-Connect作为认证的圣杯,与其他人的观点相呼应,并强烈要求"OpenID过于复杂".与此同时,我还没有真正看到许多着名的开发人员和安全专家就此事提出旗帜或发表意见.我对OpenID的唯一体验是使用StackOverflow和相关站点.我一开始很难理解它是什么,但是一旦我意识到我可以使用我的google凭据登录,经验证明非常顺利.
我是偏执狂还是错过了每个人都得到的东西?Facebook-Connect真的是OpenID的更好替代品,还是每个人都在喝别人的Kool Aid?
编辑:
在做完这个之后,我确认facebook-connect登录方案不太理想.整个iframe/js/cookie/reload的东西很难看,很容易出问题.将fb登录集成到现有的身份验证系统本身就是一种练习.你必须做出一些妥协.我必须写一篇完整的文章来解释我是如何做到的.
Facebook似乎对我的单点登录有点痴迷.大多数人都不知道facebook为他们自己的网站启用了OpenID,但即使他们实现它的方式也是模仿SSO并使其有点无意义.我认为OpenID应该工作的方式:你去一个新的网站,如果你有一个OpenId帐户,把网址,登录到你的提供商,你就在.你可以继续完成其他信息.
Fb不预先为您提供OpenID登录.相反,您首先必须注册并登录,然后转到帐户设置,在链接帐户下,选择一个OpenID提供商.但是,与了解要点的StackOverflow不同,如果您指示您的提供商记住该设置,则Facebook仅允许您使用您的OpenID登录.为什么?它使它更像SSO.如果你没有检查要求记住的谷歌盒子,OpenID在facebook上不起作用.
除了登录,facebook-connect一般工作,但仍有许多角落要圆.让我拉扯头发并诅咒那个api的一些事情:
Facebook文档分散,没有适当简化.在打开它的第一个小时内,您的浏览器中至少会打开10个选项卡.如果/当您偶然发现您认为将来可能有用的有趣主题时,请确保对它们进行正确的书签,不要依赖导航再次找到它们,因为有时候关键文章会深埋.我知道记录api的wiki方法最近让很多项目变得很懒,但很常见,这就是facebook.他们应该有办法聘请团队来提供适当的用户指南.所以,在开始之前,记得要自己拥有一个不错的facebook书签文件夹.
api中有很多方法,祝你好运找到如何使用它们的例子,你必须依靠本能.
很多时候,当某些东西不能按你的意愿工作时,没有人知道为什么.访问论坛页面时,会以假设和谣言的形式给出解释.例如,在登录时,为什么有些应用程序在其他应用程序有js模式对话框时会有弹出式登录窗口?是否有可能控制这种行为?没有人确定.有传言说Facebook正在进行一些测试而不让任何人知道.
并非一切都像宣传的那样有效.即你可能会发现自己被鼓励使用某个功能,浪费宝贵的时间学习它,实现它,调试它,然后只有当你把它放在try/catch异常处理程序中时才发现它不适用于facebook-connect.例如feed.publishUserAction.
Facebook尝试太难以用户友好.他们浪费宝贵的资源推动自动化api只能工作一半时间(xfbml),而不是鼓励开发人员利用他们辛苦获得的知识,使用大多数时候证明可以工作的基本内容(伪sql + html).例如,我浪费时间尝试使用ajax/xfbml/js的组合从他们的服务器中提取朋友的照片.这将适用于几个请求,然后完全停止工作.然后我决定使用他们的facebook查询语言(fql)直接从他们的数据库中提取数据,并在html中创建我自己的标记.100%工作.如果你是一个真正的开发者,我给你的建议,不要购买facebook试图养活每个人的"一切都很容易"的口头禅,但事实并非如此.除了熟悉您的编程平台的facebook客户端API(PHP,Python,Java等)之外,还可以投资学习使用fql直接从服务器获取的内容以及使用JS Client API在浏览器上可以执行的操作(不是与fbjs混淆).你可能会发现后两个是你需要做的大部分事情.
我确定这个清单并没有就此结束,但从我的头脑中来看它就是这样.
警告:强烈意见如下.
是的,他们正在喝Kool-Aid.Facebook Connect是一个专有的,依赖于提供商的单点登录等等.Facebook倒闭,或者被认为不值得信任,而且你已经被软化了.
OpenID绕过了那个.它目前有重大的用户体验问题,但长期来看它是一个更好的解决方案,因为它可以使系统免于依赖(并过滤所有流量)单个提供商.此外,它的规范和实现似乎更清洁 - 没有这个JavaScript/IFrame的东西.只是简单的HTTP请求和重定向.这也为您提供了更好的浏览器兼容性.
Facebook Connect修复了用户体验问题,但却牺牲了浏览器支持和提供商选择.这是一个短期的实用胜利,但我认为长期来看并不是一个好主意.