2016-03-03 53 views
1

授权我在AngularJS和的WebAPI一个新手,我期待创造我的组织,成为锅炉板制造涉及快速的SPA一个SPA模板:AngularJS SPA与WebAPI和MVC应用程序。如何建立与OWIN

  1. WebAPIs 2 - 纯粹用于数据检索和插入目的和
  2. MVC 5控制器 - 用于获取视图。基本上,所有的GET请求,并没有别的
  3. MVC浏览:将最终被加载到NG-视图占位
  4. AngularJS控制器部分景色 - 所有MVC的意见将被捆绑到其各自单独的角度控制器。
  5. ASP.NET身份2:对于用户存储和角色
  6. OWIN安全:对于我WebAPIs和MVC控制器的令牌和基于cookie的授权。

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

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

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

enter image description here

WebAPIs和MVC控制器现在会坐在1层,但建筑的流应该让他们分开。现在

,我的问题是

  1. 是这种架构合理构建SPA
  2. [授权]我的MVC控制器属性能够识别和破译WEBAPIs后返回的饼干考虑到WebAPis和MVC应用程序将来可能处于两个不同的层次。

回答

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存储库)。或者,您可以设置一个单独的授权服务器,该服务器在依赖于它的不同应用程序之间进行调解。

希望这会有所帮助!