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