【问题标题】:Kerberos challenge for every request每个请求的 Kerberos 挑战
【发布时间】:2020-11-05 09:36:39
【问题描述】:

我使用 Kerberos 身份验证在 IIS(版本:10)中托管了几个应用程序。并且所有 Web 应用程序都配置在一个网站下。

仅启用 Windows 身份验证。

我观察到每个请求我得到 401,然后是 200。 第一次调用的期望值是 401,然后从同一个客户端到同一个 api 的所有后续调用都是 200,因为它已经过身份验证。

我尝试应用 authPersistSingleRequest="false" 进行 Windows 身份验证。 注意:这是参考3 requests for every resource (2 x 401.2 and 1 x 200) in a windows authenticated asp.net mvc app

然后我可以看到一个 api(Web 应用程序)现在正在按预期工作。而且我们仍然对其他 api 有问题(在不同的 Web 应用程序中)。

任何人都可以帮助我了解除了我上面提到的之外是否还有其他设置可以使其按预期工作。

【问题讨论】:

    标签: iis kerberos kerberos-delegation


    【解决方案1】:

    确保您使用应用程序池正确配置了 spn 帐户。

    打开 IIS 管理器并选择配置编辑器。

    在下拉菜单中选择 system.webServer > security > authentication > windowsAuthentication

    将 useAppPoolCredentials 设置为 True。

    在 Internet Explorer 中,将站点地址添加到受信任的网站列表中,并在“用户身份验证”中指定使用当前用户名和密码自动登录 -> 在“受信任区域站点”设置中登录。

    更多详情请参考以下链接:

    Troubleshoot Kerberos failures in Internet Explorer

    【讨论】:

    • SPN 已配置,甚至 system.webserver 配置也已按上述设置。网站运行良好,并且能够进行身份验证。但唯一困扰我的是我无法找出为什么每次请求都会得到 401(然后是 200)。我希望 401 仅用于会话中的第一个请求。后续请求必须直接得到200。
    • @FalconFrancis 您可以尝试在 Internet Explorer 中的受信任站点下添加 URL。
    • 我会试试的。我还注意到该问题仅发生在 chrome 浏览器中。当我从浏览器点击 url 时,我得到了预期的结果。我正在检查这种行为是否一致。
    • @FalconFrancis 尝试设置 link1 Kerberos 和 NTLM 请求/响应流,值得注意的是绝大多数 HTTP 客户端 (浏览器、应用程序等)在首次请求资源时不会发送任何凭据。第一个请求是匿名的。 link
    最近更新 更多