2013-04-14 128 views
1

我正在使用webApi並嘗試執行表單身份驗證。我的應用程序使用simpleMembership。出於某種原因,我的控制器恢復到我的Windows憑據,檢查,看看時,它應該只使用simpleMembership對我的應用程序的數據庫,如果請求進行認證:爲表單身份驗證配置WebAPI

enter image description here

我已經禁用的Windows和匿名身份驗證在應用程序和我的applicationhost配置文件中...還有什麼需要做的?

回答

3

在你的API控制器,當你需要強制認證(非公開控制器或動作),你需要在任的控制器或動作級使用

[Authorize] 

...屬性,根據您的需要。 請注意,這是System.Web.Http實現的屬性而不是一個在System.Web.Mvc

您對API的控制器一個檢查Thread.CurrentPrincipal.Identity.IsAuthenticated代替HttpContext.User.Identity的.Is認證爲System.Web.Mvc.AuthorizeAttribute。

您需要填充每個請求這個校長,通常使用DelegatingHandler,這是這個環節上解釋說:

http://www.piotrwalat.net/basic-http-authentication-in-asp-net-web-api-using-message-handlers/

在上面的鏈接,筆者使用基本HTTP認證,這在每個請求上以純文本傳輸憑證;但是您可以實施自己的身份驗證策略,以便填充滿足您的需要的校長。

+0

謝謝Raciel。我使用[授權]修飾了大多數方法,但所有用戶都應該可以訪問登錄/註冊,所以我打算不使用這些方法修飾。這聽起來是對的嗎?而且 - 你有一個我如何填充校長的例子嗎?這只是手動設置處理程序(一行代碼)中的Thread.CurrentPrincipal.Identity? – RobVious

+0

當然,公共方法不應該穿[授權]。 我在答覆中提供的鏈接顯示您如何填充校長,查線#16 你想這樣做的DelegatingHandler,要麼使用一些基本的東西,就好像需要基本的HTTP認證或更復雜的東西。 對於基本的HTTP驗證,你可以看看這個:http://leastprivilege.com/2012/10/23/mixing-mvc-forms-authentication-and-web-api-basic-authentication/ –