2016-03-03 83 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存儲庫)。或者,您可以設置一個單獨的授權服務器,該服務器在依賴於它的不同應用程序之間進行調解。

希望這會有所幫助!