Мы столкнулись с интересной ситуацией, которая нуждается в решении, и мои поиски оказались нил. Поэтому я обращаюсь к сообществу SO за помощью.
Проблема заключается в следующем: у нас есть необходимость программного доступа к совместно используемому файлу, которого нет в нашем домене, и он не находится в доверенном внешнем домене через удаленный файловый обмен /UNC. Естественно, нам нужно предоставить учетные данные удаленной машине.
Как правило, один разрешает эту проблему одним из двух способов:
- Сопоставьте общий доступ к файлу в качестве диска и поставьте учетные данные в это время. Обычно это делается с помощью команды
NET USE
или функций Win32, которые дублируютNET USE
. - Доступ к файлу с UNC-путём, как если бы удаленный компьютер находился в домене, и убедитесь, что учетная запись, под которой выполняется программа, дублируется (включая пароль) на удаленном компьютере в качестве локального пользователя. В основном используется тот факт, что Windows автоматически будет предоставлять текущие учетные данные пользователя, когда пользователь попытается получить доступ к общему файлу.
- Не используйте удаленный обмен файлами. Используйте FTP (или некоторые другие средства), чтобы перенести файл, работать с ним локально, а затем перенести его обратно.
По различным и различным причинам наши архитекторы безопасности/сети отвергли первые два подхода. Второй подход, очевидно, является дырой в безопасности; если удаленный компьютер взломан, локальный компьютер находится под угрозой. Первый подход неудовлетворителен, поскольку недавно смонтированный диск является общим ресурсом, доступным для других программ на локальном компьютере во время доступа к файлу программой. Несмотря на то, что вполне возможно сделать это временным, это все еще дыра по их мнению.
Они открыты для третьего варианта, но администраторы удаленной сети настаивают на SFTP, а не на FTPS, а FtpWebRequest поддерживает только FTPS. SFTP больше подходит для брандмауэра и есть несколько библиотек, которые я мог бы использовать для этого подхода, но я бы предпочел уменьшить свои зависимости, если смогу.
Я искал MSDN для управляемого или win32 средства использования удаленного совместного использования файлов, но я не смог придумать ничего полезного.
И поэтому я спрашиваю: есть ли другой способ? Я пропустил сверхсекретную функцию win32, которая делает то, что я хочу? Или я должен использовать некоторый вариант варианта 3?