0

的Web API的應用程序我有這樣的解決方案:身份驗證只是在MVC一次使用asp.net身份

enter image description here

我需要在ASP.NET MVC網站,在Web API 2.0只進行一次認證(我的意思是我不必檢查用戶名和密碼在MVC網站上是否正確,然後再次在Web Api上檢查它們)。

我真的認爲AngularJS和ASP.NET MVC是不是一個很好的夫婦。但是,就是這樣! ASP.NET MVC網站和Web Api可能位於不同的服務器上。

在這一瞬間我就可以在MVC應用程序驗證,我不能「通」的認證上的web API。我正在使用ASP.NET標識的默認代碼。所以,我的即時通訊類startup我:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
    LoginPath = new PathString("/Account/Login"), 
    Provider = new CookieAuthenticationProvider 
    { 
     // Enables the application to validate the security stamp when the user logs in. 
     // This is a security feature which is used when you change a password or add an external login to your account. 
     OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
      validateInterval: TimeSpan.FromMinutes(30), 
      regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
    } 
});    

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

所以,我怎麼能「自動」認證的網絡API,一旦我已經通過驗證的asp.net的MVC?

謝謝

UPDATE

我已經更新了圖像。 在這一刻,我做了一些來自MVC應用程序的請求。但是這些請求不需要認證。其他一些請求從angularjs到達,在這裏我需要身份驗證。 在這一刻我認證MVC應用程序中的用戶。

回答

0

如果我有這個權利,那麼你的問題有一個非常簡單的解決方案。

用戶在MVC應用程序,這意味着到MVC控制器和操作方法的任何調用保護的認證,並已成功驗證對。

在您的MVC應用程序中,您正在向您的WEB API發出請求。

在Web API需要以某種方式保護自己的資源,從傳入的請求,並考慮到只有你的MVC應用程序應負責制定這些要求,你應該實現你的WEB API中的客戶端機密的OAuth流。

將其視爲將您的MVC應用註冊爲您的WEB API的使用者。

從MVC應用程序每次調用網頁API,提供它的clientid和保密您的Web API服務了它的資源之前驗證。

從查看Web API的角度來看它不關心用戶是誰,只關心那些試圖訪問其資源的應用程序。

如果一個應用程序不能提供一個祕密,那麼他們就不能訪問。

*編輯*

在這樣一個場景,你的Web API不是面向公衆的,只需要身份驗證訪問其資源,您的客戶端瀏覽器不應該直接談話的API。

你可以使用基於令牌的認證,即一旦通過令牌端點客戶端瀏覽器傳遞到您API的每個請求的報頭的承載令牌認證。

然而,這將意味着你傳遞一個訪問令牌到瀏覽器,我不認爲這是偉大的安全。

這就是爲什麼我會重新開始客戶端的瀏覽器永遠只能做的MVC應用程序作爲其中的電話不能被操縱的服務器和所有的訪問令牌上的生活調用不能被截獲。

+0

嗨@Derek ...你是正確的部分:在MVC應用程序,我有保護控制器和I已成功驗證那裏。但是我的web API必須關心用戶的身份驗證!因此,將您的MVC應用程序註冊爲您的WEB API的使用者是不夠的 – Ciccio

+0

什麼是調用Web API?是從MVC應用程序的範圍中調用的?在其操作方法中,還是通過AngularJS從客戶端瀏覽器向api發出請求?你的圖表表明否則。 – Derek

+0

這取決於上下文......在這個時候,前端和後端在同一臺機器上AngularJs將直接調用Web API。在後端將被移動到不可見的服務器的時刻,angularJs將通過MVC調用web api。在這一刻,你是對的,我的圖是錯的...(我更正) – Ciccio