使用集成的Windows身份validation接收login提示

我有一个运行在Windows 2003服务器上的IIS 7下的.NET 3.5应用程序,无法正常工作,因为我继续得到提示进行login。 我已经将Windows身份validation设置为在IIS中启用,并禁用所有其他安全types,并将我的应用程序web.config文件身份validation/授权设置为:

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

有了这个设置,我期待着Windows用户的场景validation,以允许访问和拒绝匿名用户。 但是,我得到的是一个Windowsloginpopup式,当我尝试访问该网站。

我一直在解决这个问题几天了,无法找出问题。 基于类似问题的post,我确认我的url不包括任何时期,双重检查,我的IE设置设置为启用集成Windows身份validation,并将我的url添加到我的内部网站,但仍然popup。

为了进一步解决问题,我启用了IIS中的匿名身份validation,并修改了我的web.config文件,让我进入,然后添加Response.Write(System.Security.Principal.WindowsIdentifity.getcurrent()。user.name.toString() )尝试查看正在使用哪个用户进行身份validation。 我得到的结果是IIS APPPOOL \ myapp显然是我的应用程序的IIS应用程序池。

我真的很感激任何人都可以提供的帮助,所以我仍然只使用Windows身份validation,但没有得到popup窗口的身份validation执行对实际的Windows用户。

谢谢。


进一步的故障排除后的其他注意

只是注意到,当login失败,并再次显示Windowslogin提示时,它显示的用户名尝试login为“SERVERNAME”\“USERNAME”这导致我相信它试图validation用户对服务器与域。 为了证实这一点,我直接在应用服务器上创build了一个本地用户帐号,它和网域用户使用相同的用户名和密码,并尝试重新login。 结果是我再次收到login提示,但是这次我input用户名和密码时,我能够成功login。 networking用户和应用程序服务器位于同一个域中,因此不确定为什么IIS身份validation指向本地应用程序服务器帐户而不是域帐户。 我意识到这是一个IIS问题,所以发布forums.iis.net以及任何人都可能有任何build议,因为这几天已经排除故障。

我有一个Windows 2008服务器,我正在处理,所以我的答案是不完全相同的OP在Windows 2003服务器上。

这是我做的(在这里录音,所以我可以在以后find它)。

我有这个相同的问题:

登录提示

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

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

在IIS下,所有这些似乎都在authentication图标下解决。

  1. 编辑权限:确保你的ASP.NET帐户有权限。 我原来并没有join。

ASP.NET权限

现在进入authenticationfunction:

身份验证功能

使用IUSR启用匿名身份validation

匿名身份验证

启用Windows身份validation ,然后右键单击以设置提供程序

NTLM需要首先!

Windows身份验证

接下来,请检查高级设置下的扩展保护是否接受启用内核模式validation已检查:

高级设置

一旦我这样做,我回到我的Web应用程序,单击浏览链接,并login,而不必再次提供我的凭据。

我希望这对许多人来说是有益的,我希望以后也能对我有用。

我有一个类似的问题,我只想保护我的网站的某个部分。 一切运行良好,除了IE浏览器。 我同时启用了匿名和Windows身份validation。 对于匿名,身份设置为应用程序池标识。 问题是与Windows身份validation。 经过一番挖掘,我激发了小提琴手,发现它使用Kerberos作为提供者(实际上默认设置为Negotiate)。 我把它切换到NTLM,并修复它。 HTH

达乌迪

只是为了别人的利益。 如果错误是401.1 Unauthorized且错误代码与0xc000006d匹配,那么您实际上正在运行一个安全“function”,以阻止对与本地计算机名称不匹配的FQDN或自定义主机头的请求:

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

http://support.microsoft.com/kb/896861

这一个花了我一段时间,因为其他人的意见在这里没有帮助我。 我发现这篇文章,并修复它!

将权限[域用户]添加到您的networking安全。

  • 在IIS文件夹下右键单击您的站点
  • 点击修改权限…
  • select安全选项卡
  • 在“组或用户名”部分下,单击“编辑…”button
  • 在权限popup,在组或用户名称下单击添加…
  • 在对象名称中input[域用户]以select文本区域,然后单击确定以应用更改
  • 点击确定closures权限popup
  • 点击确定closurespopup的属性并应用您的新设置

不要通过更改所有内容来在服务器上创build错误。 如果您在2008 R2上使用Windows身份validation时有Windows提示login,只需转到Providers并为每个应用程序向上移动NTLM 。 当Negotiate是列表中的第一个时,Windows身份validation可以停止工作在2008 R2上的特定应用程序的属性,并且可以提示您input用户名和密码比从不工作。 有时候会在您更新应用程序时发生。 只要确保NTLM是名单上的第一,你永远不会再看到这个问题。

可以是浏览器相关的。 如果您使用的是IE浏览器,则可以进入高级设置,并勾选“启用Windows集成身份validation”checkbox。

这为我修好了。

