c# - 使用外部 Web API 提供的 OAuth Bearer Token 进行授权

标签 c# model-view-controller asp.net-web-api owin bearer-token

我发布这篇文章是希望收到一些反馈/建议以及关于我最近几天一直在努力解决的问题的信息。首先,我将简要介绍一下该项目。

解决方案中有 2 个应用程序:

  1. WebAPI 资源和授权服务器 - 使用 OWIN(托管在 IIS 中)和 ASP.NET Identity 在正确登录时发出身份验证 token ,然后允许对各种 Controller 的请求。

  2. MVC 客户端应用程序 - 目前还没有授权(直到我弄清楚),但会调用 WebAPI 资源服务器以获取所有数据。这些调用只会通过客户端应用程序中 Controller 的操作进行,而不是客户端 AJAX 调用。

客户端应用程序没有自己的数据源。所有信息都存储在 WebAPI 服务可以访问的数据库中,因此基本上,如果它们提供了正确的凭据并且客户端应用程序收到了不记名 token ,我需要提供一种方法让应用程序将它们视为已授权。

  • 处理此问题的最佳方法是什么?
  • 是否可以在客户端配置 OWIN 以使用 OAuth 服务器的设置?我是不是找错了树,我是否只需要使用 HTTPClients?
  • 我可以反序列化不记名 token 并将其存储在 session 中,并且 然后编写我自己的授权提供商在客户端检查这些?

我最初担心的是我在滥用不记名 token 并试图将它们拼凑成一个不理想的解决方案。到目前为止,我发现的所有外部授权示例通常都涉及调用由 Google/Facebook/Twitter 托管的提供商来检查用户是否是他们所说的人,然后继续在他们的系统中创建用户记录。我的应用程序无法执行此操作。

关于安全性,我计划引入过滤器,通过提供标识符和密码以及 IP 验证来验证请求是否来自客户端应用程序。

我意识到这可能有点开放性,但我将不胜感激任何建议。该项目的范围是 Web 服务是唯一可以访问数据库的东西。 MVC 客户端应用程序将托管在不同的服务器上,该服务将只接受来自该客户端应用程序的请求。

最佳答案

您无需访问 MVC 应用中的数据源来验证不记名 token 。基本上,您可以通过以下方式完成,

  • MVC 应用程序从 webapi 请求 access_token 并将其传递给 UI 客户端(假设是浏览器)。

  • 浏览器将 access_token 存储在 cookie/localstorage 中,并将它们发送到 MVC 应用以用于所有后续请求。

  • 在 MVC 应用程序中创建一个 ActionFilter 以验证来自浏览器的请求是否具有 header 中提供的 token 。如果不是,则拒绝该请求。

  • MVC 应用将 Authorization header 中的 access_token 传递给 webapi。

  • 对所有通信使用 HTTPS(在 MVC 应用 <-> 客户端和 MVC 应用 <-> WebAPI 之间)

您可以进一步混淆或加密从 MVC 应用程序端的 WebAPI 获取的 access_token 以提高安全性,但随后您必须将解密版本发送回 WebAPI。

关于c# - 使用外部 Web API 提供的 OAuth Bearer Token 进行授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27898235/

相关文章:

c# - 限制 RAM 的使用。 (C#.NET)

c# - 为什么我的触发器以空白控件结束?

c# - 如何判断DataTable是否为null,未初始化

java - Hibernate Spring - @OneToMany - 外键未存储在数据库中

Java Spring Web 应用程序 - 未找到 HTTP 请求的映射

c# - 部署到 prod 后没有 MediaTypeFormatter 可供读取

c# - 通过标签C#读取xml标签

cocoa - Cocoa Mac OS X 应用程序中 Controller 对象数量的标准是什么?

c# - 使用 Autofac 聚合服务来共享依赖项

c# - MVC 和 WebApi Controller 是否共享路由表?