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

时间:2013-04-02 17:26:41

标签: c# asp.net asp.net-mvc oauth oauth-2.0

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

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

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

我认为它会如此简单:

  • 配置提供商的秘密。
  • 开始使用提供商登录
  • 使用身份验证Cookie验证用户
  • 在我的数据库中创建用户记录,并从提供商处存储唯一ID。

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

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

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

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

4 个答案:

答案 0 :(得分: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返回电子邮件之前验证电子邮件。

答案 1 :(得分:2)

我建议您使用PureKrome的世界统治,使用起来很简单,记录良好且非常好!

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

它使用简单的一行配置处理Twitter,Google,Facebook等,并处理其他所有内容。

创作者也在n jabbr.net周围闲逛。

答案 2 :(得分:1)

ASP.NET MVC 4'Internet Application'模板已经实现了DotNetOpenAuth,如果你还没有,你应该看一下。

答案 3 :(得分:0)

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

此外,如果您想更好地处理OAuth的工作原理,Mashape has good explanation。这将让你看看大多数包装器实现的幕后工作。

多年前我用过的

Rick Strahl has an example在MVC中实现OpenID。它有点陈旧但它是当时最直接的实现之一。我使用该实现构建的几个客户站点仍然正常运行。