gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:53:05 25 4
gpt4 key购买 nike

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

我有一个在 IIS 6.0 上运行的 ASP.NET 网站。在上面,我有一个 .asmx 网络服务。在 .asmx 网络服务中,我使用 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 环境中,则必须将服务器配置为受委托(delegate)。我从来没有这样做过,所以我不确定具体怎么做,但这是配置问题,而不是编程问题。根据您的配置,您可能必须配置服务器计算机帐户和/或 IIS 身份。

引用这里:

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com