none
ASP.NET site + MOSS. Удаленная работа с библиотеками SP. RRS feed

  • Общие обсуждения

  • Здравия желаю.

    У меня есть потребность реализовать взаимодействие между сайтом (ASP.NET, IIS) и библиотеками MOSS 2007.
    Задача состоит в извлечении списка библиотек, файлов и, главное, информации о файлах и реализации CheckOut функционала через сайт.
    Сайт использует windows-аутентификацию и impersonate установлен в "true".

    Для работы с MOSS использую OfficeServerSDK, т.е. библиотеки: Microsoft.SharePoint и Microsoft.SharePoint.Administration.
    Пользователи имеют полные права владельцев в MOSS.
    При работе в режиме debug (запуск приложения из VS2008) все работает просто на "ура". Никаких ошибок, полный доступ и свобода действий.
    Если же сайт опубликован и запущен под IIS, то пользователь не идентифицируется, как пользователь MOSS. Аутентификация не проходит и я не могу даже вытащить список библиотек из сайта созданного через SPSite(url), не говоря уже о работе с файлами!..


    Пробовал использовать UserToken в SPSite следующим образом:

    WindowsIdentity wi = WindowsIdentity.GetCurrent();
    WindowsImpersonationContext wic = wi.Impersonate();
    byte[] arrToken = BitConverter.GetBytes(wi.Token.ToInt32());
    //
    site = new SPSite(CurrentSPSiteURL, new SPUserToken(arrToken));

    Но массив arrToken при такой инициализации содержит всего 4 байта. Такой пользователь MOSS не устраивает и права никакие не получает.

    Попробовал посмотреть какой UserToken получается в случае запуска приложения из под VS2008, а также UserToken пользователя владельца у создаваемого объекта SPSite(url). Доменный пользователь один и тот же: и на сайте и в MOSS владельцах. Он же и администратор MOSS.
    В результате получил разные UserToken:

    - 44 байта для текущего пользователя.
    - 520 байтов для владельца созданного сайта (доменный пользователь тот же!).

    Скопировал UserToken из 44-байтов и создал SPSite с ним.
    При запуске из под VS все работает.
    Из под IIS пользователь получил права на извлечение списка библиотек и файлов, но нет никаких прав на работу с файлами (CheckOut функционал)!
    Все ответственные операции инициализации объектов и работы с файлами испольняются в рамках делегатов SPSecurity.RunWithElevatedPrivileges, кроме объевления объектов и переменных, которые делегаты инициализируют.

    А теперь, внимание, вопросы:

    1) Как правильно, с точки зарения MOSS, инициализировать UserToken?
    2) Можно ли обойтись без создания объекта SPSite c UserToken? Возможно, какие-то настройки в конфиге или в MOSS Security?
    3) Можно ли организовать работу с библиотеками и файлами другим способом, не используя SDK? Возможно, Lists из WSS, но в таком случае нужны имя и пароль пользователя, а пользователи доменные, как изъять пароль не нарушая конфедициальность и на запрашивая ввести ручками, понятия не имею...
    23 июня 2009 г. 10:54

Все ответы

  • 1. Сайт и MOSS на одном сервере?
    2. Можно через web-services от MOSS, см. SDK
    23 июня 2009 г. 11:15
  • 1) Да, сайт и MOSS на одном сервере.

    2) Чтобы получить доступ к файлам через сервисы, необходимо задавать имя пользователя и пароль при инициализации сервиса, например, сервиса Lists.
    Но пользователи-то доменные, авторизиция windows. Можно ли как-то вытащить их пароль и запихать в сервис? Или с сервисами можно обойтись без авторизации?
    23 июня 2009 г. 12:02
  • Не нужно. Можно указать DefaultNetworkCredentials

    23 июня 2009 г. 12:15
  • Не нужно. Можно указать DefaultNetworkCredentials

    Спасибо, попробую.

    И все-таки не хотелось бы связываться с сервисами, запросы на XML просто ужасны. Можно ли как-то корректно инициализировать UserToken, чтобы он совпадал с MOSS пользователем?
    24 июня 2009 г. 4:53
  • Да, и даже UserToken не нужен.
    AppPool для сайта и MOSS разный? Если да, то надо смотреть в безопасности, какие есть отказы в момент обращения. 
    Я бы настроил Kerberos, так надежнее.

    24 июня 2009 г. 5:38
  • Попробовал использовать один AppPool. Авторизация вообще проходить перестала, т.е. сайт вообще не грузится... :(

    Завел локального пользователя (локального админа, не доменного), назначил его владельцем для всех баз MOSS. Добавил в администраторы коллекции сайтов и во владельцы нужного мне сайта. Поставил AppPool'у авторизацию через этого пользователя.
    В резильтате сайты получил ошибку "Service Unavailable", как мой, так и сайты MOSS...

    Сделал все проще. Поставил impersonate="true" у сайта и запустил его под AppPool с правами NETWROK SERVICE, т.е. как стоит у сайтов MOSS.
    В результате локально (на PC сервера) работает почти все, но CheckIn выдает ошибку, хотя и проходит. А при открытии на PC в локальной сети - нет...

    Какие права должны быть у пользователя, чтобы под ним можно было запускать приложения из-под IIS?
    24 июня 2009 г. 8:26