Доступ к файлам из общего сетевого ресурса в веб-приложении c # - PullRequest
9 голосов
/ 27 августа 2008

У меня есть веб-приложение, которое должно читать (и, возможно, записывать) файлы из общего сетевого ресурса. Мне было интересно, как лучше всего это сделать?

Я не могу предоставить сетевой службе или учетным записям aspnet доступ к общему сетевому ресурсу. Я мог бы использовать олицетворение.

Сетевой ресурс и веб-приложение размещены в одном домене, и я могу создать нового пользователя в домене специально для этой цели, однако я не совсем уверен, как объединить точки между созданием файлового потока и указанием учетные данные для использования в веб-приложении.


К сожалению, диск не назначен сетевым диском на компьютере, он доступен мне только как сетевой ресурс, поэтому, к сожалению, я не могу сделать прозрачный вызов.

Есть одна проблема, с которой я могу столкнуться при олицетворении ... Я могу выдать себя за одного пользователя на домен приложения. Я думаю , но я рад, что меня исправили. Мне может понадобиться записать этот файл в несколько разных общих ресурсов, что означает, что мне, возможно, придется выдавать себя за нескольких пользователей.

Мне нравится идея создания токена ... если я смогу это сделать, я смогу заранее запросить у них учетные данные, а затем динамически применить меры безопасности и дать им значимые сообщения об ошибках, если доступ запрещен. .. Я иду играть, но я вернусь с обновлением.

Ответы [ 5 ]

3 голосов
/ 27 августа 2008

Учитывая, что у всех уже есть доменные учетные записи. Попробуйте встроенную проверку подлинности IIS. Вы получите уродливое окно входа в сеть, но ваши кредиты должны перейти к общей папке.

@ lomaxx
Вы говорите, что только у вас есть права доступа к общему ресурсу или вы вручную сопоставили его с буквой диска. Если позднее вы можете использовать ucn \ host \ share точно так же, как и папку c: \ shared_folder.

Random Будет ли обременительно отражать общий ресурс в локальной папке на хосте? Я слышал, что РОБОКОПИЯ очень удобна.

Другая идея. Запустите IIS на целевом ресурсе, который вы можете прочитать через http, и, если вам нужно написать, исследуйте webdav.

0 голосов
/ 10 августа 2012

Если вы можете создать нового пользователя AD, я думаю, что самое простое решение - запустить пул приложений с правами этой учетной записи AD, что означает, что ваше приложение теперь работает как пользователь AD. Вам потребуется добавить пользователя AD в группу рабочих процессов IIS на компьютере, на котором выполняется ваше приложение. Тогда, пока ваш пользователь AD имеет права на запись в сетевой ресурс, вы сможете использовать путь UNC в файловых операциях.

0 голосов
/ 10 августа 2012

У вас есть несколько вариантов, и один из них, как вы упомянули, - подражание. Тем не менее, еще один, который я люблю использовать и использовал в прошлом, это вызов доверенного сервиса. Давайте на минутку предположим, что всегда гораздо безопаснее ограничить доступ через 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 установить отношения со службой, чтобы получить свой токен, и вы отправитесь в гонки. Еще одна приятная вещь - это то, что этот сервис является внутренним, доверенным, и я даже раньше размещал его на файловом сервере, поэтому намного проще предоставлять разрешения для этой операции.

0 голосов
/ 27 августа 2008

Олицетворение работало хорошо для меня в этом сценарии. У нас был мастер, который загрузил zip-файл через веб-сайт, но мы сбалансировали загрузку сайта. Поэтому необходимо настроить способ сохранения файла на всех машинах.

Есть много разных способов сделать это. Мы решили сделать все запросы для запуска под пользователем, которого мы настроили, и просто добавили запись web.config и настроили разрешения безопасности на папки для пользователя. Эта kb статья очень хорошо объясняет настройку.

0 голосов
/ 27 августа 2008

У меня не было проблем с прозрачным подключением к сетевым ресурсам, как если бы они были локальными дисками. Единственная проблема, с которой вы можете столкнуться, - это то, что вы упомянули: получение учетной записи aspnet для доступа к этой папке. Олицетворение, вероятно, лучший способ сделать это.

Вы должны иметь возможность использовать любые объекты файлового потока для доступа к общему сетевому ресурсу, если у него есть буква диска на сервере.

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