我有一个 Web API 应用程序,并且我知道 OAuth 将是 API 的标准安全模型,其中身份验证服务器将负责生成授权令牌,以便用户可以发送到我们的服务器并使用服务。
我对此很陌生,但我了解所涉及的角色:
- 资源所有者
- 客户
- 资源服务器
- 授权服务器
但是实际上 OAuth 到底是什么,而不是理论上呢?它是一个 .NET 库吗?它是由单独的公司提供的服务吗?我可以在本地开发机器上配置它并查看它是如何工作的吗?
如何开始使用 OAuth 来保护 Web API 应用程序?
我有一个 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。我有一个OAuth2Handler
which extendsDelegatingHandler
在传入请求到达任何控制器之前插入到 Web API 管道中。 OAuth2Handler
执行以下操作:
ResourceServer
ResourceServer.GetPrincipal()
解密访问令牌的调用( 由.AuthorizationServer
OAuthPrincipal
ClaimsPrincipal
IPrincipal
线程的用户属性和当前 HTTP 上下文,以便可以从ApiController.User
服务控制器中的属性获得: httpContext.User = Thread.CurrentPrincipal = principal;
老实说,让这一切正常工作(例如设置授权服务器、资源服务器、证书等)并非易事。不幸的是,DotNetOpenAuth 站点上似乎没有一个好的指南。如果您走这条路,还有一些其他任务摆在您面前:
IAuthorizationServer
- 这是 DotNetOpenAuth 提供的接口,允许您插入库并使用它们的实现来发布 OAuth2 访问令牌。您还需要实现INonceStore
,ICryptoKeyStore
我使用 EntityFramework 上下文进行存储。AuthorizationServer
人ResourceServer
都使用证书来加密/解密访问令牌,确保它们只能相互访问。我构建了一些自定义配置web.config
,因此我可以在我的授权服务器应用程序和我的 Web API 服务(资源服务器)的文件中管理此配置。我希望这有助于您对如何开始使用 OAuth 和 .NET Web API 有一个高层次的了解。这是一篇博客文章,展示了其中一些步骤。这个 SO answer提供了图片客户端的更多高级细节。
(DotNetOpenAuth 在线文档现在似乎已关闭……抱歉没有链接到它们;显然它以前发生过)。