我有一个使用Windows身份验证的ASP.NET应用程序,我正在测试远程服务器上是否存在文件。
我正在验证为MYDOMAIN \ my.username - 这可行。
该文件是\ MYSERVER \ WebShare \ example.txt。该文件存在。我可以在登录为MYDOMAIN \ my.username时从各种主机打开它。在Windows资源管理器中,有效权限表明MYDOMAIN \ my.username完全控制此文件。
如果我附加调试器并在观察窗口中输入$user
,我可以看到当前的线程正在以MYDOMAIN \ my.username运行,而当前的进程仍然以NT AUTHORITY\NETWORK SERVICE
运行 - 观察窗口的相关位在下面重现:
$user {...} $user register
+- Process {...} TOKEN
| +- Name NT AUTHORITY\NETWORK SERVICE User Name
| +- User SID S-1-5-20 SID
| +- Session Id 0 DWORD
| +- Loggin Id 000003e4-00000000 LUID
| +- Impersonation Level N/A (not impersonating) SECURITY_IMPERSONATION_LEVEL
+- Thread {...} TOKEN
+- Name MYDOMAIN\my.username User Name
+- User SID S-1-5-21-... SID
+- Session Id 0 DWORD
+- Loggin Id 018622ef-00000000 LUID
+- Impersonation Level Impersonate SECURITY_IMPERSONATION_LEVEL
运行ASP.NET的服务器是MYDOMAIN \ Webservers组的成员,后者又可以完全控制共享文件。
这是我不明白的地方:
非常感谢任何指针或有用的调试技巧。
谢谢,
迪伦
答案 0 :(得分:2)
在这些情况下,我总是启动Sysinternals进程监视器并过滤掉有问题的文件。 从那里,您可以看到实际访问该文件的帐户。
通常,如果您没有模拟,则将使用运行应用程序池的帐户。 您的应用程序池帐户是什么?
关于问题2: 您可以通过在资源管理器中右键单击文件和所选权限来设置文件的正确权限。从那里,您可以添加网络服务帐户并授予其读取权限。
你在运行什么操作系统? 根据操作系统的不同,默认的应用程序池帐户是Network Service或AppPoolIdentity,因此请确保选择正确的帐户。