使用集成 Windows 身份验证接收登录提示

我有一个。NET 3.5应用程序在 Windows 2003服务器的 IIS 7下运行,并且无法使集成的 Windows 身份验证正常工作,因为我继续收到登录提示。我已经在 IIS 中将 Windows 身份验证设置为启用,并且禁用了所有其他安全类型,我的应用程序 web.config 文件身份验证/授权设置为:

<system.web>
<compilation debug="true" strict="false" explicit="true" targetFramework="3.5" />
<authenticationmode="Windows"/>
<authorization>
<deny users = "?" />
</authorization>
</system.web>

通过这个设置,我希望 Windows 用户的场景验证能够允许访问和拒绝匿名用户。然而,当我试图访问该网站时,我得到的是一个 Windows 登录弹出窗口。

我已经对这个问题进行了几天的故障排除,但是还是没有找到问题所在。基于类似问题的帖子,我确认我的 URL 不包括任何句点,再次检查我的 IE 设置是否设置为启用集成 Windows 身份验证,还将我的 URL 添加到我的内部网站,但仍然得到弹出窗口。

为了进一步排除故障,我在 IIS 中启用了匿名身份验证,并修改了 web.config 文件,使我能够直接进入该文件,然后添加了 Response。写入(系统。保安。校长。Getcurrent ().ToString ()来尝试查看身份验证中使用了哪个用户。我得到的结果是 IIS APPPOOL myapp,它显然是我的应用程序的 IIS 应用程序池。

我真的很感激任何人可以提供的任何帮助,这样我仍然只使用 Windows 身份验证,但不会得到弹出窗口和 Windows 身份验证是针对实际的 Windows 用户执行的。

谢谢。


进一步故障排除后的附加说明:

只是注意到,当登录失败,Windows 登录提示再次显示,它显示的用户名试图登录为“ SERVERNAME”“ USERNAME”,这使我相信它是试图验证用户对服务器对域。为了证实这一点,我直接在应用服务器上创建了一个本地用户帐户,其用户名和密码与网络域用户相同,并尝试再次登录。结果是我再次收到了登录提示,但是当我这次输入用户名和密码时,我能够成功地登录。网络用户和应用服务器在同一个域上,所以真的不知道为什么 IIS 身份验证指向本地应用服务器帐户,而不是指向域帐户。我意识到这是一个 IIS 问题,所以在 forums.IIS.net 上发布也是如此,但感谢任何建议,任何人可能已经为此故障排除了好几天。

338475 次浏览

可能与浏览器有关。如果您正在使用 IE,您可以进入高级设置并选中“启用 Windows 集成身份验证”复选框。

我有一个类似的问题,我只想保护我的网站的某一部分。除了 IE 之外,一切都运行良好。我启用了匿名身份验证和 Windows 身份验证。 对于 Anonymous,Identity 设置为 ApplicationPool 标识。问题出在 Windows 身份验证上。深入研究之后,我启动了 fiddler,发现它使用 Kerberos 作为提供程序(实际上它默认设置为协商)。我把它换成了 NTLM 就修好了。 高温

Daudi

您是否尝试过使用您的域前缀(如 DOMAIN 用户名)登录?IIS6默认使用主机作为默认域,因此在登录时指定域可以解决问题。

WindowsIdentity.GetCurrent是正确的: 您应该得到 APPPOOL 用户。这是因为执行代码的 ASP.NET 进程是当前标识。如果你想让它返回点击站点标识的用户,你需要在 web.config 中添加以下代码:

<identity impersonate="true" />

这会导致进程假定请求页面的用户的标识。所有操作都将以用户的名义执行,因此任何读取网络上的文件夹或访问数据库资源等的尝试都意味着当前用户将需要对这些事情的权限。您可以阅读有关模拟 给你的更多信息。请注意,根据 Web/数据库服务器拓扑的设置方式,您可能会在模拟启用时遇到委托问题。

但你最初的问题是,它似乎无法确定的身份,你得到了一个登录弹出窗口。注意,如果在 IIS 中禁用了匿名身份验证,则不需要 <deny>块。我们从来没有包括它(除了在特殊的 <location>块等) ,所以我会说你可能会尝试删除它,并再次尝试。不过其他的听起来都没问题。

您没有指定在 IIS 中运行应用程序池的用户。这是一个自定义帐户还是默认帐户?如果它是自定义的,它是一个域帐户或本地帐户在网络服务器上?自定义帐户有时可能需要几个步骤,比如注册 SPN。此外,自定义帐户在 AD 中没有解析传入用户帐户的权限也可能是一个问题。

您还可以检查 IIS 日志以查看正在返回什么响应。很可能是401但后面应该有个子数比如401.2什么的。这个子数有时可以帮助确定根问题。这个 KB 文章列出了五个。

我刚用 ASP.Net 应用程序解决了一个类似的问题。

症状: 我可以使用本地用户登录到我的应用程序,但不是域用户,即使机器正确地连接到域(正如您在您的附加说明中所说)。在 Security 事件查看器中,有一个 ID = 4625的事件“ Domain sid 不一致”。

解决方案: 我找到了解决方案 给你。问题在于我的测试机器克隆了虚拟机(Windows Server 2008 R2、一个网域控制器和一个 web 服务器)。两者都有相同的机器 SID,这显然造成了问题。我是这么做的:

  1. 从域中删除 Web 服务器。
  2. 在 VM 中运行 c: Windows System32 Sysprep.exe。
  3. 重启虚拟机。
  4. 将 Web 服务器连接到域。

您在过程中丢失了一些设置(用户首选项、静态 IP、重新创建自签名证书) ,但是现在我已经重新创建了它们,一切都正常工作了。

这东西帮我修好了。

我的服务器和客户端电脑是 Windows7,并在同一个域

  1. 在 iis7.5中-为您的 Intranet 启用 windows 身份验证(禁用所有其他身份验证. . also 不需要在 web.config 文件中提及 windows 身份验证

  2. 然后转到客户端电脑。.IE8或9-工具-互联网选项-安全-本地 Intranet-网站-高级-添加您的网站(删除“需要服务器 verfi...”的标记。.不用了

  3. IE8或9-工具-Internet 选项-安全性-本地 Intranet-自定义级别-用户认证-登录-选择当前用户名和密码的自动登录

  4. 保存此设置. . 您完成. . 不再提示用户名和密码。

  5. 确保,因为你的客户端电脑是域的一部分,你必须有一个 GPO 为这个设置,。.否则,当用户下次登录 Windows 时,此设置将恢复

为你的网络安全添加权限[域名用户]。

  • 在“网站”文件夹下的 IIS 中右键单击您的网站
  • 单击“编辑权限”..。
  • 选择 Security 选项卡
  • 在“组或用户名”部分下单击“编辑...”按钮
  • 在弹出的“权限”中,在“组”或用户名下单击“添加...”。
  • 在对象名称中输入[ Domain Users ]以选择文本区域,然后单击 OK 应用更改
  • 单击“确定”关闭弹出的“权限”
  • 单击 OK 关闭弹出的属性并应用新设置

不要通过更改所有内容在服务器上创建错误。如果在2008R2上使用 Windows 身份验证时有 Windows 提示登录,那么只需转到 Providers并为每个应用程序移动上行 NTLM。 当 Negotiate是列表中的第一个,Windows 身份验证可以停止工作属性的特定应用程序在2008R2和您可以提示输入用户名和密码比从来没有工作。当您更新应用程序时,有时会发生这种情况。只要确保比 NTLM是列表中的第一个,你将永远不会再看到这个问题。

我也有同样的问题。我尝试了在这个论坛和其他论坛上发现的大部分东西。

最后做了一点自己的 RnD 就成功了。

我进入 IIS 设定,然后进入我的网站 允许选项添加我的组织域用户组。

现在,因为我的所有域名用户已被授予访问该网站,我没有遇到这个问题。

希望这个能帮上忙

只是为了别人好。如果错误是 401.1 Unauthorized,并且您的错误代码与 0xc000006d匹配,那么您实际上遇到了一个安全“特性”,该特性阻止对 FQDN 或自定义主机头的请求,这些请求与您的本地机器名称不匹配:

按照这篇支持文章来解决这个问题:

Https://webconnection.west-wind.com/docs/_4gi0ql5jb.htm (原版,现已停用: http://support.microsoft.com/kb/896861)

来自支持文章,以确保它不会丢失:

解决办法是使这个策略失效的注册表黑客 明确地。

执行这个 配置在服务器上的注册表中手动找到这个密钥:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa

并编辑或添加一个新键:

然后将值发送到1以禁用环回检查(local (不允许进行本地身份验证)或为0。

或者更容易使用 Powershell:

New-ItemProperty HKLM: System CurrentControlSet Control Lsa-Name “ DisableLoopbackCheck”-值“1”-PropertyType dword

看起来 最近的 Windows10(1803及更高版本?)也需要这样做 配置设置,以便在本地进行身份验证。

这篇文章花了我一段时间,因为其他人的评论都没能帮到我。我找到了这篇文章,它修好了!

IIS7.0或 IIS7.5中的 Windows 身份验证不适用于 Kerberos (Provider = 协商) 当应用程序池标识为 ApplicationPoolIdentity 时 一个必须使用网络服务或另一个内置帐户。 另一种可能性是使用 NTLM 使 Windows 身份验证工作(在 Windows 身份验证中,提供程序将 NTLM 放在顶部或删除协商)

Chris van de Vijver

我遇到了同样的问题,因为我在应用程序池中使用的用户(Identity)不在 IIS _ IUSRS 组之下。添加用户到组和一切工作

我有一个 Windows2008服务器,我的工作,所以我的答案是不完全相同的是什么 OP 有一个 Windows2003服务器。

下面是我所做的(在这里记录这一点,以便我以后可以找到它)。

我也有同样的问题:

login prompt

在我的 Web.config文件中,有这样一个部分:

<system.web>
<authentication mode="Windows" />
<authorization>
<allow users="*" />
<deny users="?" />
</authorization>
</system.web>

在 IIS 下,所有这些问题似乎都可以在 认证图标下解决。

  1. 编辑权限: 确保您的 ASP.NET 帐户拥有权限。我的帐户最初没有添加。

ASP.NET permission

现在来看看 认证的特点:

Authentication Features

使用 IUSR启用 匿名认证:

Anonymous Authentication

启用 视窗认证,然后右击以设置 供应商

NTLM 必须是第一!

Windows Authentication

接下来,检查 高级设置..。下的 延伸保护接受,而 启用内核模式身份验证是检查过的:

Advanced Settings

一旦我这样做了,我回到我的网络应用程序,点击浏览链接,登录而不必再次提供我的凭证。

我希望这对你们中的很多人都有好处,我也希望以后对我也有好处。

在我的例子中,授权设置没有正确设置。

我必须这么做

  1. 在 IIS 管理器中打开 .NET 授权规则

    open the .NET Authorization Rules in IIS Manager
  2. 拿开的 < b > 拒绝规则

    remove the Deny Rule

在我们的 Intranet 中,这个问题在客户端通过调整安全设置来解决,如下所示。右边的两个复选框对我们都有用。

IE Internet Options

在我的案例中,解决方案是(在上面建议的调整之上)对 重新开始 my/users 的本地开发计算机/IIS (托管服务器)进行调整。 我的用户刚刚被添加到新创建的广告安全组-和政策不适用于用户广告帐户,直到我登出/重新启动我的计算机。

希望这能帮到别人。

如果你的网址在域名中有点,IE 会把它当作一个互联网地址而不是本地地址。你至少有两个选择:

  1. 在 URL 中获取一个用于替换 server.domain 的别名。
  2. 在计算机上按照以下步骤操作。

进入该网站并取消登录对话框。让这种情况发生:

enter image description here

在 IE 的设置中:

enter image description here

enter image description here

enter image description here

我遇到了相同的证书提示问题,并做了一个快速搜索,在互联网上没有什么可以修复它。我花了一些时间才发现这个问题,一个愚蠢的问题。

在 IIS-> 高级设置-> 物理路径凭证(为空)

一旦我添加了一个可以访问 VM/服务器的机器 ID (域/用户) ,密码提示就会停止。

希望这个能帮上忙

我遇到了同样的问题,通过更改应用程序池的应用程序池标识解决了这个问题,在这个应用程序池中,Web 应用程序正在运行到 NetworkService enter image description here

我尝试了上面的 IIS 配置技巧和环回注册表黑客技术,我审查并重新创建了应用程序池权限和其他一些东西,但仍然无法摆脱在我的 IIS Express 或 IIS 7.5开发工作站上运行的身份验证循环,从本地或远程浏览会话。我收到了四个401.2状态回复和一张空白页。部署到我的 IIS 8.5登台服务器上的完全相同的站点工作得完美无缺。

最后,我注意到在 Response Body 中,浏览器显示为空白的标记包含成功登录的默认页面。我确定 ASP.NET 的自定义错误处理和401错误的 HTTP 处理阻止/干扰了 Windows 验证我的工作站,而不是登台服务器。我花了几个小时摆弄这个,但只要我删除自定义处理的401错误,工作站恢复正常。我把这个作为另一种射你自己的脚的方法。

我有这个问题。Net core 2在浏览了这里的大多数建议之后,我们似乎错过了 web.config 的一个设置

<aspNetCore processPath="dotnet" arguments=".\app.dll" forwardWindowsAuthToken="false" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />

正确的设置是 ForwardWindowsAuthToken = “ true”,现在看来似乎很明显,但当有这么多的情况下,同一个问题,它很难确定

编辑: 我还发现下面的 Msdn 文章有助于解决这个问题。

向注册表中添加 图片来源: img src = “ https://i.stack.imgur.com/jnFyc.png”alt = “ enter image description here”/>

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa solved my problem.

创建可在 NTLM 身份验证请求中引用的本地安全机构主机名。

为此,请对客户端计算机上的所有节点执行以下步骤:

  1. 单击 Start,单击 Run,键入 regedit,然后单击 OK

  2. 找到并单击以下注册表子项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0

  3. 右键单击 MSV1_0,指向 New,然后单击 Multi-String Value

  4. 在“名称”列中,键入 BackConnectionHostNames,然后按 ENTER.

  5. 右键单击 BackConnectionHostNames,然后单击 Modify

  6. 在“ Value数据”框中,键入使用的 CNAME 或 DNS 别名 获取计算机上的本地共享,然后单击“确定”。

注意

  • 在单独的行中键入每个主机名

  • BackConnectionHostNames注册表项作为 REG_DWORD类型存在,
    您必须删除 BackConnectionHostNames注册表项
    注册表编辑器,然后重新启动计算机。

资料来源: 安装 WindowsServer2003ServicePack1后,试图使用服务器的 FQDN 或 CNAME 别名在本地访问服务器时出错消息: 拒绝访问或网络提供程序不接受给定的网络路径

值得一提的是,在 WindowsServer2019上进行更改后,我不需要重新启动。