Как я могу реализовать следующее в приложении ASP.NET MVC:
- пользователь открывает веб-сайт интрасети
- пользователь молча аутентифицируется, если возможно
- если проверка подлинности NTLM не сработала, покажите регистрационную форму пользователю
- пользователь указывает пароль для входа и выбирает домен из списка предопределенных доменов
- пользователь аутентифицируется в коде с использованием AD
Я знаю, как реализовать 4 и 5, но не могу найти информацию о том, как объединить NTLM и формы. Так что диалог NTLM для внутреннего входа/пароля никогда не отображается - прозрачная аутентификация или приятная страница входа в систему.
Как работать? Следует ли запрашивать логин и пароль? Могут ли ее текущие учетные данные (имя домена) использоваться без запроса ввода логина и пароля?
ОБНОВЛЕНИЕ для них, исследуя ту же проблему:
Когда я спрашивал об этом, я не совсем понял, как работает аутентификация NTLM внутри. Важно понять, что если браузер пользователя не поддерживает NTLM должным образом или если поддержка NTLM отключена пользователем - сервер никогда не получит возможности обойти это.
Как работает проверка подлинности Windows:
- Клиент отправляет обычный HTTP-запрос на сервер
- Сервер отвечает HTTP-статусом 401 и указывает, что для доступа к ресурсам следует использовать аутентификацию NTLM.
- Клиент отправляет сообщение NTLM Type1
- Сервер отвечает сообщением NTLM Type2 с вызовом
- Клиент отправляет сообщение Type3 с ответом на вызов
- Сервер отвечает запрошенным фактическим содержимым
Как вы видите, браузер, не поддерживающий NTLM, не перейдет к шагу (3), вместо этого будет отображаться страница IIS с ошибкой 401.
Если у пользователя нет учетных данных, после отмены всплывающего диалогового окна проверки подлинности NTLM не будет продолжаться (3).
Таким образом, у нас нет возможности автоматически перенаправлять пользователей на пользовательскую страницу входа.
Единственная опция здесь - иметь страницу "шлюза", где мы решаем, должен ли пользователь поддерживать NTLM, и если да, перенаправитесь на домашнюю страницу, защищенную NTLM.
И если нет, укажите регистрационную форму и разрешите аутентификацию вручную, введя логин и пароль.
Решение обычно делается на основе IP-адресов пользователей и/или имени хоста, либо путем сопоставления диапазонов IP-адресов, либо путем проверки таблицы предопределенных IP-адресов.