Невозможно получить доступ к сетевому ресурсу из приложения - PullRequest
0 голосов
/ 26 июня 2019

У меня проблема с доступом к сетевому ресурсу из моего приложения 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$ или учетную запись зарегистрированного пользователя?

1 Ответ

1 голос
/ 28 июня 2019

Насколько я знаю, если вы используете учетную запись сетевой службы в качестве идентификатора, вам все равно нужно добавить достаточные права доступа к общей папке, поскольку сетевая служба и локальная система оба отображаются в сети как учетная запись компьютера (DOMAIN \ компьютер $).

Подробности шаги, как показано ниже:

1.Правой кнопкой мыши выберите коммент и щелкните по свойству, вы найдете имя вашего компьютера, как показано ниже:

enter image description here

2.Зайдите на сервер общих папок, щелкните папку правой кнопкой мыши и выберите «Свойства». Затем вы можете добавить к нему учетную запись вашего сервера следующим образом (Domain \ Servername $)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...