Вопрос

Как выйти из системы при использовании аутентификации Windows в ASP.NET, как в этом файле web.config?

<authentication mode="Windows" />

Я уже пробовал следующее, но безуспешно.Он перенаправляет, но не выходит из системы пользователя.

void logoutButton_Click(object sender, EventArgs e) {
    HttpContext.Current.Session.Clear();
    HttpContext.Current.Session.Abandon();
    ViewState.Clear();
    FormsAuthentication.SignOut();
    Response.Redirect("/");
}

Справочная информация:

Мне приходится использовать аутентификацию Windows, поскольку мне нужно выдать себя за личность с помощью Active Directory, чтобы получить доступ к локальным файлам.И я не могу выдать себя за аутентификацию с помощью форм, потому что HttpContext.Current.User.Identity не будет WindowsIdentity. Олицетворение с использованием проверки подлинности с помощью форм

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

Решение

Ни одна кнопка выхода из системы на стороне сервера не будет работать при использовании аутентификации «Windows».Вы должны использовать аутентификацию «Формы», если вам нужна кнопка выхода из системы или закрыть браузер пользователя.

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

Только для браузеров IE, вы можете использовать следующий JavaScript-скрипт для выхода пользователя из системы, если используется проверка подлинности Windows.(Примечание:закрытие браузера не требуется, но рекомендуется, поскольку пользователь может использовать браузер, отличный от IE).

Если пользователь нажимает «Нет», чтобы закрыть браузер, ему будет предложено ввести имя пользователя и пароль, если он попытается получить доступ к странице сайта, требующей аутентификации.

try {
   document.execCommand("ClearAuthenticationCache");
}
catch (e) { }
window.close();

Этот код был взят со страницы Signout.aspx SharePoint.

Проверка подлинности Windows работает на уровне IIS путем передачи токена проверки подлинности Windows.Поскольку аутентификация происходит на уровне IIS, вы не можете выйти из кода приложения.Однако, кажется, есть ответ на вашу проблему здесь.Это второй рассматриваемый вопрос, который по существу включает использование проверки подлинности с помощью форм и API-интерфейса LogonUser Windows.

У меня было приложение SharePoint с проверкой подлинности Windows, мне требовался автоматический выход из системы через 15 минут.Я перепутал несколько кодов и вот результат.в IE работает правильно.

<script type="text/javascript">
var t;
window.onload = resetTimer;
document.onmousemove = resetTimer;
document.onkeypress = resetTimer;

function logout() {

    try {
        document.execCommand("ClearAuthenticationCache");
        window.location.href = window.location.protocol.replace(/\:/g, '') + "://" + window.location.host + "/_layouts/customlogin14.aspx";
    }
    catch (e) { }

}

function resetTimer() {
    window.clearTimeout(t);
    t = window.setTimeout(logout, 900000);
} 

поместите эти коды на свою главную страницу, после 15 минут простоя вы увидите страницу входа.надеюсь, это поможет кому-нибудь

У меня это работает с использованием JavaScript как в IE, так и в Firefox, хотя при этом вы выходите из всех систем, в которые вы вошли в IE.В Safari это вроде работает, но Safari выдает предупреждение о фишинге.Не работает в Опере.

    try { 
        if (document.all) 
        { 
            document.execCommand("ClearAuthenticationCache"); 
            window.location = "/"; 
        } 
        else 
        { 
            window.location = "http://logout:logout@example.com"; 
        } 
    } 
    catch(e) 
    { 
        alert("It was not possible to clear your credentials from browser cache. Please, close your browser window to ensure that you are completely logout of system."); 
        self.close(); 
    } 

Лучшие ответы, которые я видел, можно найти в связанных вопросах StackOverFlow:

Существует ли браузер, эквивалентный ClearAuthenticationCache в IE?

и

Выход пользователя из системы при использовании базовой аутентификации HTTP

По сути, вам нужно отправить запрос AJAX на сервер с недействительными учетными данными и заставить сервер их принять.

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

foreach (var cookie in Request.Cookies.Keys)
{
    Response.Cookies.Delete(cookie);
}


await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);


Response.Cookies.Append("EdgeAccessCookie", "", new Microsoft.AspNetCore.Http.CookieOptions()
{
    Path = "/",
    HttpOnly = true,
    SameSite = SameSiteMode.Lax, Expires = DateTime.Now.AddDays(-1)
});


Response.Redirect("https://adfs.[sitename].com/adfs/ls?wa=wsignout1.0");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top