Включить пользовательский контент в ответ ASP.NET Windows Authentication 401 - PullRequest
0 голосов
/ 16 марта 2012

У нас есть внутренняя система, в которой пользователи могут проходить аутентификацию с использованием аутентификации Windows, но мы хотим включить некоторый пользовательский контент в ответ 401, который переносит пользователя на страницу аутентификации пользовательского имени пользователя / пароля, если отменить отключить диалог аутентификации Windows.

Когда пользователь, не прошедший проверку подлинности, получает доступ к странице, проверка подлинности Windows отвечает 401 «Несанкционированный ответ» с заголовками

WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM

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

Если пользователь отменяет диалоговое окно, браузер отображает содержимое оригинального 401Несанкционированный ответ.Мы используем Application_EndRequest в Global.asax для возврата некоторого пользовательского содержимого, которое переносит пользователя в нашу пользовательскую систему входа в систему.

    /// <summary>
    /// If we are about to send the NTLM authenticate headers, include this content. Then, if the user cancels off the
    /// windows auth dialog, they will be presented with this page and redirected to the username / password login screen
    /// </summary>
    void Application_EndRequest(object sender, EventArgs e)
    {
        Logger.DebugFormat("in Application_EndRequest. Response.StatusCode: {0}", Response.StatusCode);

        if (Response.StatusCode == 401)
        {
            Response.ContentType = "text/html";

            var redirectUrl = string.Format("https://mycompany.com/SSO/Login?encryptedSessionRequestId={1}",
                HttpUtility.UrlEncode(Request.QueryString["encryptedSessionRequestId"]));

            var text = File.ReadAllText(Server.MapPath("~/UnauthorizedError.html"));
            text = text.Replace("[USERNAME_PASSWORD_LOGON_REDIRECT]", redirectUrl);


            Response.Write(text);

            Logger.Debug("Done writing response");
            Response.End();
        }
    }

UnauthorizedError.html содержит следующий скрипт, который перенаправляет пользователя на

<script language="javascript" type="text/javascript">
    window.location = "[USERNAME_PASSWORD_LOGON_REDIRECT]";
</script>

При локальном запуске (Win7 / IIS7.5) это прекрасно работает, мы используем Response.Write () для отправки нашего контента, и пользователь может видеть его, когда закрывает диалоговое окно.

Но при удаленном доступе к сайту, например, когда он работает в нашей среде разработки, хотя из журналов видно, что вызывается Application_EndRequest и наш контент записывается в ответ, в какой-то момент он переопределяется, и все, что достигает браузера, этозаголовки аутентификации и текст You do not have permission to view this directory or page.

1) Как мы можем предотвратить перезапись этого контента?

2) Где в конвейере это может происходить?

3) Есть ли у кого-нибудь предложения о другом способе реализации этого поведения, например, с помощью модуля HTTP?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 ноября 2017

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

При изменении ответного сообщения для удаленных запросов (читай: не локальный) вам нужно добавить следующеев ваш файл конфигурации:

<system.webServer>
    <httpErrors existingResponse="PassThrough"></httpErrors>
</system.webServer>

Если вы не разрешите ответу «проходить», удаленные клиенты получат значение по умолчанию "You do not have permission to view this directory or page".

Я получил эту информацию от: https://stackoverflow.com/a/17324195/3310441

0 голосов
/ 16 марта 2012

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

...