簡體   English   中英

帶有WebAPI和MVC應用程序的AngularJS SPA。 如何使用OWIN設置授權

[英]AngularJS SPA with WebAPI and MVC application . How to setup Authorization with OWIN

我是AngularJS和WebAPI的新手,我希望為我的組織創建SPA模板,該模板將成為制作快速SPA的樣板,其中包括:

  1. WebAPI 2-僅用於數據檢索和插入目的,以及
  2. MVC 5控制器 -用於獲取視圖。 基本上,所有GET請求都沒有
  3. MVC視圖 :部分視圖將最終加載到ng-view占位符中
  4. AngularJS控制器 -所有MVC視圖將綁定到它們各自的單獨Angular控制器。
  5. ASP.NET Identity 2 :用於用戶存儲和角色
  6. OWIN安全性 :用於基於令牌和cookie的WebAPI和MVC控制器的授權。

在startup.Auth.cs中。 我正在使用以下授權選項:

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

我創建了一個小圖來解釋數據流

在此輸入圖像描述

目前,WebAPI和MVC控制器將位於1層,但體系結構應允許將它們分開。

現在,我的問題是

  1. 這種架構對於構建SPA是否合理?
  2. 考慮到WebAPis和MVC應用程序將來可能位於兩個不同的層上,我的MVC控制器上的[Authorize]屬性是否能夠識別和破譯WEBAPI在身份驗證后返回的cookie。

[Authorize]屬性檢查是否在MVC和Web API都使用的Request對象上設置了IsAuthenticated屬性。 該屬性由身份中間件設置,如您在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存儲庫中)。 另外,您可以設置一個單獨的授權服務器,該服務器在依賴它的不同應用程序之間進行中介。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM