【问题标题】:Why is my web service returning error 401 when using Windows Authentication?为什么我的 Web 服务在使用 Windows 身份验证时返回错误 401?
【发布时间】:2019-12-08 07:23:57
【问题描述】:

我正在设置一个仅适用于特定 Active Directory 中的用户的 Web 服务。不幸的是,我遇到了错误 401 - 未经授权。

我尝试过的事情:

  1. 我最初尝试配置 IIS 和 web.config 文件以向 Active Directory 中的用户授予访问权限,但我无法使其正常工作。

  2. 接下来,我决定退后一步,配置 IIS 和 web.config 文件以向所有用户授予访问权限。令人惊讶的是,这也不起作用。

当我调用网络服务时会发生什么:

当我调用 Web 服务时,我立即收到错误消息“401 - 未经授权:由于凭据无效,访问被拒绝。您无权使用您提供的凭据查看此目录或页面。” 我没有收到要求提供任何凭据的弹出窗口,所以如果有问题请告诉我。

IIS 中的相关设置:

  • 匿名身份验证已禁用
  • Windows 身份验证已启用
  • 授权规则设置为允许所有用户

--

以下是我的 web.config 文件中的相关代码行:

<system.webServer>
...
    <security>
        <authorization>
            <remove users="*" roles="" verbs="" />
            <add accessType="Allow" users="*" />
        </authorization>
    </security>
  </system.webServer>

您可以从代码中看到我允许所有用户访问(users="*"),但这仍然给我 401 错误。

感谢您的帮助。

【问题讨论】:

    标签: windows web-services iis active-directory config


    【解决方案1】:

    你如何调用网络服务?

    401 实际上是 Windows 身份验证的正常第一步。此处描述了整个身份验证流程:Windows Authentication HTTP Request Flow in IIS

    简而言之,它会以 401 响应并告诉您它接受 Windows 身份验证。然后客户端(通常是浏览器)使用正确的身份验证重新发送请求。浏览器会为您执行此操作。

    由于您提到这是一项网络服务,我假设您正在自己处理请求。所以关于如何解决这个问题的答案取决于你如何调用你的网络服务。但通常有一种方法可以明确告诉它发送 Windows 凭据(在第一次尝试时,或者在 401 质询之后自动发送)。

    【讨论】:

    • 在我的情况下,必须使用不同的用户设置虚拟目录。这是在“高级设置 -> 物理路径凭据 -> ...”中。
    猜你喜欢
    • 2019-05-03
    • 2021-07-01
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    相关资源
    最近更新 更多