【问题标题】:Unable to get windows authentication to work through local IIS无法通过本地 IIS 获得 Windows 身份验证
【发布时间】:2011-09-12 11:28:52
【问题描述】:

所以我使用 Intranet 模板创建了一个新的 ASP.NET MVC 项目。 web.config 包含适当的值(例如<authentication mode="windows"/>)。

如果我使用 VS 网络服务器启动网络应用程序,一切看起来都很好 - 该页面显示了我的 Windows 域和用户名等等。但是,这在 Opera 和 Safari 以及 IE 和 FF 中有效,这对我说它根本没有使用 Windows 身份验证(因为据我所知,这在除 IE/FF 之外的任何浏览器中都不起作用)。

下一步是让它通过本地 IIS 运行。我创建了一个主机文件条目,将 www.mysite.mydomain 指向 127.0.0.1。所以在 IIS 中,我创建了一个绑定到 www.mysite.mydomain 的网站,并启用 Windows 身份验证并禁用匿名身份验证。

我已设置 IE 和 FF 以启用 Windows 身份验证,如下所示:

IE

  1. 将 URL 添加到 Intranet 组
  2. 确保在高级设置中启用 Windows 身份验证

FF

将“www.mysite.mydomain”放入 network.automatic-ntlm-auth.trusted-uris 配置设置中。

但是当我在 IE / FF 中拨打 www.mysite.mydomain 时,我会收到登录提示。有趣的是,即使我在这里输入 Windows 登录信息,它仍然会失败并再次显示登录提示。

我们这里没有活动目录,但我的理解是它应该适用于本地帐户。

我想不出我还需要做什么。有什么建议吗?

编辑:我们最近切换到使用 Active Directory,但问题仍然存在。

编辑:当我取消登录提示时,我会进入“IIS 7.5 详细错误”页面,其中包含以下信息:

HTTP 错误 401.2 - 未经授权 由于身份验证标头无效,您无权查看此页面。**

【问题讨论】:

  • 您是否尝试过使用 部分中的安全配置?像这样:
  • 还是下的Authorization配置?像 一般,IIS 使用该部分来控制对资源的授权访问
  • 你是否按照here的描述开启了windows认证模块?
  • 能不能登录服务器试试localhost//<web站点文件夹> 看看是否登录成功???您可以使用您的凭据,也可以尝试使用服务器的凭据登录。
  • 大卫,我已经更新了我的答案。如果您有机会查看它,请告诉我它是否解决了您的问题。

标签: asp.net-mvc iis windows-authentication ntlm http-status-code-401


【解决方案1】:

您必须将 hosts 文件中指定的域列入白名单,Windows 身份验证才能正常工作:

  1. 单击开始,单击运行,键入 regedit,然后单击确定。
  2. 在注册表编辑器中,找到以下注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
  3. 右键单击参数,单击新建,然后单击 DWORD(32 位)值。
  4. 输入 DisableStrictNameChecking 并按 ENTER。
  5. 双击DisableStrictNameChecking注册表值,在数值数据框中输入1,点击确定
  6. 在注册表编辑器中,找到并单击以下注册表项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
  7. 右键单击 MSV1_0,指向新建,然后单击多字符串值。
  8. 键入BackConnectionHostNames,然后按ENTER。
  9. 右键单击BackConnectionHostNames,然后单击修改。
  10. 在“数值数据”框中,键入本地计算机上站点的一个或多个主机名,然后单击“确定”。
  11. 退出注册表编辑器,然后重新启动 IISAdmin 服务。

注意: 此答案上的原始 Microsoft KB 链接已损坏并已被删除。 This article 提供了设置 DisableStrictNameChecking 的说明。

