Аутентификация в смешанном режиме IIS7 - PullRequest
9 голосов
/ 29 марта 2010

Мы готовимся начать миграцию некоторых из наших сайтов IIS6 на IIS7, и в настоящее время приложение использует проверку подлинности с помощью форм. Мы начали получать запросы от разных сайтов на использование аутентификации Windows для пользователей. Хотя это достаточно просто реализовать (и я показал, что с приложением, как и ожидалось, проблем нет), вопрос заключается в том, как продолжать поддерживать проверку подлинности с помощью форм, если встроенная система Windows не работает. Я видел несколько пошаговых инструкций о том, как настроить его на IIS6, и я мог сделать то же самое на IIS7, но затем мне пришлось включить обработку в классическом режиме. Любое решение также должно быть обратно переносимым на IIS6, если это возможно, для упрощения дерева сборки.

Так, каковы мои варианты на этом? Нужно ли настроить приложение со встроенной аутентификацией Windows в IIS7, аутентификацией форм в web.config и перенаправить ошибки 401 на «страницу ошибок», позволяя им войти в систему с помощью форм, а затем вернуться в обычное приложение?

Случай, когда формы, вероятно, понадобятся, будет зарезервирован для работников по контракту, нашей службы поддержки, и если кому-то потребуется доступ к ним на их сайте из их экстрасети. Поэтому, прежде всего, наши сотрудники должны войти в систему, чтобы проверить работоспособность и подтвердить сообщения об ошибках. Я предложил нам просто подтвердить, что для того, чтобы наши сотрудники службы поддержки работали, нам нужна учетная запись Windows, которая всегда будет действующей, а затем мы просто установим локальную ответственность за то, кто может войти на сайт, но мне сказали, что мы сделаем лучше иметь Аутентификацию по формам.

Есть мысли? Я могу опубликовать некоторые ссылки статей, которые я уже прочитал, если это поможет форуму лучше сузить мои потребности.

tl; dr: Как выполнить проверку подлинности в смешанном режиме (формы, окна) в IIS7, не переходя на классический конвейер, и, тем не менее, по возможности использовать сборку в IIS6.

Ответы [ 3 ]

7 голосов
/ 26 апреля 2010

Нет, это не совсем верно, но я не могу сделать блок кода в ответе на комментарий, поэтому я опубликую новый ответ ...

Следующий блок кода позволяет мне контролировать любой доступ из IIS7 без необходимости обкрадывать метабазу (где применяются изменения GUI на IIS6)

<location path="WindowsLogin.aspx" >
    <system.web>
        <authorization>
            <deny users="?" />
            <allow users="*" />
        </authorization>
    </system.web>
    <system.webServer>
        <security>
            <authentication>
                <anonymousAuthentication enabled="false" />
                <windowsAuthentication enabled="true" />
            </authentication>
        </security>
    </system.webServer>
</location>
2 голосов
/ 26 апреля 2010

спасибо, что ответили мне, я уже несколько недель играю с некоторыми из реализаций, которые я читал в Интернете (javascript, 401, 2 виртуальных каталога), но все еще не могу действительно нашел все, что работает, как я хотел. Мы будем потенциально распространять его более чем на одного клиента, каждый с разным оборудованием / настройками, даже с разными версиями iis, поэтому нам хотелось, чтобы он был как можно более универсальным. Я наткнулся на кирпичную стену на пару предложенных решений ...

когда вы говорите, что для IIS7 + вы удалили анон доступ в веб-конфигурации, я предполагаю, что это так: -

<location path="Authent/WinLogin.aspx" > 
  <system.webServer>
    <security>
      <authorization>
        <add accessType="Deny" users="?" />
      </authorization>
    </security>
  </system.webServer>
</location>
1 голос
/ 06 января 2012

Я потратил несколько дней, пытаясь заставить это работать, с небольшой разницей ... Я хотел, чтобы на первом экране входа в систему отображался вход в формы с помощью кнопки под «Вход в систему с проверкой подлинности Windows».

В конце концов я отказался от всех этих техник, так как никогда не мог получить удовлетворительные результаты. Мой обходной путь был следующим, и отлично работает:

  • Создать отдельный сайт "LoginWithIntegratedSecurity"
  • Установите это с интегрированной безопасностью
  • Этот веб-сайт создает временный «Хэш-ключ пользователя» в базе данных, который идентифицирует пользователя
  • Перенаправляет обратно на страницу входа в систему на веб-сайте проверки подлинности с помощью хэш-ключа в URL
  • LogonPage в Forms Authentication проверяет ключ Hash и регистрирует пользователя после проверки базы данных

Таким образом, если пользователь нажимает кнопку «Войти через Windows Authentication», сервер перенаправляется на сайт Windows Authentication (передавая «ReturnUrl»). Этот сайт вызывает и регистрирует пользователя, затем перенаправляет обратно, снова передавая "ReturnUrl", а также HashKey.

Все это происходит очень быстро и выглядит довольно плавно.

Я знаю, что это обходной путь, но для моего случая это сработало хорошо.

...