AngularJS SPA与WebAPI和MVC应用程序。如何使用OWIN设置授权

时间:2016-03-03 20:06:49

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

我是AngularJS和WebAPI的新手,我正在为我的组织创建一个SPA模板,该模板成为制作快速SPA的锅炉板:

  1. WebAPIs 2 - 仅用于数据检索和插入目的,
  2. MVC 5控制器 - 用于获取视图。基本上,所有GET请求都没有其他内容
  3. MVC视图:最终将加载到ng-view占位符的部分视图
  4. AngularJS控制器 - 所有MVC视图都将绑定到各自的Angular控制器。
  5. ASP.NET身份2 :适用于用户存储和角色
  6. OWIN安全:用于基于令牌和Cookie的WebAPI和MVC控制器授权。
  7. 在startup.Auth.cs。我使用以下授权选项:

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

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

    enter image description here

    现在,WebAPI和MVC控制器将分为1层,但架构应允许它们分开。

    现在,我的问题是

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

1 个答案:

答案 0 :(得分:0)

[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使用它来执行[授权]检查。

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

希望这有帮助!