无法通过本地IIS获取Windows身份验证

Dav*_*vid 65 iis asp.net-mvc ntlm windows-authentication http-status-code-401

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

如果我使用VS网络服务器启动Web应用程序,它看起来都很好 - 页面显示我的Windows域和用户名以及所有内容.但是,这适用于Opera和Safari以及IE和FF,它告诉我它根本不使用Windows身份验证(因为据我所知,这在除IE/FF之外的任何浏览器中都不起作用).

下一步是通过本地IIS使其工作.我创建一个指向www.mysite.mydomain到127.0.0.1的hosts文件条目.因此,在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 - 未经授权由于身份验证标头无效,您无权查看此页面.**

Kev*_*ker 128

您必须将hosts文件中指定的域列入白名单才能使Windows身份验证生效.

从以上链接复制以便快速访问:

  1. 将DisableStrictNameChecking注册表项设置为1.有关如何执行此操作的详细信息,请参阅Microsoft知识库中的文章281308
  2. 单击"开始",单击"运行",键入regedit,然后单击"确定".
  3. 在注册表编辑器中,找到并单击以下注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
  4. 右键单击"MSV1_0",指向"新建",然后单击"多字符串值".
  5. 键入BackConnectionHostNames,然后按ENTER键.
  6. 右键单击"BackConnectionHostNames",然后单击"修改".
  7. 在"数值数据"框中,键入本地计算机上站点的主机名或主机名,然后单击"确定".
  8. 退出注册表编辑器,然后重新启动IISAdmin服务.

  • 我可以验证这个答案.我花了几个小时谷歌搜索,最后这个注册答案有帮助.谢谢! (8认同)
  • 我已经使用Win8和IIS8验证了这一点 - 主要问题是定义自定义主机名,然后在我站点的主机头中使用它.另外,我没有将DisableStrictNameChecking设置为1,步骤2 - 8也有效. (6认同)
  • 验证Win7上的步骤2-8.不需要执行步骤1,将DisableStrictNameChecking设置为1. (4认同)

Jam*_*son 7

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

DOMAIN\username
Run Code Online (Sandbox Code Playgroud)

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

MYCOMPUTER\myusername
Run Code Online (Sandbox Code Playgroud)


Pet*_*ter 5

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

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

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

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

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


kab*_*ros 5

我最近花了三天的时间来解决同样的问题,这让我发疯。这是在负载平衡的设置中发生的,其中一台服务器正确认证,而另一台服务器失败。调查该问题并最终解决了该问题,事实证明该问题与负载平衡的环境无关,使用Windows身份验证进行身份验证时,任何服务器都可能发生此问题,并且使用非Active Directory识别的名称来调用该服务器

1.启用Kerberos日志记录

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

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

添加具有ValueType REG_DWORD和值 0x1的注册表值LogLevel

一旦打开日志记录,然后尝试进行身份验证,就会在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控制器上,运行以下命令-您将需要Domain Admin特权:

Setspn -A HTTP/mysite.mydomain YOUR_MACHINE_HOSTNAME
Run Code Online (Sandbox Code Playgroud)

3.为您的应用程序池使用自定义身份

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

和..瞧。


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