У меня есть приложение ASP.NET, использующее проверку подлинности Windows, и я проверяю наличие файла на удаленном сервере.
Я аутентифицируюсь как 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, которая, в свою очередь, имеет полный контроль над общим файлом.
Вот что я не понимаю:
- Когда .NET пытается запросить File.Exists, используется ли thread или process удостоверение личности?
- Если он использует учетные данные процесса - как я могу заставить процесс запускаться от имени MYDOMAIN \ my.username или дать учетной записи NETWORK SERVICE разрешение на чтение файла? (Я думал, что это уже сделано, добавив мою учетную запись компьютера - но это не работает ...)
- Если он использует учетные данные потока - почему я не могу прочитать файл?
С благодарностью будут приняты любые указатели или полезные советы по отладке.
Спасибо
Dylan