我正在使用webApi并尝试实现表单身份验证。我的应用程序使用simpleMembership。出于某种原因,我的控制器正在恢复我的Windows凭据以检查并查看请求是否经过身份验证,何时只应对我的应用程序数据库使用simpleMembership:
我在应用程序和我的applicationhost配置文件中禁用了Windows和匿名身份验证...还有什么需要做的?
答案 0 :(得分:3)
在您的API控制器中,当您需要强制执行身份验证(非公共控制器或操作)时,您需要使用
[Authorize]
...根据您的需要在控制器或操作级别进行属性。 请注意,这是在System.Web.Http上实现的属性,而不是System.Web.Mvc中的属性
您用于Api控制器的那个检查Thread.CurrentPrincipal.Identity.IsAuthenticated而不是HttpContext.User.Identity.IsAuthenticated为System.Web.Mvc.AuthorizeAttribute。
您需要在每个请求上填充此Principal,通常使用DelegatingHandler,在此链接中对此进行了解释:
http://www.piotrwalat.net/basic-http-authentication-in-asp-net-web-api-using-message-handlers/
在上面的链接中,作者正在使用基本HTTP身份验证,它在每个请求上以纯文本形式传输凭据;但是您可以实现自己的身份验证策略,以便填充Principal,这就是您所需要的。