我现在已经尝试了几个小时来让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值添加到响应崩溃,并跳过它,它仍然返回一个我无法在客户端读取的响应。
所以我猜,我的问题确实是:
提前谢谢!
- 丹麦Johny
答案 0 :(得分:4)
DotNetOpenAuth分别与和一起使用时支持OpenID,OAuth和InfoCard。听起来你正在构建的东西符合DotNetOpenAuth示例“OAuthServiceProvider”所展示的内容。是的,该示例使用OpenID来记录用户,但您可以完全忽略示例中的login.aspx页面,从而与OpenID完全分离。完全支持使用不带OpenID的OAuth。
OAuth类中的几个OpenID相关方法仅仅是为了支持OpenID的“OpenID + OAuth”扩展,这不适用于您的情况,因此您可以忽略它们。
关于您看到的两次添加的nonce问题,有时会发生服务提供商不恰当地有两个模块验证传入的OAuth请求,每个模块验证nonce,因此第二个模块总是拒绝每个请求。您可以检查是否是导致您的问题。否则,查看未更改的样本是否适合您,如果是,请将其与您正在执行的操作进行比较,以查看可能出现的问题。 Activating logging也经常提供帮助。