AngularJS + ASP.NET Web API + ASP.NET MVC 身份驗證
我是 AngularJS 的新手,並試圖為我的新 Web 應用程序評估它。
要求:
我將擁有一個 ASP.NET Web API,它也會被 Android、iPhone 和 Web 應用程序 (ASP.NET MVC) 使用。ASP.NET Identity 將在 Web API 中實現。這三個應用程序都會呼叫 Web API 的 login 方法來獲取 auth token。
問題:
我的問題是如何讓 ASP.NET MVC伺服器端身份驗證工作(與 Web API 同步,因此我不必單獨登錄 ASP.NET MVC),而 Angular 呼叫以獲取 HTML 模板/視圖、JavaScript 文件或其他資源。我瀏覽了很多關於 AngularJS 的文章和部落格,但仍然找不到符合我要求的安全模型。
可能的解決方案:
直接對 ASP.NET MVC 應用程序而不是 Web API 進行登錄呼叫是個好主意嗎?ASP.NET MVC 應用程序將呼叫 Web API 進行登錄,一旦通過身份驗證,將身份驗證令牌保存在會話中並創建一個FormsAuthentication cookie和 cookie 數據中保存加密的身份驗證令牌。此外,在 HTML 中的某處設置ng-init 中的 auth 令牌,以使該令牌在 AngularJS 範圍內。現在,當 AngularJS 嘗試呼叫 ASP.NET MVC 應用程序以獲取 HTML 時,然後通過將 cookie 解密數據與會話中的身份驗證數據匹配來對使用者進行身份驗證/授權。此外,AngularJS 將在標頭中發送 auth 令牌,以直接呼叫 Web API 方法,以便所有後續呼叫通過 Web API 進行數據操作。
我用一個非常嚴格的解決方案解決了這個問題。我只是確保在 WebApiConfig 的 Register 方法中有以下兩行程式碼:
config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));而已。現在,我的 MVC 控制器查找會話 cookie 以進行授權,而我的 Web API 控制器在每個請求的標頭中查找身份驗證令牌。此外,Web API 本身會發送一個令牌 (JSON) 和一個會話 cookie 以響應登錄/身份驗證請求,例如
http:\\www.mydomain.com\token.所以現在我將我的登錄請求發送到 Web API 以獲取令牌以及會話 cookie。每個請求都會自動發送會話 cookie,因此我不必擔心 MVC 控制器的授權。對於 Web API 呼叫,我在每個請求的標頭中發送身份驗證令牌,因為 Web API 控制器不關心隨請求發送的會話 cookie。