Включение PUT в IIS 7.5 для обработчика ASHX с использованием аутентификации Windows - PullRequest
7 голосов
/ 14 июля 2011

У меня есть веб-сайт ASP.NET (.NET 4), который использует http PUT для универсального обработчика .ashx.Вызов PUT происходит из внешнего интерфейса Silverlight.Все работает в VS 2010 на моей локальной машине (веб-сервер Cassini).

Затем я развернул на IIS7.5 Win Server 2008 R2 box.

Silverlight / веб-сайт в порядке, но вызовы PUT для обработчика .ashx удовлетворяются приглашением для входа в Windows.
Это локальная интрасеть, поэтому аутентификация Windows (с поставщиками NTLM и Negotiate) является единственнойвключенная аутентификация.

Затем я прочитал это: http://blogs.msdn.com/b/joseph_fultz/archive/2009/07/23/enabling-the-put-verb-with-handlers-and-iis-7-0.aspx

Я последовал его предложению, и теперь я могу делать вызовы PUT через мой обработчик .ashx.Проблема только в группе администраторов веб-сервера.Никто не может.Они встречаются с приглашением для входа в Windows.

Есть идеи, что это может быть?

Я не могу дать всем сотрудникам компании права администратора на веб-сервере.Без сомнения, они отрезали бы мне одну руку, съели передо мной руку и показали бы мне дверь.

1 Ответ

10 голосов
/ 19 июля 2011

Хорошо, я понял это.

Вот ключевые элементы конфигурации в IIS 7.5:

  1. Под аутентификацией Windows / провайдерами - NTLM должен был быть поверх согласования
  2. Домен Пользователям необходим доступ на запись в каталог, содержащий обработчик ashx
  3. Авторизация URL не была включена в качестве роли на веб-сервере. Я добавил его и вставил в файл web.config в system.webServer:

    <security>
        <authorization>
            <remove users="*" roles="" verbs="" />
            <add accessType="Allow" users="*" verbs="GET,HEAD,POST,PUT,DELETE,DEBUG" />
        </authorization>
    </security>
    

(Я немного урежу это, но пока это работает)

Весь мой элемент system.webServer выглядит следующим образом:

<system.webServer>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
    <defaultDocument>
        <files>
            <clear />
            <add value="default.aspx" />
        </files>
    </defaultDocument>
    <handlers accessPolicy="Read, Write, Execute, Script">
        <remove name="WebDAV" />
        <remove name="SimpleHandlerFactory-Integrated-4.0" />
        <remove name="SimpleHandlerFactory-Integrated" />
        <add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG,PUT" type="System.Web.UI.SimpleHandlerFactory" resourceType="Unspecified" requireAccess="Write" preCondition="integratedMode" />
        <add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG,PUT" type="System.Web.UI.SimpleHandlerFactory" resourceType="Unspecified" requireAccess="Write" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <security>
        <authorization>
            <remove users="*" roles="" verbs="" />
            <add accessType="Allow" users="*" verbs="GET,HEAD,POST,PUT,DELETE,DEBUG" />
        </authorization>
    </security>

</system.webServer>

Это сделал это.

...