【问题标题】:AngularJS SPA with WebAPI and MVC application . How to setup Authorization with OWINAngularJS SPA 与 WebAPI 和 MVC 应用程序。如何使用 OWIN 设置授权
【发布时间】:2016-06-17 08:34:51
【问题描述】:

我是 AngularJS 和 WebAPI 的新手,我希望为我的组织创建一个 SPA 模板,该模板将成为制作快速 SPA 的样板,涉及:

  1. WebAPIs 2 - 用于纯粹的数据检索和插入目的以及
  2. MVC 5 控制器 - 用于获取视图。基本上,所有 GET 请求都没有其他内容
  3. MVC 视图:最终将加载到 ng-view 占位符中的部分视图
  4. AngularJS 控制器 - 所有 MVC 视图都将绑定到它们各自的 Angular 控制器。
  5. ASP.NET Identity 2:用于用户存储和角色
  6. OWIN 安全:用于我的 WebAPI 和 MVC 控制器的基于令牌和 cookie 的授权。

在 startup.Auth.cs. 我正在使用以下授权选项:

app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOAuthBearerTokens(OAuthOptions);

我创建了一个小图来解释数据流

WebAPI 和 MVC 控制器目前将位于 1 层,但架构应允许将它们分开。

现在,我的问题是

  1. 这种架构对于构建 SPA 是否合理
  2. 考虑到 WebAPI 和 MVC 应用程序将来可能位于两个不同的层上,我的 MVC 控制器上的 [Authorize] 属性是否能够识别和解密 WEBAPI 在身份验证后返回的 cookie。

【问题讨论】:

    标签: angularjs asp.net-mvc asp.net-web-api owin


    【解决方案1】:

    [Authorize] 属性检查是否在 MVC 和 Web API 使用的 Request 对象上设置了 IsAuthenticated 属性。此属性由 Identity 中间件设置,正如您在 startup.cs 文件中配置的那样。

    每个请求在到达 MVC 或 Web API 控制器之前都流经 OWIN 中间件管道。然后中间件可以改变,甚至完全处理请求。本质上,MVC 和 Web API 本身也是中间件,说“嘿,如果这个 url 请求匹配这个路由,我会处理它的家伙”。 ASP.NET Identity 是一个中间件,它不会完成请求,但会在将请求传递到管道之前对其进行更改。它检查请求中提供的凭据(在您的情况下,以 Web API 的不记名令牌的形式或以 MVC 的 cookie 的形式)。如果找到,则将身份验证详细信息添加到请求对象中,然后 Web API 或 MVC 使用该对象进行 [Authorize] 检查。

    您的应用只接受它自己分发的令牌的原因是因为它是使用只有应用本身知道的密钥加密的。如果您打算接受从不同应用程序加密的令牌,这些应用程序应使用相同的私钥进行加密。您可以在 web.config 中配置这些键。小心不要丢失这些密钥(例如,不要将包含这些详细信息的 web.config 添加到 git 存储库)。或者,您可以设置一个单独的授权服务器,在依赖它的不同应用程序之间进行调解。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2015-09-25
      • 2018-10-21
      • 2014-10-28
      • 2014-10-27
      • 1970-01-01
      • 2015-02-07
      • 2018-11-06
      • 1970-01-01
      • 2020-01-09
      相关资源
      最近更新 更多