Pergunta

Como você sair ao usar a autenticação do Windows no ASP.NET como esta web.config?

<authentication mode="Windows" />

Eu já tentei o seguinte sem sucesso. Ele redireciona, mas não registra o usuário.

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

Informações de fundo:

Eu tenho que usar a autenticação do Windows, porque eu preciso representar a identidade usando o Active Directory para obter acesso a arquivos locais. E eu não pode personificar usando autenticação de formulários porque o HttpContext.Current.User.Identity não será um WindowsIdentity. Impersonate usando autenticação de formulários

Foi útil?

Solução

No botão de logout do lado do servidor funcionará quando usando a autenticação "Windows". Você deve usar "Formulários" autenticação, se você quer um botão de logout, ou fechar o navegador do usuário.

Outras dicas

Para navegadores IE única , você pode usar o seguinte javascript para sair o usuário se estiver usando autenticação do Windows. (Nota: fechar o navegador não é obrigatório, mas recomendado desde que o usuário pode estar usando um navegador não-IE).

Se o usuário clicar em "Não" para fechar o navegador, em seguida, o usuário será solicitado a fornecer um nome de usuário / senha se tentarem acessar uma página no site que requer autenticação.

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

Este código foi tirado de página Signout.aspx do SharePoint.

obras de autenticação do Windows no nível IIS por passar o seu token de autenticação do Windows. Desde a autenticação ocorre no nível IIS você não pode realmente fazer logout do código do aplicativo. No entanto, parece haver uma resposta para o seu problema href="http://visualstudiomagazine.com/articles/2004/05/01/activate-windows-impersonation-selectively.aspx" aqui . É a segunda questão abordada e, essencialmente, envolve o uso de formas de autenticação e a API LogonUser do Windows.

Eu tinha um aplicativo SharePoint com autenticação do Windows, eu precisava de logout automático após 15 minutos. Eu misturei-se alguns códigos e aqui está o resultado. ele funciona no IE corretamente.

<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);
} 

colocar estes códigos em sua página principal, após 15 minutos de tempo ocioso você verá a página de login. espero que este alguém ajuda

Eu tenho esse trabalho usando JavaScript no IE e Firefox, embora ele registra-lo para fora de tudo o que você estiver logado no no IE. É uma espécie de obras no Safari, mas Safari joga-se um aviso de phishing. Não funciona no Opera.

    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(); 
    } 

As melhores respostas que tenho visto são encontrados em questões StackOverflow relacionados:

Existe um navegador equivalente a ClearAuthenticationCache do IE?

e

Registrando um usuário quando usando HTTP autenticação básica

Basicamente, você precisa enviar uma solicitação AJAX para o servidor com credenciais inválidas e ter o servidor aceitá-los.

tinha um monte de problemas com isso, abaixo está o código que funciona, espero que alguém acha útil.

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");
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top