我使用的是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 \ Web服务器组,这反过来又对共享文件的完全控制权的成员。
这就是我不明白:
- 当.NET尝试查询File.Exists,是它正在使用的线程或进程的身份?
- 如果它在使用过程中的凭据-怎样才能既强制进程作为MYDOMAIN \ my.username运行,或给网络服务帐户的权限读取文件? (我认为这已经加入我的计算机帐户做 - 但它不工作...)
- 如果是使用线程的凭据 - 为什么我不能读取文件?
任何指针或有用的调试技巧将是非常感激地接受。
谢谢,
迪伦