基于MVC的API - 如何实现OAuth?

时间:2011-06-23 12:50:41

标签: asp.net-mvc api oauth dotnetopenauth

我现在已经尝试了几个小时来让OAuth继续使用我正在处理的API,显然我的做法一定是错的,因为我经常遇到死胡同。

我得到了什么:
  - 在.NET MVC中实现的API,它将数据结果作为XML或JSON返回   - 它需要API密钥才能使用API   - 用于管理API密钥的后端网站(X)   - 另一个网站(Y),其中包含此API从中提取数据的大量数据。

我应该得到什么:
  - 允许API密钥从网站(Y)访问用户数据的能力,如果他们通过OAuth(1.0A)自己允许的话。

我的尝试:
  - 到目前为止,我的方法是使用DotNetOpenAuth库,但几乎所有关于如何实现OpenId,OAuth命名空间中的一些类甚至似乎硬编码为OpenId功能。所以我一直试图看看使用OpenId的示例中发生了什么,看看我是否可以使用其中的一部分来实现没有OpenId的OAuth。
  - 在服务器端,各种方法包括读取“UnauthorizedTokenRequest”并通过调用ServiceProvider.Channel.PrepareResponse(unauthorizedTokenRequest).AsActionResult()返回它.AsActionResult()由于某种原因尝试将两个nonce和timestamp值添加到响应崩溃,并跳过它,它仍然返回一个我无法在客户端读取的响应。

所以我猜,我的问题确实是:

  1. 是否有指南/文档告诉您我应该在服务器端使用DotNetOpenAuth库的哪些部分,以及何时应该使用它们,以便在非硬编码的MVC服务器上实现OAuth到OpenId,因为这两个网站(X和Y)都不支持OpenId?
  2. 如果我不打算使用OpenId,我是否应该使用另一个库,因为DotNetOpenAuth似乎最关注?
  3. 非常欢迎任何其他适合我需要的方法。
  4. 提前谢谢!
    - 丹麦Johny

1 个答案:

答案 0 :(得分:4)

DotNetOpenAuth分别与一起使用时支持OpenID,OAuth和InfoCard。听起来你正在构建的东西符合DotNetOpenAuth示例“OAuthServiceProvider”所展示的内容。是的,该示例使用OpenID来记录用户,但您可以完全忽略示例中的login.aspx页面,从而与OpenID完全分离。完全支持使用不带OpenID的OAuth。

OAuth类中的几个OpenID相关方法仅仅是为了支持OpenID的“OpenID + OAuth”扩展,这不适用于您的情况,因此您可以忽略它们。

关于您看到的两次添加的nonce问题,有时会发生服务提供商不恰当地有两个模块验证传入的OAuth请求,每个模块验证nonce,因此第二个模块总是拒绝每个请求。您可以检查是否是导致您的问题。否则,查看未更改的样本是否适合您,如果是,请将其与您正在执行的操作进行比较,以查看可能出现的问题。 Activating logging也经常提供帮助。