Доступ к удаленному файлу с помощью веб-части SharePoint
-
03-07-2019 - |
Вопрос
Недавно я создал программу, которая анализирует удаленный файл из \some_server\c$\directory\file.xls и это прекрасно работает на моем локальном компьютере как обычная aspx-страница.
Затем я помещаю программу в веб-часть form на моей виртуальной машине SharePoint server, и я получаю эту ошибку:Доступ к пути '\some_server\c$\directory\file.xls' запрещен.
Файл является общедоступным для Домен\Аутентифицированные пользователи так что я не уверен, почему в этом было бы отказано?Возможно ли, что мой SharePoint пытается вызвать его с помощью учетной записи локальной или сетевой службы?Как я могу заставить его прочитать?Спасибо.
Решение
Salamander прав, SharePoint не работает с доверием для этого.
Изменение уровня доверия для SharePoint в его web.config с WSS_Medium на Full - это быстрое решение, но это имеет последствия для безопасности..
Другие советы
Просто небольшое замечание, возможно, вы столкнулись с классической проблемой двойного перехода NTLM.Вы можете пройти аутентификацию во внешнем интерфейсе, но поскольку у внешнего интерфейса нет вашего пароля, он не сможет пройти аутентификацию на ресурсе на другом сервере.
Запуск с повышенными привилегиями и настройка разрешений на основе идентификатора пула приложений могут быть одним из способов продвижения вперед.
Я думаю, вам понадобится RunWithElevatedPrivleges, который заставит SharePoint использовать учетную запись пула приложений.Также имейте в виду, что вам нужно будет убедиться, что учетная запись пула приложений имеет доступ к этому сетевому ресурсу.Избегайте использования полного доверия.
Можете ли вы подробнее объяснить, что именно установка уровня доверия делает для вас?
Я бы подумал, что если ваш идентификатор пула приложений является учетной записью домена, вы можете использовать SPSecurity.RunWithElevatedPrivileges использует учетные данные пула приложений для доступа к файлу.Или используйте impersonate для явной передачи учетных данных другой учетной записи.
SharePoint обычно работает в отдельном пуле приложений.Пожалуйста, проверьте подлинность этого пула приложений.
Я думаю, что для доступа к сетевому пути ваш код должен выполняться с ПОЛНЫМ ДОВЕРИЕМ, чего, я не думаю, делает SharePoint.
Почему бы не сохранить файл в SharePoint, чтобы у вас был лучший доступ к нему?Поместите его в скрытую библиотеку и получите к нему доступ с помощью SPSecurity.Запустите с увеличенными привилегиями.
В RWEP есть предостережения.Любая ссылка на SPSite и SPWeb, полученная из SPContext (т.Е. SPContext.Current.Site), по-прежнему будет выполняться с правами вошедшего в систему пользователя.Вы должны явно создать ссылку внутри делегата RWEP.
SPSecurity.RunWithElevatedPrivileges(делегировать() { используя (SPSite site = новый SPSite(SPContext.Current.Site.URL)) { использование (SPWeb web = сайт.OpenWeb()) { //...Сделайте что-нибудь с SPWeb } } });
Если вам нужно получить доступ к файлу извне sharepoint, чтобы обновить его с помощью существующих процессов, вы можете использовать путь к общему файловому ресурсу, который доступен для всех SPDocumentLibrary, но перейдите в меню Действия -> Открыть с помощью проводника Windows, чтобы получить сетевой путь.