13

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

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

开始学习这方面的最佳地点在哪里?.NET 中是否有每个人都使用这些东西的标准?我已经在谷歌上搜索了几个小时,虽然似乎大多数人都指向DotNetOpenAuth ,但我似乎找不到任何关于如何使用该库的可靠教程。下载带有示例,但它仍然让我感到困惑。

我认为它会很简单:

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

但似乎每个提供商都有自己的一组代码,而且这一切都如此不同和令人困惑。Facebook 有一些图形对象,twitter 有一些我不明白的“InMemoryTokenManager”,而谷歌甚至没有身份验证示例,只有一个谷歌地址簿示例。最重要的是,出于某种原因,您必须将示例中的一些 ApplicationBlock 演示中的一些代码复制到您自己的应用程序中,并且在不知道它到底要做什么的情况下编译所有代码是一项艰巨的任务。

我觉得我在这一切中缺少一些基本的东西。

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

我相信我了解 OAuth 的高级概念,但是一旦我尝试深入了解细节,我就会立即迷失方向。

4

4 回答 4

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 返回电子邮件之前对其进行验证。

于 2013-04-02T17:40:33.760 回答
2

我建议你使用 PureKrome 的 World Domination,它使用起来很简单,有据可查而且非常好!

https://github.com/PureKrome/WorldDomination.Web.Authentication

它通过简单的单行配置处理 Twitter、Google、Facebook 等,并处理其他所有内容。

创作者也经常在 n jabbr.net 上闲逛。

于 2013-04-02T17:31:06.753 回答
1

ASP.NET MVC 4 'Internet Application' 模板已经DotNetOpenAuth在上面实现,如果你还没有的话,你应该看看。

于 2013-04-02T17:34:21.660 回答
0

看看Social Bootstrap API项目(它使用 servicestack,但很高兴看到所有这些流行语技术在一个可读的示例中协同工作)。

此外,如果您想更好地了解 OAuth 的工作原理,Mashape 有很好的解释。这将使您了解大多数包装器实现的幕后东西。

Rick Strahl 有一个例子,我多年前用它在 MVC 中实现 OpenID。它有点过时了,但它是当时最直接的实现之一。我使用该实现构建的几个客户站点仍然运行良好。

于 2013-04-02T20:23:53.133 回答