У меня есть веб-сайт ASP.NET с аутентификацией с использованием ActiveDirectory.ASP.NET WindowsAuthentication custom 401 Страница несанкционированной ошибки
Теперь, когда аутентифицированный пользователь открывает страницу - он автоматически аутентифицируется. Я столкнулся с проблемой - когда пользователь, не прошедший проверку подлинности (, например, пользователь Mozilla Firefox с неопределенным network.automatic-ntlm-auth.trusted-uris
свойством) открывает страницу, IIS отправляет 401 ответ и подсказки для входа \ пароля.
Я хочу, чтобы не запрашивал у него пароль для входа в систему \ пароль - просто покажите страницу пользовательских ошибок. Это звучит довольно просто - пользователи, прошедшие аутентификацию, получают запрошенную страницу, не прошедшие аутентификацию, перенаправляются на страницу пользовательских ошибок. Это отлично работает для FormsAuthentication.
Однако, я уже пробовал так много способов. Любые перенаправления Web.config не работают. Даже если я очищу Response
и поставлю туда перенаправление - я получу цикл, потому что эта настраиваемая страница (*, например, /Error/AccessDenied
) также требует аутентификации. Маркировка контроллера как AllowAnonymous
ничего не делает.
Однако, если я включаю Анонимную проверку подлинности в диспетчере IIS, настоящие пользователи аутентифицированного домена не авторизованы при открытии веб-сайта.
Как я могу решить эту проблему?
Вы хотите не-IE пользователей переадресованы на другую страницу? Перенос URL-адресов на основе User Agent - путь. –
Невозможно. Первый запрос из браузера всегда анонимный. IIS всегда отвечает '401 Unauthorized' заголовком' www.authenticate: negotiate' (или NTLM или оба). Затем клиент (браузер) снова запрашивает заголовок 'Authorization: Negotiate ..hash..' на этот раз. В зависимости от доверенного сайта браузер *** всегда будет запрашивать учетные данные. Вы не можете показать пользовательскую ошибку, потому что первый ответ всегда '401', независимо. – Abhitalks
Вы можете написать HTTP-модуль и подключиться к HttpApplication.PostAuthenticateRequest. Оттуда вы можете использовать HttpContext.RewritePath и/или в значительной степени играть с контекстом ответа так, как хотите. Трудно сказать больше без очевидного случая с воспроизведением. –