带有Windows身份验证的WebAPI返回401未授权

mol*_*04x 5 authentication iis windows-authentication asp.net-web-api

我正在设计一个WebAPI服务,它必须对客户端的AD服务器使用Windows身份验证.我正在尝试在本地测试这个并且不断收到401错误,然后服务器因为凭据无效而根本不允许请求.我正在IIS 8.5本地进行本地测试(安装在Windows 8.1盒子上).在IIS中,我使用以下提供程序启用了Windows身份验证:

  • NTLM
  • 谈判
  • 协商:Kerberos的

此外,我禁用了内核模式身份验证,因为当我启用内核模式和协商时,IIS会对我大喊:kerberos.扩展保护也被禁用.

在我的配置中,我将授权规则设置为允许所有用户,并且身份验证模式设置为"none":

  <system.web>
    <authentication mode="None" />
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
Run Code Online (Sandbox Code Playgroud)

然后在webapi的控制器中,我将[Authorize]属性放在所有控制器上:

[Authorize]
[RoutePrefix("api/Workorder")]
public class WorkorderController : ApiController
{
     ...
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么每次我尝试访问API方法时都会遇到401挑战吗?

提前致谢!


编辑:我改为<authentication mode="None" />Windows,这没有帮助.我也从我的Windows身份验证提供程序中删除了NTLM,因为我的计算机不在域上,因此NTLM不起作用.

我还通过fiddler观察了请求流,我能够看到一系列4个请求,每个请求都尝试使用Negotiate方法进行身份验证,并且似乎有来回传递的kerberos票证.

Man*_*ndy 0

我今天遇到了同样的问题。我更改了 Web API 项目属性,将“匿名身份验证”更改为“启用”,将“Windows 身份验证”更改为“禁用”。它就像魅力一样起作用!