【问题标题】:MVC based API - how to implement OAuth?基于 MVC 的 API - 如何实现 OAuth?
【发布时间】:2011-06-23 12:50:41
【问题描述】:

我已经尝试了几个小时来让 OAuth 与我正在开发的 API 一起工作,显然我的方法一定是错误的,因为我经常遇到死胡同。

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

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

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

所以我想,我的问题真的是:

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

提前感谢您!
- 约翰尼,丹麦

【问题讨论】:

  • 有人对此有什么好的建议吗?我很难相信我是唯一一个尝试在没有 OpenID 的情况下实现 OAuth 的人。 :)

标签: asp.net-mvc api oauth dotnetopenauth


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢,下周我会再看一遍,如果成功了再告诉你。 :)
  • 激活日志确实起到了作用。然而,我遇到了一些问题,源代码与二进制文件不同,因此很难调试,因为我的断点是在奇怪的地方而不是在其他地方命中的。终于让它工作了,但只能通过反复试验。感谢您的帮助。 :)
  • 很高兴它为你工作@JohnySkovdal。至于调试试验,您可以通过从github.com/AArnott/dotnetopenid/tags 下载您的版本的源代码来获得完全匹配的源代码。在下一个版本中,我们将开始将源代码和符号上传到 symbolsource.org,这应该会自动完成。
猜你喜欢
  • 2015-11-07
  • 1970-01-01
  • 2016-03-15
  • 2019-09-03
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
相关资源
最近更新 更多