2015-05-02 248 views
1

我知道这个问题已被询问很多次,但我的问题是不同的。我正在开发一个启用了Windows身份验证和模拟的Web应用程序。我登录到我的电脑domain\user。在这个应用程序中,我只是在网络计算机目录中创建一个名为newDir的目录,例如\\computerName\myFolder。我对此目录拥有完全的访问控制权。当我在web.config文件中明确输入我的用户名和密码<identity impersonate="true" userName="domain\user" password="pass">并运行应用程序时,它不会提示输入用户名和密码,而是按预期方式在指定的目录中创建目录。但是当我从identity元素中删除用户名和密码时,impersonation打开并运行应用程序,它会提示输入用户名和密码,但不会接受我从web.config文件中的identity元素中删除的相同用户名和密码,有时它不会提示输入用户名和密码,只显示例外页面access to the path "\\computerName\myFolder\newDir" is denied访问路径“”被拒绝

为了测试我添加了一个线检查,根据哪个用户名运行代码:

Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name + "<br/>");

它打印出来的一样domain\user用户名。

有没有人知道这里发生了什么?

回答

1

听起来像使用模拟访问UNC路径与本地路径是一种特殊情况。根据https://msdn.microsoft.com/en-us/library/aa292118%28v=vs.71%29.aspx,“如果应用程序驻留在UNC共享上,ASP.NET始终模仿IIS UNC令牌访问该共享,除非使用配置的帐户。如果您提供明确配置的帐户,ASP.NET将优先使用该帐户到IIS UNC令牌。“

这个答案UNC access whilst using impersonation asp.net也有一些指针。

听起来您可能只限于一个用户访问UNC用户 - 无论是在web.config中配置,还是应用程序池标识或您为委派选择的用户。

+0

出于安全原因,Windows身份验证不会以纯文本形式向Web服务器提供用户的用户名和密码,因此Web服务器无法通过网络以用户身份进行身份验证。 (理论上,可以通过Kerberos委托在域内模拟,但这更复杂,我猜ASP.NET不支持它。) –