У меня проблема с доступом к сетевому ресурсу из моего приложения MVC.
Приложение размещено на IIS, установленном на удаленном компьютере с именем INTRANET, который подключен к тому же домену.
Веб-сайтиспользует пул приложений, настроенный для Network Service
.Включена анонимная аутентификация и включена проверка подлинности Windows.
Когда я отлаживаю приложение локально (IIS Express и Visual Studio открыты с правами администратора), проблем не возникает.Я могу получить доступ к сетевому ресурсу и загрузить файл.
Проблема возникает после публикации приложения на INTRANET
.Я открываю веб-браузер, захожу на http://intranet/, вход в систему с учетными данными моего домена и затем пытаюсь вызвать действие, которому необходим доступ к общедоступному ресурсу UNC.Затем возникает ошибка:
Доступ запрещен по пути \\ MyServer \ MyShare \ MyFolder
Действие контроллера выглядит следующим образом:
public ActionResult DownloadAttachment(int id)
{
try
{
using (var ctx = new SyzyfContext())
{
var taskId = ctx.ZgloszeniePlik.Where(zp => zp.ID == id).First().ZgloszenieId;
var file = ctx.ZgloszeniePlik.Where(zp => zp.ID == id).First().nazwa;
var fileLof = file.LastIndexOf(".") + 1;
var fileLen = file.Length;
var fileLofs = file.LastIndexOf(@"\") + 1;
var fileName = file.Substring(fileLofs, fileLen - fileLofs);
var fileToCopy = @"\\Alicja2\Zadania_rep\rep" + id.ToString("D6") + ".fle";
var newFile = @"\\Agata\Repozytorium\" + taskId.ToString() + @"\" + fileName;
if (!Directory.Exists(@"\\Agata\Repozytorium\" + taskId.ToString()))
{
Directory.CreateDirectory(@"\\Agata\Repozytorium\" + taskId.ToString());
}
using (var input = new FileStream(fileToCopy, FileMode.Open, FileAccess.Read, FileShare.Read))
{
if (!System.IO.File.Exists(newFile))
{
using (var outputFile = new FileStream(newFile, FileMode.Create))
{
var buffer = new byte[0x10000];
int bytes;
while ((bytes = input.Read(buffer, 0, buffer.Length)) > 0)
{
outputFile.Write(buffer, 0, bytes);
}
}
}
}
byte[] fileBytes = System.IO.File.ReadAllBytes(newFile);
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}
}
catch (Exception ex)
{
ViewBag.Message = ex.Message;
return View("Error");
}
}
Я думаю, что я неправильно понимаю всю конфигурацию IIS.Насколько я знаю, когда пул приложений настроен для сетевой службы, он всегда использует учетную запись DOMAIN\MACHINE$
(домен видит его как объект компьютера).Таким образом, я получил разрешение на полный доступ для этого общего ресурса UNC к учетной записи MACHINE$
.Это все еще не работает.
Какой логин использует приложение, когда пользователь пытается вызвать вышеуказанное действие?Использует ли он учетную запись DOMAIN\MACHINE$
или учетную запись зарегистрированного пользователя?