加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 02:17:41 所属栏目:Windows 来源:网络整理
导读:我正在设计一个WebAPI服务,它必须对客户端的AD服务器使用 Windows身份验证.我正在尝试在本地测试这个并且不断收到401错误,然后服务器因为凭据无效而根本不允许请求.我正在IIS 8.5本地进行本地测试(安装在Windows 8.1盒子上).在IIS中,我使用以下提供程序启用
我正在设计一个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>

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

[Authorize]
[RoutePrefix("api/Workorder")]
public class WorkorderController : ApiController
{
     ...
}

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

提前致谢!

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

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

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读