Кнопка Выхода из системы IIS6 ASP.NET Базовая аутентификация

StackOverflow https://stackoverflow.com/questions/612488

Вопрос

У меня есть требование к явной кнопке выхода из системы для пользователей в ASP.NET веб-приложении.Я использую IIS6 с базовой аутентификацией (SSL).Я могу перенаправить на другую веб-страницу, но браузер поддерживает сеанс в рабочем состоянии.Я поискал в Google и нашел способ сделать это, включив активный элемент управления x для связи с IIS и завершения сеанса.Я нахожусь в ограниченной среде, которая не допускает проверку подлинности форм, и активные элементы управления x также не запрещены.Было ли у кого-нибудь еще такое требование и как вы с ним справились?

Ладно, это то, чего я боялся.Я видел похожие ответы в сети, и я надеялся, что у кого-нибудь найдется способ сделать это.Но все же спасибо, что уделили мне время.Я думаю, я могу использовать javascript, чтобы предотвратить появление кнопки "Назад", такой как history.back()

Это было полезно?

Решение

Я боролся с этим сам в течение нескольких дней.

Использование IE document.execCommand ('ClearAuthenticationCache'); 'не для всех - хороший вариант: 1) он сбрасывает все учетные данные, а это означает, что пользователь, например, также выйдет из своего gmail или любого другого веб-сайта, на котором он в настоящий момент прошел аутентификацию 2) это только IE;)

Я попытался использовать Session.Abandon (), а затем перенаправить на свой Default.aspx. Одного этого недостаточно. Вам необходимо явно указать браузеру, что сделанный запрос не авторизован. Вы можете сделать это, используя что-то вроде:

response.StatusCode = 401;
response.Status = "401 Unauthorized";
response.AddHeader("WWW-Authenticate", "BASIC Realm=my application name");
resp.End();

Это приведет к следующему: пользователь нажимает кнопку выхода == > он получит основное окно входа в систему. ОДНАКО: если он нажимает клавишу escape (диалоговое окно входа в систему исчезает) и нажимает кнопку «Обновить», браузер автоматически отправляет учетные данные снова, заставляя пользователя войти в систему, хотя он может подумать, что он вышел из системы.

Хитрость для решения этой проблемы заключается в том, чтобы всегда выплевывать уникальное «царство» . Затем браузер НЕ отправляет учетные данные в случае, описанном выше. Я решил выплюнуть текущую дату и время.

response.StatusCode = 401;
response.Status = "401 Unauthorized";
string realm = "my application name";                
response.AddHeader("WWW-Authenticate", string.Format(@"BASIC Realm={0} ({1})", realm, DateTimeUtils.ConvertToUIDateTime(DateTime.Now)));
resp.End();

Еще одна вещь, которую вам нужно сделать, это сказать браузеру не кэшировать страницу:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetNoStore();

Со всеми этими вещами это работает (для меня) в IE, но до сих пор я все еще не был в состоянии препятствовать тому, чтобы firefox регистрировал пользователя, когда пользователь сначала нажимает escape (скрывает основной диалог входа в систему) и затем обновить (F5) или кнопку возврата браузера.

Другие советы

Session.Abandon Метод уничтожает все объекты, хранящиеся в объекте Session, и освобождает их ресурсы. Если вы не вызываете метод Abandon явно, сервер уничтожает эти объекты по истечении времени сеанса.

Вы пробовали вызывать сеанс.Отказаться в ответ на нажатие кнопки?

Редактировать:

Казалось бы, это классическая проблема с кнопкой "Назад".

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

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

Многие браузеры реализуют кнопку "Назад" аналогичным (хотя и не идентичным) способом.Возврат к предыдущей странице не обязательно является навигацией с точки зрения HTML / HTTP.

Это решение этой проблемы, которое работает в IE6 и выше.

<asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="logout();">LinkButton</asp:LinkButton>


<script>

    function logout()
    {
    document.execCommand("ClearAuthenticationCache",false);
    }
 </script>

Нашел это из http://msdn.microsoft.com/en- нас / библиотека / bb250510% 28VS.85% 29.aspx

Коротко о веб-команде Ваши учетные данные, пожалуйста

В: Джерри Б. пишет: «После того, как пользователь подтвердил и обработал свой запрос, я хочу сделать его недействительным. Предполагая, что эта машина находится в открытой среде, где кто-нибудь может подойти и использовать ее, я хочу бросать новый вызов каждый раз, когда пользователь получает доступ к определенному модулю в Интернете. & Quot;

A: Это часто запрашиваемая функция команды Internet Explorer, и хорошие люди там дали нам способ сделать это в Internet Explorer 6.0 SP1. Все, что вам нужно сделать, это вызвать метод execCommand для документа, передав в качестве параметра команды ClearAuthenticationCache, например:

document.execCommand("ClearAuthenticationCache");

Эта команда сбрасывает все учетные данные в кэше, так что если пользователь запрашивает ресурс, требующий аутентификации, запрос на аутентификацию повторяется.

Я поставил это на кнопку ссылки выхода из системы, и она работает в IE6 sp1 и выше:

OnClientClick="document.execCommand('ClearAuthenticationCache');"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top