我应该如何为应用程序实现OAuth?

Che*_*hev 13 c# asp.net asp.net-mvc oauth oauth-2.0

我正在为需要执行以下操作的客户端创建应用程序:

  • 允许用户使用Google,Facebook,Twitter和LinkedIn进行身份验证.
  • 注册后,允许用户添加其他提供商.(即如果用户通过Google验证,那么他们也应该能够添加任何或所有其他提供商.)
  • 允许用户导入Google联系人,Facebook好友列表,Twitter粉丝和Linkedin好友,以构建自定义联系人列表.

哪个地方最适合开始学习这个?是否有一个标准,每个人都在.NET中使用这些东西?我一直在谷歌搜索几个小时,虽然似乎大多数人指向DotNetOpenAuth我似乎找不到任何关于如何使用该库的实用教程.下载附带样本,但它仍然让我感到困惑.

我以为它会像下面这样简单:

  • 配置提供商的秘密.
  • 开始使用提供商登录
  • 使用auth cookie对用户进行身份验证
  • 在我的数据库中创建用户记录并从提供者存储唯一ID.

但似乎每个提供商都有自己的代码集,而且它们都是如此不同而且令人困惑.Facebook有一些图形对象,twitter有一些我不理解的"InMemoryTokenManager",而Google甚至没有一个身份验证示例,只有Google地址簿示例.最重要的是,您必须将样本中的一些ApplicationBlock演示中的一些代码复制到您自己的应用程序中,出于某种原因,并且在不知道它正在尝试做什么的情况下将所有内容编译成一个艰巨的任务.

我觉得我错过了所有这些基本的东西.

在这一点上,即使书籍推荐也会很棒.

我相信我理解OAuth的高级概念,但是一旦我试图深入了解细节,我立即迷失了.

Wik*_*hla 6

首先,如果您使用的是net 4.5,那么默认的asp.net模板带有大多数提到的提供程序的身份验证代码,那么使用外部库确实没有意义.

其次,如果您仍需要有关oauth2身份验证的一些详细信息的详细教程,请查看Ben Foster的这篇精彩文章http://ben.onfabrik.com/posts/oauth-providers

第三,遗憾的是,如果除了身份验证之外还需要其他任何东西,那么就没有单一的协议.因此,每个提供商都有自己的方式来公开这些额外的数据 - 联系人,帖子等.你不能做太多关于它,它与oauth2无关,但只是一种调用特定api的方法作为基于oauth2身份验证的rest/xml Web服务公开.这意味着如果仅进行身份验证,则每个提供程序的协议大致相同.更具体的是.

第四,我会坚持使用提供商返回的电子邮件地址而不是内部ID.并非所有提供商都支持id,而所有提供商都可以返回用户电子邮件.并且您可以信任此信息,因为提供商在通过oauth2返回电子邮件之前对其进行验证.