У меня есть код, запущенный в asp.mvc-приложении внутри IIS 7. Код должен сохранять файл на общий ресурс UNC. Эта функция вызывается из некоторого кода контроллера, с filePathname = «\ MYSRV \ сайтов \ Docs \ 10080003 \ egg.txt»Пытаясь записать файл в UNC из ASP.NET MVC
public void EnsureDocument(string filePathName ,string content,WindowsIdentity identity)
{
System.Security.Principal.WindowsImpersonationContext impersonationContext = null;
try
{
impersonationContext = ((System.Security.Principal.WindowsIdentity)identity).Impersonate();
File.WriteAllText(filePathName, content);
}
finally
{
impersonationContext.Undo();
}
}
Вызов из ASP.NET MVC контроллер выглядит следующим образом ...
// pass running identity
documentSvc.EnsureDocument(filePathname, content, WindowsIdentity.GetCurrent());
//documentSvc.EnsureCaseDocument(filePathname,content,System.Security.Principal.WindowsIdentity)User.Identity);
звонок из теста NUnit выглядит следующим образом ...
documentSvc.EnsureDocument(filePathname, content, WindowsIdentity.GetCurrent());
симптомы, что код NUnit падает файл НО вызов из aSP.NET MVC не уронить п Ile.
** Тест 1: ПРОПУСКА, КАПЛИ FILE ** Код Nunit посылает через тождество {AuthType = Keberos, ImpersonationLevel = нет, Name = "DOMAIN \ Фред дневникам"}, и это падает файл на КСН.
** Тест 2: FAILS, НЕ DROP FILE ** С Олицетворять = "истина" в web.config, и делает вызов
documentSvc.EnsureDocument(filePathname, content, WindowsIdentity.GetCurrent());
asp.net MVC код посылает через { AuthType = Keberos, ImpersonationLevel = Delegation, Name = "DOMAIN \ Fred Blogs"}, и файл не отбрасывается.
** Тест 3: FAILS, НЕ DROP FILE ** Без Олицетворять = "истинный" в web.config и вызывающей и делает вызов
documentSvc.EnsureCaseDocument(filePathname,content,System.Security.Principal.WindowsIdentity)User.Identity);
asp.net MVC код посылает через {AuthType = Negotiate, ImpersonationLevel = Delegation, Name = "DOMAIN \ Fred Blogs"}, и файл не будет удален.
?
Да, это проблема безопасности; на моем dev box код работает как IIS APPOOL \ ASP.NET 4.0, а на промежуточном поле код работает как NETWORK SERVICE; Цель impersonate = true в файле web.config и идентификаторе кода ImpressionContext = ((System.Security.Principal.WindowsIdentity)) .Impersonate(); код должен сделать код запущенным как пользователь, который использует браузер IE. ура – user206890