You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制IIS Windows Security(NTLM)请求完整域账号密码而非Windows Hello?

解决方案:Azure AD环境下恢复Windows身份验证自动凭据转发

IIS配置调整

  • 调整身份验证提供商顺序:打开IIS管理器,定位到目标站点→身份验证→Windows身份验证→点击右侧「高级设置」,在提供商列表中把NTLM移到Negotiate上方。这样浏览器会优先尝试NTLM身份验证,跳过Windows Hello的自动触发流程,直接唤起传统域账号密码弹窗(或自动转发已缓存的域凭据)。
  • 禁用Kerberos约束委派(按需):如果站点之前配置过Kerberos委派,在Windows身份验证的设置里取消「启用Kerberos」选项。Azure AD环境下Kerberos的委派逻辑和本地AD差异较大,保留可能导致自动凭据转发失效。
  • 配置Azure AD服务主体名称(SPN):如果必须使用Kerberos,需要域管理员在Azure AD中为站点注册正确的SPN(格式为HTTP/<站点完整域名>),绑定到对应的服务主体。这一步确保Kerberos能正确映射到Azure AD身份。

.NET Framework 4.8代码层面处理

  • 强制NTLM优先级(web.config配置):在站点的web.config中添加/修改以下节点,明确指定身份验证提供商顺序并启用内核模式验证:
<system.web>
  <authentication mode="Windows" />
</system.web>
<system.webServer>
  <security>
    <authentication>
      <windowsAuthentication enabled="true" useKernelMode="true">
        <providers>
          <clear />
          <add value="NTLM" />
          <add value="Negotiate" />
        </providers>
      </windowsAuthentication>
    </authentication>
  </security>
</system.webServer>
  • 手动触发凭据验证(代码逻辑):如果配置调整后仍未生效,可在Global.asax的Application_AuthenticateRequest事件中添加逻辑,强制唤起NTLM验证:
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
    var context = HttpContext.Current;
    if (context.Request.IsAuthenticated)
    {
        if (context.User.Identity is WindowsIdentity winIdentity && !winIdentity.IsAuthenticated)
        {
            context.Response.StatusCode = 401;
            context.Response.AddHeader("WWW-Authenticate", "NTLM");
            context.Response.End();
        }
    }
}

关键注意事项

  • 所有配置需要域管理员配合确认:Azure AD可能有全局身份验证策略限制NTLM使用,需先确认该策略允许站点使用NTLM。
  • 隐私/无痕模式下自动凭据转发本来就会失效:浏览器在无痕模式下会禁用本地凭据缓存,所以正常场景下无需测试无痕模式,重点验证普通模式的自动登录效果。
  • 若需保留Windows Hello:可让域管理员配置Azure AD无缝SSO,实现Windows Hello凭据与Azure AD身份的自动映射,这样用户无需手动输入密码也能自动登录。

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 08:07:15