C# 集成Windows身份验证中断文件。存在

C# 集成Windows身份验证中断文件。存在,c#,asp.net,iis,windows-authentication,basic-authentication,C#,Asp.net,Iis,Windows Authentication,Basic Authentication,我遇到了最棘手的问题,我希望一些ASP.NET专家能给我一些线索,看看到底发生了什么 我有一个ASP.NET网站在IIS 6.0上运行。在它上面,我有一个.asmx网络服务。在.asmx webservice中,我使用System.IO.File.Exists()检查网络共享上是否存在文件。该站点使用模拟 这里有一个大问题:如果我将IIS设置为使用基本身份验证运行站点,那么File.Exists行将返回True。如果将其设置为集成Windows身份验证,则返回False。我什么也不改变,我可以前

我遇到了最棘手的问题,我希望一些ASP.NET专家能给我一些线索,看看到底发生了什么

我有一个ASP.NET网站在IIS 6.0上运行。在它上面,我有一个.asmx网络服务。在.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()
调用返回为真(这让我大吃一惊,因为我自己的用户拥有的权限远远高于运行appPool的帐户)


有什么办法可以解决这个问题吗?

好的,发生的情况是服务器无法委派身份验证。也就是说,它不能代表用户对另一台服务器进行操作,只能对自己进行操作

对于基本身份验证,委派不是问题,因为服务器知道您的密码(因为您在基本身份验证中告诉了它),所以它可以对远程计算机执行身份验证

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

有关参考资料,请参见此处:


如果您不在Kerberos环境中,则必须使用基本身份验证,或者以其他方式从用户处获取密码,然后自己调用
LogonUser
模拟用户。如果使用基本身份验证或以任何其他方式使用明文密码,您当然必须使用HTTPS/TLS进行安全保护。

确定发生的情况是服务器无法委派身份验证。也就是说,它不能代表用户对另一台服务器进行操作,只能对自己进行操作

对于基本身份验证,委派不是问题,因为服务器知道您的密码(因为您在基本身份验证中告诉了它),所以它可以对远程计算机执行身份验证

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

有关参考资料,请参见此处:


如果您不在Kerberos环境中,则必须使用基本身份验证,或者以其他方式从用户处获取密码,然后自己调用
LogonUser
模拟用户。如果使用基本身份验证或以任何其他方式使用明文密码,您当然必须使用HTTPS/TLS进行安全保护。

不幸的是,我无法设置这种委托,因此我们必须使用基本身份验证运行,这至少解决了文件的问题。存在问题。不幸的是,背景问题是我不能在另一台服务器(拥有文件共享的同一台服务器)上调用webservice,因为我没有得到授权。不幸的是,基本身份验证无法解决该问题,即使它看起来也是一个委派问题。没有Kerberos委派,您无法将凭据传递到另一台IIS服务器。这是IIS的限制,也称为双跳问题。@tobberoth,您可以在基本身份验证会话中找到密码,因为它是会话变量之一。这应该使您能够设置到其他web服务的显式基本身份验证连接。@Ben,是的,这是我以前使用的一个解决方案,在两个站点都是完全基本身份验证的情况下,这是一个很好的解决方案。不过,关于我的问题的一个更新,我让它工作了,我对它工作的原因的唯一猜测是,如果您从源上的basic转到目标上的集成windows,.UseDefaultCredentials就可以工作了。Basic to Basic和Int.Windows to Int.Windows没有。不幸的是,我无法设置这种委托,因此我们必须使用基本身份验证运行,这至少解决了文件存在的问题。不幸的是,背景问题是我不能在另一台服务器(拥有文件共享的同一台服务器)上调用webservice,因为我没有得到授权。不幸的是,基本身份验证无法解决该问题,即使它看起来也是一个委派问题。没有Kerberos委派,您无法将凭据传递到另一台IIS服务器。这是IIS的限制,也称为双跳问题。@tobberoth,您可以在基本身份验证会话中找到密码,因为它是会话变量之一。这应该使您能够设置到其他web服务的显式基本身份验证连接。@Ben,是的,这是我以前使用的一个解决方案,在两个站点都是完全基本身份验证的情况下,这是一个很好的解决方案。尽管我的问题有了更新,但我还是让它工作了,我对它工作的原因的唯一猜测是,如果你从源代码的basic开始集成