Я просто хочу включить базовую аутентификацию только для привязки одного домена, а остальные оставить общедоступными. Возможно ли это с IIS?
Информация привязки для веб-сайта используется, чтобы определить, на какой веб-сайт направляются входящие запросы. (службой активации Windows и http.sys).
Для каждого веб-сайта вы можете включить различные методы аутентификации для всего сайта или определенного URL-адреса внутри сайта, но не на основе имени хоста.
У вас есть как минимум два варианта:
Вариант первый заключается в использовании двух отдельных веб-сайтов, указывающих на один и тот же физический каталог и использующих один и тот же файл web.config в корне сайта.
У вас по-прежнему могут быть разные методы аутентификации для двух сайтов.
Недостатком здесь является то, что у вас есть два набора файлов журнала, и некоторые изменения в конфигурации также нужно делать дважды.
Вариант второй включает Модуль перезаписи URL
Предположим, у вас есть два имени хоста, привязанных к сайту. normal.serverfault.com
и secure.serverfault.com
.
Создать виртуальный каталог secure
под корнем сайта, но укажите его в тот же физический каталог самого сайта (такой же, как и в корне).
Для виртуального каталога отключите анонимную аутентификацию и включите базовую аутентификацию.
Теперь добавим на сайт правило перезаписи:
<rewrite>
<rules>
<rule name="Secure">
<match url=".*" />
<conditions>
<add input="{SERVER_NAME}" pattern="^secure\.serverfault\.com$" />
</conditions>
<action type="Rewrite" url="/secure/{R:0}" />
</rule>
</rules>
</rewrite>
Мы переписываем все запросы на использование secure
виртуальный каталог, но только если имя хоста secure.serverfault.com
Теперь пользователи используют normal.serverfault.com
все еще может получить доступ к сайту без аутентификации, но при использовании secure.serverfault.com
они должны войти в систему.
Одна проблема, которую я вижу с этим вариантом, заключается в том, что web.config
в корне вашего сайта в основном обрабатывается дважды для переписанных запросов.
Несмотря на то, что он существует только один раз физически, при выполнении запроса в \secure\
один раз он рассматривается как локальный для виртуального каталога и еще раз для родительского каталога. Поэтому вы должны убедиться, что у вас нет настроек, которые не поддерживают это. Например <add...
узлы нельзя дублировать, вы должны использовать <clear...
или <remove...
чтобы обойти это. Или вы переносите настройки в ApplicationHost.config.
Вы должны протестировать свой сайт с этой настройкой, но поскольку браузер никогда не знает, что URL-адрес был переписан, он должен работать нормально.