如何开始使用OAuth来保护Web API应用程序
本文关键字:OAuth 保护 Web 应用程序 API 何开始 开始 | 更新日期: 2023-09-27 18:22:20
我有一个Web API应用程序,我知道OAuth将是API的标准安全模型,其中身份验证服务器将负责生成授权令牌,以便用户可以发送到我们的服务器并使用服务。
我对此很陌生,但我了解其中的角色:
- 资源所有者
- 客户
- 资源服务器
- 授权服务器
但OAuth在实践中究竟是什么,而不是在理论上?它是.NET库吗?这是由一家独立的公司提供的服务吗?这是我可以在本地开发机器上配置的东西吗?
如何开始使用OAuth来保护Web API应用程序的安全?
OAuth是一个协议;当前版本是OAuth 2.0。关于您的问题,该链接列出了该协议在各种技术中的几种实现。为了与.NET Web API一起使用,您可能对DotNetOpenAuth感兴趣,它提供了OAuth 1和OAuth 2的实现。
我现在正在一个应用程序中使用DotNetOpenAuth来保护.NET Web API的安全。我有一个扩展DelegatingHandler
的OAuth2Handler
,它在传入请求到达任何控制器之前插入到Web API管道中。OAuth2Handler
执行以下操作:
- 实例化DotNetOpenAuth
ResourceServer
- 调用读取和解密访问的
ResourceServer.GetPrincipal()
令牌(由AuthorizationServer
在其他地方发布,并返回OAuthPrincipal
(在我的例子中,我正在读取DotNetOpenAuth实现允许您传递的额外数据,并创建ClaimsPrincipal
。) - 将包含从访问令牌读取的用户信息的
IPrincipal
分配给线程的user属性和当前HTTP上下文,以便它可以从服务控制器中的ApiController.User
属性获得:httpContext.User = Thread.CurrentPrincipal = principal;
老实说,让这一切正常工作(例如,设置授权服务器、资源服务器、证书等)并非易事。不幸的是,在DotNetOpenAuth网站上似乎没有一个好的指南。如果你走这条路,你还有其他一些任务要做:
-
实现
IAuthorizationServer
-这是由DotNetOpenAuth,允许您插入库并使用他们发布OAuth2访问令牌的实现。您还需要实现INonceStore
和ICryptoKeyStore
,这是我使用EntityFramework上下文进行存储的 -
配置证书-
AuthorizationServer
和ResourceServer
分别使用证书加密/解密访问令牌,确保它们只能相互访问。我构建了一些自定义配置,以便可以在授权服务器应用程序和Web API服务(资源服务器)的web.config
文件中管理此配置 - 管理刷新令牌-首次从授权服务器请求访问令牌时,您将获得OAuth2刷新令牌和访问令牌(取决于您的配置)。服务使用的访问令牌应该是短暂的。刷新令牌用于获取更多访问令牌。刷新令牌应该保密(无论这在您的场景中意味着什么)。对我来说,这意味着刷新令牌永远不会暴露在我的web应用程序中的客户端javascript中
我希望这能帮助您了解如何开始使用OAuth和.NETWebneneneba API。下面是一篇博客文章,展示了其中的一些步骤。这个SO回答提供了图片客户端的更多高级细节。
(DotNetOpenAuth在线文档现在似乎已经关闭……很抱歉没有链接到它们;显然以前也发生过这种情况)。