16

我有一个 Web API 应用程序,并且我知道 OAuth 将是 API 的标准安全模型,其中身份验证服务器将负责生成授权令牌,以便用户可以发送到我们的服务器并使用服务。

我对此很陌生,但我了解所涉及的角色:

  • 资源所有者
  • 客户
  • 资源服务器
  • 授权服务器

但是实际上 OAuth 到底是什么,而不是理论上呢?它是一个 .NET 库吗?它是由单独的公司提供的服务吗?我可以在本地开发机器上配置它并查看它是如何工作的吗?

如何开始使用 OAuth 来保护 Web API 应用程序?

4

1 回答 1

17

OAuth 是一种协议;当前版本是OAuth 2.0。对于您的问题,该链接列出了该协议在各种技术中的几种实现。要与 .NET Web API 一起使用,您可能对DotNetOpenAuth感兴趣,它提供了 OAuth 1 和 OAuth 2 的实现。

我在我现在正在开发的应用程序中使用 DotNetOpenAuth 来保护 .NET Web API。我有一个OAuth2Handlerwhich extendsDelegatingHandler在传入请求到达任何控制器之前插入到 Web API 管道中。 OAuth2Handler执行以下操作:

  1. 实例化 DotNetOpenAuthResourceServer
  2. 读取和 ResourceServer.GetPrincipal()解密访问令牌的调用( 由.AuthorizationServerOAuthPrincipalClaimsPrincipal
  3. 将从访问令牌读取的包含用户信息的内容分配给IPrincipal线程的用户属性和当前 HTTP 上下文,以便可以从ApiController.User服务控制器中的属性获得: httpContext.User = Thread.CurrentPrincipal = principal;

老实说,让这一切正常工作(例如设置授权服务器、资源服务器、证书等)并非易事。不幸的是,DotNetOpenAuth 站点上似乎没有一个好的指南。如果您走这条路,还有一些其他任务摆在您面前:

  • 实现IAuthorizationServer- 这是 DotNetOpenAuth 提供的接口,允许您插入库并使用它们的实现来发布 OAuth2 访问令牌。您还需要实现INonceStoreICryptoKeyStore我使用 EntityFramework 上下文进行存储。
  • 配置证书-每个AuthorizationServerResourceServer都使用证书来加密/解密访问令牌,确保它们只能相互访问。我构建了一些自定义配置web.config,因此我可以在我的授权服务器应用程序和我的 Web API 服务(资源服务器)的文件中管理此配置。
  • 管理刷新令牌- 第一次从授权服务器请求访问令牌时,您将获得(取决于您的配置)OAuth2 刷新令牌和访问令牌。服务使用应该是短暂的访问令牌。刷新令牌用于获取更多访问令牌。刷新令牌应该保密(无论在您的场景中意味着什么)。对我来说,这意味着刷新令牌永远不会暴露给我的 Web 应用程序中的客户端 javascript。

我希望这有助于您对如何开始使用 OAuth 和 .NET Web API 有一个高层次的了解。这是一篇博客文章,展示了其中一些步骤。这个 SO answer提供了图片客户端的更多高级细节。

(DotNetOpenAuth 在线文档现在似乎已关闭……抱歉没有链接到它们;显然它以前发生过)。

于 2013-08-03T03:13:05.850 回答