【讨论】:

  • 这是一个非常有趣的建议。不幸的是,我不再在有这个问题的地方工作,所以我无法验证这个答案。
  • 我可以验证这个答案。我花了几个小时在谷歌上搜索,最后这个 regedit 答案有所帮助。谢谢!
  • 我已经使用 Win8 和 IIS8 验证了这一点 - 主要问题是定义自定义主机名,然后在我网站的主机头中使用它。另外,我没有将 DisableStrictNameChecking 设置为 1,步骤 2 - 8 有效。
  • 在 Win7 上验证了步骤 2-8。不需要执行第 1 步,将 DisableStrictNameChecking 设置为 1。
  • 问题实际上不在于 IIS,而在于 Windows 身份验证本身。请注意,该解决方案对 BackConnectionHostNames 中指定的主机名禁用 SMB 反射攻击保护。可以在here 找到对攻击的一个很好的解释。
【解决方案2】:

我最近花了三天时间试图解决同样的问题,这让我发疯了。它发生在负载平衡设置中,其中一台服务器正确验证,而另一台失败。调查问题 - 并最终解决它 - 结果证明它与负载平衡环境无关,在使用 Windows 身份验证进行身份验证时任何服务器都可能发生这种情况,并且使用 Active Directory 识别的名称以外的名称调用服务器

1.启用 Kerberos 日志记录

要正确诊断您的问题,您需要在托管 IIS 站点的计算机上启用 Kerberos 日志记录。为此,请添加以下注册表项:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters

使用 ValueType REG_DWORD 和值添加注册表值 LogLevel 0x1

一旦您打开日志记录,然后您尝试进行身份验证,您将在 Windows 应用程序日志中记录错误。您可以忽略错误 KDC_ERR_PREAUTH_REQUIRED(这只是握手的一部分),但如果您收到错误 KDC_ERR_C_PRINCIPAL_UNKNOWN,这意味着您的 AD 控制器无法识别您的服务器,因此您需要请按照以下步骤操作。

2。 KDC_ERR_C_PRINCIPAL_UNKNOWN

如果您收到 KDC_ERR_C_PRINCIPAL_UNKNOWN,这意味着名称“mysite.mydomain.com”与 AD 识别您的机器的方式不同,因此它无法提供有效的 kerberos 票证。在这种情况下,您需要在 AD 上为“www.mysite.mydomain”注册服务主体名称 (SPN)。

在您的 AD 控制器上,运行此命令 - 您需要域管理员权限:

Setspn -A HTTP/mysite.mydomain YOUR_MACHINE_HOSTNAME

3。为您的应用程序池使用自定义标识

最后,让您的应用程序池使用属于 Active Directory 的自定义帐户,而不是使用 NetworkService。这可以在应用程序池的高级设置中完成。

和 .. 瞧。


注意:问题可能(不太可能)与将多个 SPN 注册到同一台计算机有关,在这种情况下,您需要运行命令来删除重复的 SPN,但我怀疑是这种情况。还可以尝试向您的站点添加不同的绑定(不使用自定义名称),例如 htttp://localhost:custom_port_number 并查看身份验证是否有效。如果它有效,则额外表明您遇到了与我相同的问题。

