我正在设计一个WebAPI服务,它必须对客户端的AD服务器使用Windows身份验证。我正在尝试在本地测试这个并且不断收到401错误,然后服务器因为凭据无效而根本不允许请求。我正在IIS 8.5本地进行本地测试(安装在Windows 8.1盒子上)。在IIS中,我使用以下提供程序启用了Windows身份验证:
此外,我禁用了内核模式身份验证,因为当我同时启用内核模式和协商时,IIS会对我大喊:kerberos。扩展保护也被禁用。
在我的配置中,我将授权规则设置为允许所有用户,并且身份验证模式设置为“none”:
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
然后在webapi的控制器中,我将[Authorize]
属性放在所有控制器上:
[Authorize]
[RoutePrefix("api/Workorder")]
public class WorkorderController : ApiController
{
...
}
有人可以解释为什么每次我尝试访问API方法时都会遇到401挑战吗?
提前致谢!
<小时/> 的修改: 我将
<authentication mode="None" />
更改为Windows,但这没有用。我还从我的Windows身份验证提供程序中删除了 NTLM ,因为我的计算机不在域上,因此NTLM无效。
我还通过fiddler观看了请求流,我能够看到一系列4个请求,每个请求都尝试使用 Negotiate 方法进行身份验证,并且似乎有kerberos票据被传回类推。
答案 0 :(得分:0)
我今天遇到了同样的问题。我将Web API项目属性,匿名身份验证更改为已启用,将Windows身份验证更改为已禁用。它就像魅力一样有效!