我遇到了最棘手的问题,我希望一些ASP.NET专家可以给我一些关于发生了什么的线索。
我在IIS 6.0上运行了一个ASP.NET网站。在它上面,我有一个.asmx webservice。在.asmx webservice中,我使用System.IO.File.Exists()
来检查网络共享上是否存在文件。该网站使用模拟。
这是一个巨大的问题:如果我设置IIS使用基本身份验证运行网站,File.Exists行返回True。如果我将其设置为集成Windows身份验证,则返回False。我没有别的改变,我可以来回改变,完全相同的事情发生。我在调用File.Exists()
之前记录了一些信息,事实上,User.Identity.Name
和System.Security.Principal.WindowsIdentity.GetCurrent().Name
都返回完全相同的名称,无论设置如何(我自己的帐户显然可以访问文件我我正在寻找。
我会发布我尝试过的东西但老实说,在这种情况下你能尝试什么,其中一个不应该影响问题的设置就是问题。我已经尝试关闭模拟,这也使File.Exists()
调用返回True(由于我自己的用户拥有比运行appPool的帐户高得多的权限,这让我大吃一惊)。
我可以考虑解决这个问题的任何想法吗?
答案 0 :(得分:4)
确定发生的事情是服务器无法 委派 身份验证。也就是说,它不能代表用户对另一台服务器起作用,只能对自己起作用。
委派不是基本身份验证的问题,因为服务器知道您的密码(因为您将其作为基本身份验证的一部分告知),因此它可以对远程计算机执行身份验证。
如果您处于Active Directory / Kerberos环境中,则必须将服务器配置为委托信任。我从来没有这样做,所以我不确定如何,但这是一个配置问题,而不是编程。您可能必须配置服务器计算机帐户或IIS标识或两者,具体取决于您的配置。
请参阅此处以获取参考资料:
如果您在Kerberos环境中不,则必须使用基本身份验证,或以其他方式从用户获取密码,并自己致电LogonUser
以模拟用户。如果使用基本身份验证或以其他任何方式使用明文密码,您当然必须使用HTTPS / TLS来保证安全。