Cas*_*sey 104 asp.net iis-7 windows-authentication
我有一个在Windows 2003服务器上的IIS 7下运行的.NET 3.5应用程序,并且在我继续提示登录时无法使集成的Windows身份验证正常工作.我已将IIS身份验证设置为在IIS中启用,并禁用所有其他安全类型,并且我的应用程序web.config文件身份验证/授权设置为:
<system.web>
<compilation debug="true" strict="false" explicit="true" targetFramework="3.5" />
<authenticationmode="Windows"/>
<authorization>
<deny users = "?" />
</authorization>
</system.web>
Run Code Online (Sandbox Code Playgroud)
通过这种设置,我期待Windows用户的场景验证背后允许访问和拒绝匿名用户.但是,当我尝试访问该站点时,我得到的是Windows登录弹出窗口.
我已经解决了这个问题几天了,无法解决问题.基于具有类似问题的帖子,我确认我的URL不包含任何句点,仔细检查我的IE设置是否设置为启用集成Windows身份验证,还将我的URL添加到我的Intranet站点,但仍然获得弹出窗口.
为了进一步排除故障,我在IIS中启用了匿名身份验证并修改了我的web.config文件,然后添加了Response.Write(System.Security.Principal.WindowsIdentifity.getcurrent().user.name.toString() )尝试查看身份验证中使用的用户.我得到的结果是IIS APPPOOL\myapp,它显然是我的应用程序的IIS应用程序池.
我真的很感激任何人都可以提供的任何帮助,所以我仍然只使用Windows身份验证,但没有获得弹出窗口,并且Windows身份验证是针对实际的Windows用户执行的.
谢谢.
进一步排除故障后的其他说
只是注意到当登录失败并再次显示Windows登录提示时,它显示尝试登录为"SERVERNAME"\"USERNAME"的用户名,这使我相信它正在尝试验证用户对服务器的对比域.为了确认这一点,我直接在应用服务器上创建了一个本地用户帐户,其用户名和密码与网络域用户相同,并尝试再次登录.结果是我再次收到登录提示,但是当我输入用户名和密码时,我能够成功登录.网络用户和应用服务器位于同一个域中,因此实际上不确定为什么IIS身份验证指向本地应用服务器帐户而不是域帐户.我知道这是一个IIS问题,所以发布在forums.iis.net上,但感谢任何人可能有任何建议,因为已经解决了这几天.
jp2*_*ode 85
我有一个我正在研究的Windows 2008服务器,所以我的答案与OP在Windows 2003服务器上的答案并不完全相同.
这就是我所做的(在这里记录下来,以后我可以找到它).
我遇到了同样的问题:

在我的Web.config文件中,我有这个部分:
<system.web>
<authentication mode="Windows" />
<authorization>
<allow users="*" />
<deny users="?" />
</authorization>
</system.web>
Run Code Online (Sandbox Code Playgroud)
在IIS下,所有这些似乎都在Authentication图标下解决.

现在进入身份验证的功能:

启用匿名身份验证与IUSR:

启用Windows身份验证,然后右键单击以设置提供程序.
NTLM需要第一!

接下来,检查在高级设置...的扩展保护是接受和启用内核模式身份验证进行检查:

完成此操作后,我返回到我的Web应用程序,单击"浏览"链接,然后登录而无需再次提供我的凭据.
我希望这对你们中的许多人都有益,我希望它对我以后也有用.
kam*_*cus 43
只是为了其他人的利益.如果错误是a 401.1 Unauthorized并且您的错误代码匹配0xc000006d,那么您实际上遇到了一个安全"功能",它阻止了对FQDN的请求或与您的本地计算机名称不匹配的自定义主机头:
请按照此支持文章来解决此问题:
http://support.microsoft.com/kb/896861
这个花了我一段时间,因为其他人的评论都没有帮助我.我发现这篇文章并修复了它!
小智 26
我有一个类似的问题,我想只保护我网站的某个部分.除IE之外,一切都运作良好.我启用了匿名和Windows身份验证.对于Anonymous,Identity设置为Application Pool标识.问题出在Windows身份验证上.经过一番挖掘后,我解雇了小提琴手并发现它使用的是Kerberos作为提供者(实际上它默认设置为Negotiate).我把它切换到NTLM并修复了它.HTH
达乌迪
小智 17
将[域用户]权限添加到您的Web安全性.
Slo*_*Slo 12
不要通过更改所有内容在服务器上创建错误.如果在2008 R2上使用Windows身份验证时有Windows提示登录,只需转到每个应用程序Providers并向上移动NTLM.如果Negotiate是列表中的第一个,Windows身份验证可以停止为2008 R2上的特定应用程序的属性工作,并且系统会提示您输入用户名和密码,而不是从不工作.当您更新应用程序时,有时会发生这种情况.请确保不是NTLM列表中的第一个,你再也不会看到这个问题了.
如果您的URL在域名中有点,IE会将其视为互联网地址而非本地.您至少有两个选择:
转到该站点并取消登录对话框.让这件事发生:
在IE的设置中:
WindowsIdentity.GetCurrent是正确的:您应该获得APPPOOL用户。这是因为执行代码的ASP.NET进程是当前标识。如果希望它返回击中该站点身份的用户,则需要在web.config中添加以下行:
<identity impersonate="true" />
Run Code Online (Sandbox Code Playgroud)
这使过程假定请求页面的用户的身份。所有操作将代表它们执行,因此任何尝试读取网络上的文件夹或访问数据库资源之类的尝试都将意味着当前用户将需要这些内容的权限。您可以在此处阅读更多有关模拟的信息。请注意,根据Web /数据库服务器拓扑的设置方式,启用模拟时可能会遇到委派问题。
但是您的原始问题是,似乎无法确定身份,并且出现了登录弹出窗口。我会注意到,<deny>如果您在IIS中禁用了匿名身份验证,则不需要阻止。我们从不包含它(除非在特殊<location>块中,否则),因此我想您可以尝试将其删除并重试。不过,其他一切听起来都不错。
您没有指定哪个用户正在IIS中运行应用程序池。它是自定义帐户还是默认帐户?如果是自定义的,它是Web服务器上的域帐户还是本地帐户?自定义帐户有时可能需要一些其他步骤,例如注册SPN。同样,自定义帐户可能在AD中没有解决传入用户帐户的权限的问题。
您可能还会检查IIS日志以查看返回了什么响应。它很可能是401,但它后面应有一个子编号,如401.2之类。该子编号有时可以帮助确定根本问题。该知识库文章列出了五个。
小智 5
这为我修好了.
我的服务器和客户端PC是Windows 7并且位于同一个域中
在iis7.5中 - 启用Intranet的Windows身份验证(禁用所有其他身份验证..也不需要在web.config文件中提及Windows身份验证
然后转到客户端PC .. IE8或9-工具 - 互联网选项 - 安全 - 本地内联网 - 站点 - 高级 - 添加您的网站(取消"需要服务器verfi ..."ticketmark..no需要
IE8或9-工具 - 互联网选项 - 安全 - 本地内联网 - 自定义级别 - 使用身份验证 - 登录 - 选择自动登录,使用当前用户名和密码
保存此设置..您已完成..不再提示输入用户名和密码.
确保,因为您的客户端PC是域的一部分,您必须有一个GPO用于此设置,...当用户下次登录到Windows时,此设置将恢复
| 归档时间: |
|
| 查看次数: |
263010 次 |
| 最近记录: |