【讨论】:

    【解决方案3】:

    您是否尝试将域放在用户名前面?

    DOMAIN\username
    

    如果您没有域帐户,请尝试在您的用户名前加上机器名称:

    MYCOMPUTER\myusername
    

    【讨论】:

      【解决方案4】:

      您应该检查您是否安装/启用了 Windows 身份验证。这听起来可能很奇怪,但在 IIS 7 中,您必须安装并启用各种身份验证方法。查看http://support.microsoft.com/kb/942043/ 了解更多信息,请参阅下面引用的部分。

      原因 1
      Web 应用程序配置为使用集成 Windows 验证。但是,Windows 身份验证功能不 打开。或者,集成 Windows 身份验证本机模块 ApplicationHost.config 文件或 Web.config 文件的部分 无效。要解决此问题,请参阅解决方案 1。

      原创
      通常,当您尝试查看托管在 IIS 上的 asp.net 网页并收到登录提示时,这并不意味着您的凭据未收到或您未通过身份验证。这意味着运行您的网站的帐户没有正确的权限来处理这些文件。

      在 IIS 6 和 7 中,您可以轻松更改运行应用程序池的用户帐户。尝试将应用程序池标识更改为专门为此设计的具有更多访问权限的帐户。或者,如果您想继续使用现有帐户(IUSR_?网络服务?),您可以授予该帐户对您网站存储目录的更多权限。

      本文专门针对 BizTalk,但几乎没有提及它,重点是解决 IIS 和应用程序池的权限问题:http://msdn.microsoft.com/en-us/library/aa954062.aspx

      【讨论】:

      • 感谢您的建议。这不是文件夹权限。我可以告诉应用程序池使用我的管理员帐户,但问题仍然存在。此外,我收到一条关于来自 IIS 的身份验证标头的特定消息(添加到上面的问题中)。
      • @David - 用一些新信息更新了我的答案。
      【解决方案5】:

      为什么选择本地 IIS?可以使用本地 IIS Express 吗?

      如果是这样,试试这个。似乎 IIS Express 默认将 Windows 身份验证设置为 false。

      改变

      <windowsAuthentication enabled="false">
      

      在 applicationhost.config 文件中设置为“true”(在 'C:\Users[Profile]\Documents\IISExpress\config' 文件夹下)。这对我有用。

      【讨论】:

        【解决方案6】:

        为确保 IIS 使用 Windows 身份验证,我认为您应该尝试关闭其他身份验证方法。如果启用匿名身份验证,Windows 身份验证将不起作用。您也可以阅读此Microsoft Support Article,其中详细描述了 IE 和 IIS 要求。

        【讨论】:

        • 确实很有可能同时拥有匿名和Windows身份验证。我在 web.config 中执行以下操作:
        • 你让我解决了我的问题,看看我的回答。 +1
        【解决方案7】:

        我在启用 Windows 身份验证时收到此错误。我想根据 Windows 登录对用户进行授权,但我的应用程序中没有登录页面。

        我通过在我的Web config 文件中添加以下内容来修复错误。 在标签system.web 下,我将authentication mode="None" 更改为 authentication mode="Forms".

        在标签appSettings下,我添加了add key="owin:AutomaticAppStartup" value="false"

        【讨论】:

        • 认证模式="Forms" ?当您尝试实现 Windows 身份验证时?那会是身份验证模式=“Windows”吗?
        【解决方案8】:

        在阅读了 Espen Burud 的答案后,我通过更改 root 的 web.config 解决了我的问题:

        <allow users="*" />
        

        <deny users="?" />
        

        需要 Windows 身份验证的页面不在根目录中,而是在具有自己的 web.config 和 deny users ? 的子目录中,但这并没有使 Windows 身份验证工作。显然,您需要拒绝根目录中的用户才能使其正常工作。

        IIS 配置启用了匿​​名身份验证;那没关系。对 web.config 进行上述更改后,Windows Authentication 起作用了。

        【讨论】:

          【解决方案9】:

          对于在 IIS 上运行的 Dot Net Core 2.2,当我在我的应用程序中检查启用 Windows 身份验证时,我遇到了 401.2 Unauthorized 问题。这是一个非常简单的测试网站,基本上什么也没做,只是为了尝试让 Windows 身份验证工作。我终于得到了授权,这就是你需要的:

          在启动配置服务中:

          services.AddAuthentication(IISDefaults.AuthenticationScheme);
          

          打开应用程序的属性,单击左侧的调试选项并确保选中启用 Windows 身份验证。

          但这是我忘记的关键点... 配置您的系统以在 IIS 上安装 Windows 身份验证。这从来没有在我的机器上设置过,无论我做什么,我总是会收到 401 未经授权的错误。安装后(Win 10,IIS v10.0.18362.1)我现在得到一个登录提示。这不是我目前所需要的,但至少它不是未经授权的错误。祝你好运,希望这会有所帮助。

          【讨论】:

          • 那么,它在没有任何上下文或解释的情况下被否决了?也许这不是一个很好的答案,如果我理解为什么它被否决,我当然可以解决它。但是,是的,我相信你现在感觉很强大。
          猜你喜欢
          • 2016-10-24
          • 2017-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多