Botão de logoff iis6 asp.net Autenticação básica
-
03-07-2019 - |
Pergunta
Tenho um requisito para um botão de logout explícito para os usuários em um aplicativo Web ASP.NET. Estou usando o IIS6 com autenticação básica (SSL). Posso redirecionar para outra página da web, mas o navegador mantém a sessão viva. Pesquisei no Google e encontrei uma maneira de fazê -lo, permitindo que um controle X ativo se comunique com o IIS e matasse a sessão. Estou em um ambiente restrito que não permite a autenticação de formulários e os controles X ativos também não são proibidos. Alguém mais tinha esse requisito e como você lidou com isso?
Ok, é disso que eu tinha medo. Eu vi respostas semelhantes na rede e esperava que alguém tivesse uma maneira de fazê -lo. Obrigado pelo seu tempo. Acho que posso usar o JavaScript para evitar o botão traseiro como o histórico.back ()
Solução
Eu estava lutando com isso por alguns dias.
Usando o IE específico 'document.execCommand('ClearAuthenticationCache');
'Não é para todos uma boa opção: 1) libera todas as credenciais, o que significa que o usuário, por exemplo, também será registrado em seu gmail ou em qualquer outro site em que ele esteja atualmente autenticado 2) é apenas o IE;)
Tentei usar session.abandon () e depois redirecionando para o meu padrão.aspx. Isso por si só não é suficiente. Você precisa dizer explicitamente ao navegador que a solicitação que foi feita não está autorizada. Você pode fazer isso usando algo como:
response.StatusCode = 401;
response.Status = "401 Unauthorized";
response.AddHeader("WWW-Authenticate", "BASIC Realm=my application name");
resp.End();
Isso resultará no seguinte: o usuário clica no botão de logout ==> Ele receberá a janela de login básica. No entanto: se ele pressionar Escape (a caixa de diálogo de login desaparece) e atinge a atualização, o navegador envia automaticamente as credenciais novamente, fazendo com que o usuário se acumule, embora possa pensar que ele está registrado.
O truque para resolver isso é sempre cuspir um 'reino' único. Em seguida, o navegador não reenvie as credenciais no caso descrito acima. Eu escolhi cuspir a data e a hora atuais.
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();
Outra coisa que você precisa fazer é dizer ao navegador para não armazenar em cache a página:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetNoStore();
Com todas essas coisas em vigor, funciona (para mim) no IE, mas até agora eu ainda não era capaz de impedir que o Firefox faça login no usuário quando o usuário pressiona pela primeira vez escape (esconde a caixa de diálogo Basic Login) e depois atualize (F5 ) ou o botão de volta dos navegadores.
Outras dicas
o Session.Abandon
O método destrói todos os objetos armazenados em um objeto de sessão e libera seus recursos. Se você não chamar o método de abandono explicitamente, o servidor destrói esses objetos quando a sessão se destaca.
Você já tentou ligar session.abandon em resposta ao botão Clique?
Editar:
Parece que esse é um problema clássico do botão traseiro.
Há muito pouco que você pode fazer sobre o botão traseiro. Imagine que o usuário acabou de abrir a página atual em uma nova janela e depois clicou no botão Logout, essa página parece fazer logot, mas não afetará imediatamente o conteúdo da outra janela.
Somente quando eles tentam navegar em algum lugar da janela, ficará aparente que a sessão deles se foi.
Muitos navegadores implementam o botão de volta de uma maneira semelhante (embora não idêntica). Voltar à página anterior não é necessariamente uma navegação para um ponto de vista HTML/HTTP.
Esta é uma solução para esse problema que funciona no IE6 e superior.
<asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="logout();">LinkButton</asp:LinkButton>
<script>
function logout()
{
document.execCommand("ClearAuthenticationCache",false);
}
</script>
Encontrou isso dehttp://msdn.microsoft.com/en-us/library/bb250510%28vs.85%29.aspx
Equipe da web, em suma, suas credenciais, por favor
P: Jerry B. escreve: "Depois que o usuário validou e processou seu pedido, agora quero invalidar -o. Supondo Tempo que um usuário acessa um módulo específico na web. "
R: Este é um recurso frequentemente solicitado da equipe do Internet Explorer e as pessoas boas lá nos deram uma maneira de fazê -lo no Internet Explorer 6.0 SP1. Tudo o que você precisa fazer é chamar o método EXecCommand no documento, passando em clearauthenticationcache como parâmetro de comando, como este:
document.execCommand("ClearAuthenticationCache");
Esse comando libera todas as credenciais no cache, de modo que, se o usuário solicitar um recurso que precise de autenticação, o prompt de autenticação ocorrer novamente.
Coloquei isso no meu botão de link de logout e funciona no IE6 SP1 e superior:
OnClientClick="document.execCommand('ClearAuthenticationCache');"