У меня есть веб-приложение, которому необходимо читать (и, возможно, записывать) файлы из общего сетевого ресурса. Мне было интересно, как лучше всего это сделать?
Я не могу предоставить сетевой службе или учетным записям aspnet доступ к общему сетевому ресурсу. Я мог бы использовать выдачу себя за другое лицо.
Общий сетевой ресурс и веб-приложение размещены в одном домене, и я могу создать нового пользователя в домене специально для этой цели, однако я не совсем уверен, как объединить точки между созданием файлового потока и указанием учетных данных для использования. в веб-приложении.
К сожалению, диск не отображается как сетевой диск на машине, он доступен мне только как общий сетевой ресурс, поэтому, к сожалению, я не могу сделать прозрачный вызов.
Есть одна проблема, о которой я могу думать с олицетворением ... Я могу олицетворять только одного пользователя на каждый домен приложения I считать, но я рад, что меня исправили. Мне может потребоваться записать этот файл в несколько разных общих папок, что означает, что мне, возможно, придется выдавать себя за нескольких пользователей.
Мне нравится идея создания токена ... если я смогу это сделать, я смогу заранее запросить у пользователя их учетные данные, а затем динамически применить безопасность и выдать им значимые сообщения об ошибках, если в доступе отказано ... Я Я собираюсь играть, но вернусь с обновлением.





У меня не было проблем с прозрачным подключением к сетевым ресурсам, как если бы они были локальными дисками. Единственная проблема, которая может возникнуть у вас, - это то, что вы упомянули: учетная запись aspnet получает доступ к общему ресурсу. Выдача себя за другое лицо, вероятно, лучший способ сделать это.
Вы должны иметь возможность использовать любые объекты файлового потока для доступа к общему сетевому ресурсу, если у него есть буква диска на сервере.
В этом сценарии у меня хорошо сработало выдвижение себя за другое лицо. У нас был мастер, который загружал zip-файл через веб-сайт, но мы сбалансировали загрузку сайта. Поэтому необходимо настроить способ сохранения файла на всех машинах.
Есть много разных способов сделать это. Мы решили сделать все запросы для запуска от имени пользователя, которого мы настроили, и просто добавили запись web.config и установили разрешения безопасности для папок для пользователя. Эта статья kb очень хорошо объясняет настройку.
Учитывая, что у всех уже есть учетные записи домена. Попробуйте встроенную проверку подлинности IIS. Вы получите уродливое окно входа в систему вне сети, но ваши кредиты должны перейти в общий файловый ресурс.
@ lomaxx
Вы говорите, что только у вас есть разрешения на общий ресурс или что вы вручную сопоставили его с буквой диска. Если позже, вы можете использовать ucn \ host \ share так же, как и c: \ shared_folder.
Случайный Было бы обременительным зеркалировать общий ресурс в локальную папку на хосте? Я слышал, что ROBOCOPY очень удобен.
Еще одна идея. Запустите IIS на своем целевом ресурсе, который вы можете читать через http, и если вам нужно написать, исследуйте webdav.
У вас есть несколько вариантов, и один из них, как вы упомянули, - выдача себя за другое лицо. Однако я предпочитаю использовать еще один вызов, который я использовал в прошлом, - это вызов доверенной службы. Предположим на мгновение, что всегда намного безопаснее ограничивать доступ через IIS, чтобы было как можно меньше дыр. С этим давайте пойдем по этому пути.
Создайте службу WCF с несколькими точками входа, и интерфейс может выглядеть следующим образом.
public interface IDocumentService
{
public string BuildTrustedRelationship(string privateKey);
public byte[] ReadFile(string token, string fileName);
public void WriteFile(string token, string fileName, byte[] file);
}
Теперь вы можете очень легко разместить эту службу через службу Windows, и теперь все, что вам нужно сделать, это на Application_start построить отношения со службой, чтобы получить свой токен, и вы отправляетесь в гонки. Еще одна приятная вещь здесь заключается в том, что эта служба является внутренней, надежной, и я даже раньше размещал ее на файловом сервере, поэтому гораздо проще предоставить разрешения на эту операцию.
Если вы можете создать нового пользователя AD, я думаю, что самое простое решение - запустить пул приложений под этой учетной записью AD, что будет означать, что ваше приложение теперь работает от имени пользователя AD. Вам нужно будет добавить пользователя AD в группу рабочих процессов IIS на компьютере, на котором запущено ваше приложение. Затем, пока ваш пользователь AD имеет права на запись в сетевой ресурс, вы сможете использовать UNC-путь в файловых операциях.