2013-11-28 77 views
2

我已经运行到wierdest问题,我希望一些ASP.NET专家能给我一些线索,这是怎么回事。集成Windows身份验证打破File.Exists

我有一个运行在IIS 6.0上的ASP.NET网站。在它上面,我有一个.asmx web服务。在.asmx web服务中,我使用System.IO.File.Exists()来检查网络共享上是否存在文件。该网站使用模拟。

这里有大量的踢球者:如果我设置IIS运行使用基本身份验证的网站,该File.Exists行返回True。如果我将它设置为集成Windows身份验证,它将返回False。我没有改变任何东西,我可以来回改变,并发生完全相同的事情。我记录电话之前的一些信息File.Exists()而事实上,无论是User.Identity.NameSystem.Security.Principal.WindowsIdentity.GetCurrent().Name返回完全相同的名称,无论设置(我自己的帐户,这显然有获得我正在寻找的文件)。

我会后的事情我做过尝试,但老实说,你能在这种情况下,其中一个设置不应该影响这个问题的问题尝试。我试图关闭模拟,并且这也使得File.Exists()调用返回True(由于我自己的用户具有远高于运行appPool的帐户的权限,因此我的思想开始流失)。

任何想法,我可以研究解决这个问题?

回答

4

确定发生了什么事是服务器不能委托的身份验证。也就是说,它不能代表用户向另一台服务器行事,而只能向其自身行事。

代表团不是基本身份验证的一个问题,因为服务器知道你的密码(因为你告诉它作为基本身份验证的一部分),所以它可以在远程计算机进行认证。

如果您处于Active Directory/Kerberos环境中,则必须将服务器配置为受委托代理。我从来没有这样做过,所以我不确定如何,但这是一个配置问题,而不是编程问题。根据您的配置,您可能必须配置服务器计算机帐户或IIS身份或两者。

在这里看到一些参考:

如果在Kerberos环境中,您必须使用基本身份验证,或者从一些用户那里得到的密码其他方式,并自己拨打LogonUser来冒充用户。如果使用基本身份验证或以任何其他方式使用明文密码,则当然必须使用HTTPS/TLS以确保安全。

+0

不幸的是,我不能设置这种代表团,因此我们必须使用基本身份验证,至少不会解决问题File.Exists运行。不幸的是,后台问题是我无法在其他服务器(具有文件共享的相同服务器)上调用Web服务,因为我获得了401未授权。不幸的是,基本身份验证并不能解决这个问题,即使它看起来也像委托问题一样。 – Tobberoth

+0

没有Kerberos委托,您无法将您的凭据传递给另一台IIS服务器。这是IIS的局限性,也称为双跳问题。 – NoviceProgrammer

+0

@tobberoth,您可以在基本身份验证会话中找到密码,因为它是会话变量之一。这应该使您能够设置显式的基本认证连接到其他Web服务。 – Ben