我的服务器和客户端PC是Windows 7,并在同一个域

  1. 在iis7.5中启用您的Intranet的Windows身份validation(禁用所有其他身份validation..也不需要提到web.config文件中的Windows身份validation

  2. 然后转到客户端PC .. IE8或9-工具 – 互联网选项 – 安全 – 本地Intranet – 网站 – 高级 – 添加您的网站(起飞“需要服务器verfi …”ticketmark..no需要

  3. IE8或9-工具 – 互联网选项 – 安全 – 本地内联网 – 自定义级别userauthentication – login – select自动login与当前的用户名和密码

  4. 保存这个设置..你完成了..没有更多的提示用户名和密码。

  5. 请确保,因为你的客户端电脑是域的一部分,你必须有一个GPO这个设置,.. orelse这个设置将恢复当用户下次login到Windows

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

 <identity impersonate="true" /> 

这使得该过程呈现请求该页面的用户的身份。 所有操作都将以它们的名义执行,所以任何尝试读取networking上的文件夹或访问数据库资源等都意味着当前用户将需要对这些东西的权限。 你可以在这里阅读更多关于模仿的内容。 请注意,根据您的Web /数据库服务器拓扑结构的设置,您可能会遇到启用模拟的代理问题。

但你最初的问题是,看起来身份不能确定,你会得到一个loginpopup窗口。 我会注意到,如果您在IIS中禁用匿名身份validation,则不需要<deny>块。 我们从来没有包括它(除了在特殊的<location>块等),所以我想说,你可能会尝试删除它,并再次尝试。 一切都听起来是正确的,虽然。

您没有指定在IIS中运行应用程序池的用户。 这是一个自定义帐户还是默认帐户? 如果是自定义的,它是一个域帐户或Web服务器上的本地帐户? 自定义帐户有时可能需要更多的步骤,例如注册SPN。 此外,自定义帐户在AD中没有权限来parsing传入用户的帐户可能会出现问题。

您也可以检查IIS日志以查看返回的响应。 它很可能是一个401,但它应该有一个像401.2之类的东西之后的子数字。 该子号有时可以帮助确定根本问题。 这个KB文章列出了五个。

在我的情况下,授权设置没有正确设置。

我不得不

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

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

  2. 删除 拒绝规则

    删除拒绝规则

如果你的url在域名中有点,IE会把它看作是一个互联网地址,而不是本地的。 你至less有两个select:

  1. 获取要在URL中使用的别名来replaceserver.domain。 例如,myapp。
  2. 在计算机上按照以下步骤操作。

转到该网站并取消login对话框。 让这发生:

在这里输入图像描述

在IE的设置中:

在这里输入图像描述

在这里输入图像描述

在这里输入图像描述

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

症状:我可以使用本地用户login到我的应用程序,但不能使用域用户,即使机器已正确连接到域(如您在“其他说明”中所述)。 在安全事件查看器中,发生ID = 4625“域sid不一致”的事件。

解决scheme:我在这里find解决scheme。 问题是,我的testing机器克隆了虚拟机(Windows Server 2008 R2;一个域控制器和一个Web服务器)。 两者都有相同的机器SID,这显然是造成问题。 这是我做的:

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

你在这个过程中(用户首选项,静态IP,重新创build自签名证书)中的一些设置,但现在我已经重新创build它们,一切工作正常。

在我们的Intranet中,问题在客户端通过调整安全设置来解决,如下所示。 右侧的任一checkbox都为我们工作。

IE Internet选项

您是否尝试使用域名前缀login,例如DOMAIN \ Username? IIS 6默认使用主机作为默认域,因此在login时指定域可以解决问题。

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

终于在做了一点自己的RnD之后成功了。

我进入IIS设置 ,然后进入我的网站权限选项添加我的组织域用户组。

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

希望这可以帮助

我尝试了上面的IISconfiguration技巧和回送registry黑客,我审查和重新创build了应用程序池的权限和其他一些东西,仍然无法摆脱我的开发工作站与IIS Express或IIS 7.5上运行的身份validation循环,从本地或远程浏览会话。 我收到了四个401.2状态回复和一个空白页。 部署到我的IIS 8.5临时服务器的完全相同的站点完美地工作。

最后,我注意到响应正文中的标记由浏览器包含成功login的默认页面呈现空白。我确定为ASP.NET和HTTP的401错误自定义error handling是防止/干扰Windows身份validation我的工作站但不是登台服务器。 我花了几个小时摆弄这个,但只要我为401错误删除自定义处理,工作站恢复正常。 我把这个作为另一种方式来拍摄自己的脚。

当应用程序池标识为ApplicationPoolIdentity时,IIS7.0或IIS7.5中的Windows身份validation不适用于kerberos(provider = Negotiate)。必须使用Network Service或另一个内置帐户。 另一种可能是使用NTLM来使Windows Authenticatio正常工作(在Windows身份validation提供程序中,将NTLM置于顶层或删除协商)

chris van de vijver

我有同样的问题,导致我在应用程序池中使用的用户(标识)不在IIS_IUSRS组之下。 添加用户到组中,一切正常

在我的情况下,解决scheme(在上面build议的调整之上) 重新启动我/用户的本地开发计算机/ IIS(托pipe服务器)。 我的用户刚刚被添加到新创build的AD安全组中,并且在我注销/重新启动计算机之前,策略不适用于用户AD帐户。

希望这会帮助别人。

我遇到了相同的证书提示问题,并做了一个快速的search,互联网上没有任何东西可以修复它。 花了一些时间才发现这个问题很愚蠢。

在IIS中 – >高级设置 – >物理path凭据(是空的)

只要我添加一个机器ID(域/用户)有权访问虚拟机/服务器,密码提示将停止。

希望这可以帮助

我遇到了同样的问题,通过将运行Web应用程序的应用程序池的应用程序池标识更改为NetworkService来解决此问题 在这里输入图像描述