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

Joh*_*dal 7 api asp.net-mvc 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库的哪些部分,以及何时应该使用它们,以便在未硬编码到OpenId的MVC服务器上实现OAuth,因为这两个网站(X和Y)都不支持OpenId?
  2. 如果我不打算使用OpenId,我是否应该使用另一个库,因为DotNetOpenAuth似乎最关注?
  3. 任何其他更符合我需要的方法都是非常受欢迎的.

先感谢您!
- 丹麦约翰尼

And*_*ott 4

DotNetOpenAuth 支持 OpenID、OAuth 和 InfoCard 一起或单独使用。听起来您正在构建的内容符合 DotNetOpenAuth 示例“OAuthServiceProvider”所演示的内容。确实,该示例使用 OpenID 来登录用户,但您可以完全忽略示例中的 login.aspx 页面,从而与 OpenID 完全分离。完全支持在没有 OpenID 的情况下使用 OAuth。

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

关于您看到的两次添加随机数问题,有时服务提供商不适当地有两个模块验证传入的 OAuth 请求,每个模块都验证随机数,因此第二个模块始终拒绝每个请求。您可以检查这是否导致您的问题。否则,看看未更改的示例是否适合您,如果是,请将其功能与您正在做的事情进行比较,看看可能出了什么问题。 激活日志记录通常也有帮助。