领英/推特/脸书作为OAuth和OpenId的使用

14

首先,我理解OpenId用于身份认证,而OAuth用于授权。与本站其他问题不同的是,我不是在问哪种应该用于哪种,而是希望有人能够为我的问题提供一个解决方案。

我想允许用户通过他们的LinkedIn/Twitter/Facebook账号登录我的网站,一旦登录,比如通过LinkedIn,他们也可以选择授权他们的Twitter和Facebook账号作为可选的登录方式。这将允许用户通过这三种方式之一进行身份验证,但最终结果是他们的用户帐户出现在我的网站上。

我还想使用他们提供的授权来获取基本的用户信息(个人资料图片/姓名等)和发布状态更新。

我不想要求用户通过OpenId登录他们的帐户,然后再通过OAuth授权相同的帐户,以允许我的网站发布到他们的服务动态,并且需要对这3个服务中的每一个都执行此操作。

对此有什么想法或问题吗?

3个回答

10
如果您使用ASP.NET MVC,则DotNetOpenAuth是支持OpenID/OAuth站点的极佳解决方案。StackOverflow正在使用它,并且他们对站点中使用的代码非常挑剔。
将OpenID与DotNetOpenAuth集成相当简单。我没有尝试过OAuth,但我不认为它的质量会低于OpenID。
不幸的是,Facebook不支持OpenID/OAuth,因此您需要使用其他解决方案。我使用的是Clarity Consulting的Facebook Developer Toolkit。它可以使用,但我对代码质量有一定的抱怨;不幸的是,我还没有找到更好的东西。(注:如果有人知道更好的替代品,请告诉我)
Facebook Connect与Facebook Developer Toolkit的基本集成也相对简单。但是,由于他们试图保持与Facebook API的接近,所以他们的对象模型有些混乱,HTTP API模式也会出现很多问题。尽管如此,它仍然能够完成工作。
更新:现在Facebook宣布他们将支持OAuth 2.0,因此DotNetOpenAuth可能会成为最佳解决方案。

2

2
谢谢你的建议,安德鲁。但我想直接与服务提供商交流,而不是通过另一个提供商。我也没看到 RPX 支持 LinkedIn。 - monkeylee

0
我不想让用户通过openId登录他们的帐户,然后再通过oauth授权同一帐户以允许我的网站发布到他们的服务源,并且必须为每个服务都这样做。
恐怕您必须单独将用户帐户连接到这3个服务中的每一个。您正在使用哪个平台构建应用程序?如果是Ruby,则像OmniAuth这样的gem看起来很有前途。

我不介意分别连接这3个服务,但我不想让用户为每个服务都进行两次身份验证,一次是用于登录,另一次是用于允许查询或发布其数据流。平台是 - ASP.NET MVC / C#。 - monkeylee
在您使用每个服务进行身份验证后,请将秘密令牌保存在数据库中,以便您的应用程序可以代表该用户在未来连接。不需要第二次身份验证即可发布到他们的流中。 - Jonathan Julian
我同意,但是一旦该服务被分配后,用户在2天后返回到我的网站并点击Twitter登录(以对用户进行身份验证而不是提供流访问,因为之前已经完成了)那么Twitter不会每次都要求他们授权吗?我只想要的是验证他们的Twitter帐户详细信息,返回我存储并可以比较的秘密令牌。 - monkeylee
如果他们有一个正在使用 Twitter 的活动浏览器会话,那么他们就不会被要求重新登录,您仍然可以从 Twitter 中获取传递给回调函数的令牌。如果他们已经退出 Twitter,则必须重新登录。 - Jonathan Julian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接