【问题标题】:How to get started with OAuth to secure a Web API application?如何开始使用 OAuth 来保护 Web API 应用程序?
【发布时间】:2013-07-13 13:40:55
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# security oauth asp.net-web-api


    【解决方案1】:

    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 分配给线程的用户属性和当前HTTP 上下文,以便可以从服务控制器中的ApiController.User 属性获得它:httpContext.User = Thread.CurrentPrincipal = principal;

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

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

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

    (DotNetOpenAuth 在线文档现在似乎已关闭……抱歉没有指向它们的链接;显然它有 happened before)。

    【讨论】:

    • 有机会分享一些源代码。我已经玩了几个小时了,它有点像 PITA。 DotNetOpenAuth 文档在这个特定实例中没有多大帮助。
    猜你喜欢
    • 2015-02-07
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 2021-10-14
    • 2014-05-18
    • 1970-01-01
    相关资源
    最近更新 更多