9

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

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

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

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

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

+0

Было бы лучше (a-la http://stackoverflow.com/questions/2432845/asp-net-mvc-and-mixed-mode-authentication) иметь два отдельных «проекта» в моей основной сборке, которые строго для выдачи машинных файлов cookie на Web.config MachineKey и, таким образом, сохранять механизмы аутентификации отдельно от использования приложения и сохранять формы в главном приложении? Это может быть самый простой путь. – jcolebrand

+0

Предположительно мне нужно сделать что-то вроде этого: http://www.15seconds.com/Issue/050203.htm , но это кажется таким варварским, когда все это может находиться под одним стеком. – jcolebrand

+0

Кроме того, для тех, кто читает это после того, как я разместил исходный вопрос и несколько ответов: если пользователь перейдет на сайт и НЕ вводит свои учетные данные в ответ 401, он возвращается на страницу ошибки 401 ASP.NET по умолчанию. Я не понял, как перенаправить их в этот момент на мою страницу по умолчанию для форм (но, может быть, я перестану смотреть слишком рано?) – jcolebrand

ответ

7

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

Следующий блок кода позволяет мне контролировать доступ анонов из IIS7 без необходимости гадать в метабазе (где применяются изменения графического интерфейса на 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

Не то, чтобы я пытался предположить, что у IIS7 есть метабаза, вы ... – jcolebrand

2

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

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

<location path="Authent/WinLogin.aspx" > 
    <system.webServer> 
    <security> 
     <authorization> 
     <add accessType="Deny" users="?" /> 
     </authorization> 
    </security> 
    </system.webServer> 
</location> 
+0

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

1

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

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

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

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

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

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

+0

Вау, это огромный обходной путь. У меня есть два файла в моем каталоге с разными уровнями аутентификации. – jcolebrand

+0

Да, наверное. Но этот вход в Хэш-ключ полезен для нескольких других бит и частей, таких как синхронизация логинов и ссылок из других систем. Я также не хотел, чтобы внешние (не интегрированные) пользователи сталкивались с приглашением Integrated credentials. –

+0

Итак, как вы мешаете им это увидеть? – jcolebrand

Смежные вопросы