无法让 Windows 身份验证通过本地 IIS 工作

因此,我使用 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.auto-ntlm-auth. trust-uris 配置设置。

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

我们这里没有活动目录,但我的理解是,它应该与本地帐户工作良好。

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

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

编辑: 当我取消登录提示时,我被带到一个“ IIS 7.5详细错误”页面,其中包含以下信息:

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

102454 次浏览

你试过把域名放在用户名前面吗?

DOMAIN\username

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

MYCOMPUTER\myusername

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

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

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

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

本文专门针对 BizTalk,但几乎没有对其进行任何参考,重点讨论 IIS 和应用程序池的权限问题: http://msdn.microsoft.com/en-us/library/aa954062.aspx

为了确保 IIS 使用 Windows 身份验证,我认为您应该尝试转换其他身份验证方法。如果启用匿名身份验证,Windows 身份验证将无法工作。您也可以阅读此 Microsoft 支持文章,其中详细描述了 IE 和 IIS 的要求。

你必须在主机文件中列出一个白名单,这样 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,指向 New,然后单击 Multi-String Value。
  8. 键入 BackConnectionHostNames,然后按 ENTER。
  9. 右键单击 BackConnectionHostNames,然后单击“修改”。
  10. 在“值数据”框中,键入本地计算机上的站点的主机名或主机名,然后单击“确定”。
  11. 退出注册表编辑器,然后重新启动 IISAdmin 服务。

注意: 此答案上的原始 Microsoft 知识库链接已经中断并被删除。 本文 提供了设置 DisableStrictNameChecking 的说明。

为什么是本地 IIS? 你能使用本地 IIS 快递吗?

如果是这样,试试这个。 IISExpress 默认情况下将 Windows 身份验证设置为 false。

改变

<windowsAuthentication enabled="false">

将 applicationhost.config 文件中的“ true”设置为“ C: Users [ Profile ] DocumentIISExpress config”文件夹下的“ true”。

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

1. 启用 Kerberos 日志记录

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

控制 Lsa Kerberos 参数

用 ValueTypeREG _ DWORD和 Value 添加注册表值 日志级别 0x1 .

一旦打开日志记录,然后尝试进行身份验证,就会在 Windows 应用程序日志中记录错误。您可以忽略错误 KDC _ ERR _ PREAUTH _ REQUIRED(这只是握手的一部分) ,但是如果您得到错误 未知,这意味着您的 AD 控制器不能识别您的服务器,因此您需要遵循以下步骤。

2. KDC _ ERR _ C _ PRINCIPAL _ UNKNOWN

如果你得到的是 KDC _ ERR _ C _ PRINCIPAL _ UNKNOWN,这意味着“ mysite.mydomain.com”这个名字与广告识别你的机器的方式不同,所以它无法提供有效的 kerberos 票据。在这种情况下,您需要在 AD 上为“ www.mysite.mydomain”注册一个服务主体名称(SPN)。

在你的 AD 控制器上,运行这个命令-你将需要域管理权限:

Setspn -A HTTP/mysite.mydomain YOUR_MACHINE_HOSTNAME

3. 为应用程序池使用自定义标识

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

然后... 瞧。


注意: 这个问题可能(不太可能)与在同一台计算机上注册多个 SPN 有关,在这种情况下,您需要运行一个命令来删除重复的 SPN,但我对此表示怀疑。还可以尝试向您的站点添加不同的绑定(不使用自定义名称) ,如 http://localhost: custom_ port _ number,并查看身份验证是否有效。如果成功了,就说明你和我有同样的问题。

我在启用 Windows 身份验证时出现了这个错误。我想授权用户基于 Windows 登录,并没有登录页面在我的应用程序。

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

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

在阅读了 Espen Burud 的答案之后,我通过更改根目录下的 web.config 来解决我的问题:

<allow users="*" />

<deny users="?" />

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

IIS 配置启用了匿名身份验证; 这没有关系。

对于 Dot Net Core 2.2和在 IIS 上运行,当我在应用程序中检查 Enable Windows Authentication 时,我遇到了401.2未授权的问题。这是一个非常简单的测试网站,基本上什么也没做,只是试图让 Windows 认证工作。我终于拿到授权了,你需要这个:

在启动配置服务中:

services.AddAuthentication(IISDefaults.AuthenticationScheme);

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

enter image description here

但是我忘了一件事... 将系统配置为在 IIS 上安装 Windows 身份验证。这从未在我的机器上设置过,而且不管我做了什么,我总是会得到一个未经授权的401错误。在安装完这个(Win 10,IIS v10.0.18362.1)之后,我现在得到一个登录提示符。这不是我现在需要的,但至少不是未经授权的错误。祝你好运,希望这能有所帮助。

enter image description here