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

本文关键字:OAuth 保护 Web 应用程序 API 何开始 开始 | 更新日期: 2023-09-27 18:22:20

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

我对此很陌生,但我了解其中的角色:

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

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

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

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

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

我现在正在一个应用程序中使用DotNetOpenAuth来保护.NET Web API的安全。我有一个扩展DelegatingHandlerOAuth2Handler,它在传入请求到达任何控制器之前插入到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访问令牌的实现。您还需要实现INonceStoreICryptoKeyStore,这是我使用EntityFramework上下文进行存储的
  • 配置证书-AuthorizationServerResourceServer分别使用证书加密/解密访问令牌,确保它们只能相互访问。我构建了一些自定义配置,以便可以在授权服务器应用程序和Web API服务(资源服务器)的web.config文件中管理此配置
  • 管理刷新令牌-首次从授权服务器请求访问令牌时,您将获得OAuth2刷新令牌和访问令牌(取决于您的配置)。服务使用的访问令牌应该是短暂的。刷新令牌用于获取更多访问令牌。刷新令牌应该保密(无论这在您的场景中意味着什么)。对我来说,这意味着刷新令牌永远不会暴露在我的web应用程序中的客户端javascript中

我希望这能帮助您了解如何开始使用OAuth和.NETWebneneneba API。下面是一篇博客文章,展示了其中的一些步骤。这个SO回答提供了图片客户端的更多高级细节。

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