У меня проблемы с подражанием вошедшему в систему пользователю и доступу к unc-файлам. Я пробовал использовать этот пример кода:
using System.Security.Principal;
...
// Obtain the authenticated user's Identity
WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;
WindowsImpersonationContext ctx = null;
try
{
// Start impersonating
ctx = winId.Impersonate();
// Now impersonating
// Access resources using the identity of the authenticated user
}
// Prevent exceptions from propagating
catch{}
finally
{
// Revert impersonation
if (ctx != null)
ctx.Undo();
}
// Back to running under the default ASP.NET process identity
Если я пытаюсь получить доступ к файлу локально, где в комментарии говорится Доступ к ресурсам с использованием идентификатора аутентифицированного пользователя , он работает точно так же, как и должен. Однако если я попытаюсь сделать то же самое с файлом на файловом сервере где-нибудь, используя UNC, например \\ ServerName \ Share \ FileName.txt, не имеет значения, что у олицетворенной учетной записи достаточно прав. Приложение выдает исключение, сообщающее, что учетной записи ASP.NET не хватает прав.
Я также пытался использовать неуправляемый код для выполнения олицетворения, и тогда это работает! Локальный файл или UNC, не имеет значения, работает как шарм!
Проблема в том, что вы должны предоставить пароль, и, поскольку это права пользователей, вошедших в систему, я хочу проверить, что я не могу этого предоставить.
Кто-нибудь знает, почему приложение ведет себя так? Это какой-то параметр конфигурации, который мне нужно установить?