2010-09-16 2 views
0

У меня есть код, запущенный в 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"}, и файл не будет удален.

?

ответ

0

Подходящая идентификация NUnit - это вы, а идентификатор запуска MVC, вероятно, IUSR _... Я думаю, что это просто проблема безопасности.

+0

Да, это проблема безопасности; на моем dev box код работает как IIS APPOOL \ ASP.NET 4.0, а на промежуточном поле код работает как NETWORK SERVICE; Цель impersonate = true в файле web.config и идентификаторе кода ImpressionContext = ((System.Security.Principal.WindowsIdentity)) .Impersonate(); код должен сделать код запущенным как пользователь, который использует браузер IE. ура – user206890

Смежные вопросы