c# - 集成 Windows 身份验证破坏了 File.Exists

标签 c# asp.net iis windows-authentication basic-authentication

我遇到了最奇怪的问题,我希望一些 ASP.NET 专家能给我一些关于发生了什么的线索。

我有一个在 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 的帐户拥有更高的权限)。

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

最佳答案

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

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

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

请参阅此处获取一些引用:

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

关于c# - 集成 Windows 身份验证破坏了 File.Exists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20266257/

相关文章:

ASP.NET 主题示例/入门工具包

asp.net - 当前页面索引值无效。它必须 >= 0 且 < PageCount

asp.net - 在虚拟应用程序中忽略表单例份验证

asp.net - Application_Start 未在 IIS 中触发

c# - 如何读取 Response 主体并将其更改为 Controller 的覆盖 OnActionExecuted 方法

javascript - 字符串转 UTF8 转 SHA256 转 BASE64

c# - 如何知道用户更改 winform 中的任何值?

c# - 多维数组的集合等价物是什么?

asp.net - HTML 电子邮件中的嵌入图像无法在手机上显示

c# - 运行一段时间后与 ServiceKnownType 相关的 WCF CommunicationException(或 IIS 应用程序池回收?)