Пользовательский контекст при анонимном доступе под Iis

Тема в разделе ".NET", создана пользователем *null, 13 июн 2007.

Статус темы:
Закрыта.
  1. *null

    *null Гость

    Здравствуйте!

    Есть IIS 5.1 на WinXP SP2 на котором работает Web Service. К узлу разрешен анонимный доступ, используется администраторская учетная запись.

    Web Service в работе использует DLL-ку, которая вызывает некоторые крипто-функции Windows. Эта библиотека успешно используется в связки с WindowsApplication, а вот с WebService проблемы.

    Так, например вызов CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_LOCAL_MACHINE, "MY") возвращает ошибку ERROR_ACCESS_DENIED - «Access is denied».

    При этом WindowsApplication, запущенное этим же пользователем (под которым узел на анониме работает) и нормально вызывает функции DLL-ки использующие CertOpenStore, никаких ошибок не возникает.

    Если запускаю WebService из под встроенного в Visual Web Developer 2005 EE, тоже все прекрасно работает.

    С чем может быть такое связано? Подозреваю, что под IIS при анонимном доступе WebService все же исполняется не совсем под заданной учетной записью, или накладываются какие то ограничения. Тот же Context.User.Identity.Name при этом пуст.

    Как такое можно побороть?
     
  2. etc

    etc Гость

    <!--QuoteBegin-*null+13:06:2007, 13:32 -->
    <span class="vbquote">(*null @ 13:06:2007, 13:32 )</span><!--QuoteEBegin-->При этом WindowsApplication, запущенное этим же пользователем[/quote]
    Как вы это делаете?
     
  3. *null

    *null Гость

    Наверно я не совсем точно обрисовал суть проблемы.

    Сделал DLL-ку, написанна на C#, которая обеспечивает некоторые крипто-функции, например, зашифровать буфер с данными использую закрытый ключ на который ссылается такой то сертификат.
    Функции библиотеки через P/Invoke обращаются к CryptoApi Windows (да, пришлось сделать именно так - крипто из .net не подходит), той же CertOpenStore.

    Есть C# Windows-Application которое использует данную библиотеку. Использует успешно все работает.
    Приложение запускаю под свой админской учетной записью.

    Возникла необходимость сделать Web-Service, который использует эту библиотеку. Столкнулся с упомянутой выше проблемой - под IIS обращения методов сервиса к функциям ДЛЛ-ки вызывает ошибки. Доступ к узлу с WebService открыт анонимный, используется та же учетная запись под которой я разрабатываю/тестирую WindowsApplication.

    Вот собственно так я это и делаю.
     
  4. Pasha

    Pasha Гость

    <!--QuoteBegin-*null+13:06:2007, 13:32 -->
    <span class="vbquote">(*null @ 13:06:2007, 13:32 )</span><!--QuoteEBegin-->К узлу разрешен анонимный доступ, используется администраторская учетная запись.
    [snapback]69188" rel="nofollow" target="_blank[/snapback]​
    [/quote]Она используется IIS, а не рабочим процессом ASP.NET. Вот, статья ASP.NET Impersonation.
    Если коротко, то проблема исправляется добавлением
    Код (Text):
    <configuration>
    <system.web>
    <identity impersonate="true"/>
    </system.web>
    </configuration>
    в web.config.
     
  5. *null

    *null Гость

    Наверно я не совсем точно обрисовал суть проблемы.

    Сделал DLL-ку, написанна на C#, которая обеспечивает некоторые крипто-функции, например, зашифровать буфер с данными использую закрытый ключ на который ссылается такой то сертификат.
    Функции библиотеки через P/Invoke обращаются к CryptoApi Windows (да, пришлось сделать именно так - крипто из .net не подходит), той же CertOpenStore.

    Есть C# Windows-Application которое использует данную библиотеку. Использует успешно все работает.
    Приложение запускаю под свой админской учетной записью.

    Возникла необходимость сделать Web-Service, который использует эту библиотеку. Столкнулся с упомянутой выше проблемой - под IIS обращения методов сервиса к функциям ДЛЛ-ки вызывает ошибки. Доступ к узлу с WebService открыт анонимный, используется та же учетная запись под которой я разрабатываю/тестирую WindowsApplication.

    Вот собственно так я это и делаю.
     
  6. Pasha

    Pasha Гость

    <!--QuoteBegin-*null+13:06:2007, 14:57 -->
    <span class="vbquote">(*null @ 13:06:2007, 14:57 )</span><!--QuoteEBegin-->Доступ к узлу с WebService открыт анонимный, используется та же учетная запись под которой я разрабатываю/тестирую WindowsApplication.
    [snapback]69200" rel="nofollow" target="_blank[/snapback]​
    [/quote]Кем используется?
     
  7. *null

    *null Гость

    Pasha, спасибо за совет! На другом форуме мне посоветовали прописать userName="SYSTEM" в processModel machine.config - помогло.

    "Кем используется" - имел ввиду, что к узлу открыт анонимный доступ, при этом используется учетная запись амдинистратора, под которой я обычно и сижу/пишу/тестирую.
     
  8. *null

    *null Гость

    Pasha, спасибо за совет! На другом форуме мне посоветовали прописать userName="SYSTEM" в processModel machine.config - помогло.

    "Кем используется" - имел ввиду, что к узлу открыт анонимный доступ, при этом используется учетная запись амдинистратора, под которой я обычно и сижу/пишу/тестирую.
     
  9. Pasha

    Pasha Гость

    <!--QuoteBegin-*null+13:06:2007, 15:21 -->
    <span class="vbquote">(*null @ 13:06:2007, 15:21 )</span><!--QuoteEBegin-->"Кем используется" - имел ввиду, что к узлу открыт анонимный доступ, при этом используется учетная запись амдинистратора, под которой я обычно и сижу/пишу/тестирую.
    [snapback]69203" rel="nofollow" target="_blank[/snapback]​
    [/quote]Все таки советую прочитать статью :)
    "Используется" одновременно 3 разных учетных записи:
    1. Учетная запись пользователя, под которым запущено клиентское приложение.
    2. Учетная запись, используемая IIS для анонимных пользователей (настраивается в св-вах virtual folder).
    3. Учетная запись, под которым запущен процесс рабочий процесс asp.net (настраивается в machine.config/processModel).

    Учетная запись, от имени которой выполняется код приложения (та самая, у которой не хватает прав) определяется следующим образом:
    1. По умолчанию: Сonfiguration/system.web/identity/@impersonate = false, используется №3.
    2. Сonfiguration/system.web/identity/@impersonate = true - используется токен, полученный от IIS (№2 или №1)
    3. Сonfiguration/system.web/identity/@impersonate = true, явно заданы identity/@userName и identity/@password. - они и используются.

    Изменение processModel machine.config меняет учетную запись для всех приложений, изменение identity - только для одного.

    Это так, примерно. По ссылке подробно расписано.
     
  10. etc

    etc Гость

  11. *null

    *null Гость

    Pasha, etc, спасибо за ссылки и советы! Буду разбираться.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей