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

The*_*ght 16 c# security oauth asp.net-web-api

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

我对此很新,但我理解所涉及的角色:

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

但OAuth究竟在实践中是什么,而不是理论上的?它是一个.NET库吗?这是一家由独立公司提供的服务吗?这是我可以在我的本地开发机器上配置的东西,看看它是如何工作的?

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

jan*_*sen 17

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

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

  1. 实例化DotNetOpenAuth ResourceServer
  2. ResourceServer.GetPrincipal()读取和解密访问令牌的调用(由其他地方发出AuthorizationServer并返回 OAuthPrincipal (在我的情况下,我正在读取DotNetOpenAuth实现允许您传递和创建的其他数据ClaimsPrincipal.)
  3. IPrincipal包含从访问令牌读取的用户信息包含到线程的User属性和当前HTTP上下文中,以便可以从ApiController.User服务控制器中的属性获取它: httpContext.User = Thread.CurrentPrincipal = principal;

老实说,让这一切工作(例如,设置授权服务器,资源服务器,证书等)并非易事.不幸的是,DotNetOpenAuth网站似乎没有一个好的指南.如果您走这条路线,这里还有一些其他任务:

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

我希望这有助于您深入了解如何开始使用OAuth和.NET Web API.这是一篇博客文章,展示了其中的一些步骤.这个SO答案给出了图片客户端的更多高级细节.

(DotNetOpenAuth在线文档现在似乎已经失效了...抱歉没有链接到它们;显然它之前已经发生过).