0

我currenty工作的一個項目是由兩個部分組成:MVC和的WebAPI單點登錄

www.domain.com
這是一個MVC 5網站使用認證通過Owin.Security

api.domain.com
這是包含僅供內部使用的API一個的WebAPI項目。

我需要做的是在兩個站點之間設置單點登錄,以便用戶在MVC站點上登錄時,他將能夠對WebAPI的方法標記爲[Authorize]進行認證請求。

我已經建立了兩個產品具有相同的machineKey:

而且在MVC網站,我註冊在啓動時執行以下操作:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationType = "ApplicationCookie", 
       LoginPath = new PathString("/Login"), 
       CookieDomain = ".domain.com" 
      }); 

然而,這是行不通的。我可以在網站上對用戶進行身份驗證 - 但是當我向API發出請求時,我會收到401(未經授權)。

你們中的任何一個人都可以幫我解決我失蹤的問題嗎?

我有一個看看這篇文章: https://msdn.microsoft.com/en-us/library/eb0zx8fc(v=vs.100).aspx

但因爲我沒有使用表單驗證我不知道有什麼好它會做我:(

我想我我只是缺少一個小的基本片 - 但我現在還不能完全找到它:)

我現在我可以通過合併我的網站API項目(以便我的API控制器在MVC中網站) - 但我真的想避免這種情況,讓他們在不同的子域上運行。

謝謝。

+0

IMO。 www.domain.com是主要的域名,而api.domain.com是一個子域名,所以CookieDomain只會在它被佔據的地方工作。 MVC 5或更早版本的MVC 3中的API項目應該用作此路線。 www.domain.com/api/{ControllerName} 如果您在項目中使用添加WebAPI。它實際上會爲你創造它並支撐它。如果我是正確的,你建立了一個從解決方案項目中分離出來的Web API,並試圖將它們連接在一起? – Aizen

+0

正確 - 但我真的不希望將WebAPI控制器,模型,DTO等作爲我的Web解決方案的一部分 - 如果可能的話。 – JBuus

+0

我試過下面的方法:http://stackoverflow.com/questions/29318201/asp-net-identity-cookie-and-subdomains 但我仍然無法得到它的工作。 Cookie在子域上存在就好 - 但它不用於驗證:( – JBuus

回答

0

我最終找到了答案 - 和所有優秀的答案一樣,這個答案很簡單。 一切都在我的設置工作就像一個魅力 - 但在WebApiConfig.cs文件有一個討厭的小線:

config.SuppressDefaultHostAuthentication(); 

告訴的WebAPI只使用承載令牌認證。 刪除這條線解決了我所有的問題,使我的一天:)