我有一個MVC應用程序。它還使用Web API控制器公開的服務。Web API控制器和MVC控制器 - 身份驗證
對於MVC和Web API的託管環境都是IIS。 在IIS身份驗證模式下設置爲匿名。
HttpModule用於將用戶的標識和角色設置爲Thread和HttpContext對象。
做所有的MVC控制器被正確調用,但Web API控制器返回401未經授權的錯誤。
在兩個控制器中都使用適當的授權屬性。
下面是用戶將用戶設置爲線程和上下文對象的代碼。
var principal = new GenericPrincipal(new GenericIdentity(userName), roles);
// contextBase.User = principal;
HttpContext.Current.User = principal;
Thread.CurrentPrincipal = principal;
你是說我需要對WEB API控制器有不同的身份驗證機制嗎? – Sam 2015-02-23 20:46:25
不正確。在ASP.NET中,「會話」與「身份驗證」是分開的,這樣您就可以啓用另一個,但它們都是基於會話的,一般意義上(這就是我的意思)。即便如此,並非所有的MVC認證都是基於認證的形式。 MVC 5默認使用Identity,它完全獨立並且與表單驗證平行。 Cookie是否涉及也是一個單獨的概念,並且可以自行配置(儘管此時不推薦使用無Cookie會話/身份驗證)。 – 2015-02-23 20:51:25
@Sam:是的。這正是我所說的。他們可以均引用同一個用戶的持久性存儲,甚至使用相同的基礎架構(身份,在最新的公開版本),但與你的MVC網站進行身份驗證有沒有任何影響您的認證狀態與您的網絡API,反之亦然。他們使用完全不同的方法來確定請求「授權」與否。 – 2015-02-23 20:53:36