Cookie de Sessão de Expiração de Identidade do Asp.net
Estamos usando o MVC 5.2 e oIdentidade do ASP.NET A estrutura para autenticação com uma tela de autenticação de formulário (combinação de usuário e senha) e a identidade são mantidas usando um cookie. Eu tenho configuração no meu método de inicialização para a estrutura de identidade para definir a expiração no cookie de autenticação para 30 dias; isso funciona muito bem quando o usuário escolhe 'lembrar de mim' (IsPersistent = true). Quando IsPersistent = false (o usuário decide não selecionar 'Lembrar de mim'), um cookie de sessão é criado por padrão. Este cookie de sessão funciona muito bem no Internet Explorer e também no FireFox. Quando o navegador é fechado, o cookie é perdido. No Chrome e Safari (e talvez também em outros navegadores), existem opções para garantir que os cookies da sessão não sejam perdidos; nesse caso, o usuário permanece conectado, mesmo quando o navegador é fechado e reaberto.
Gostaria de uma solução alternativa para garantir que os cookies de sessão não sejam mantidos para sempre, mas sejam descartados dentro de uma hora. Talvez eu consiga perceber isso verificando se a conta não está ativa por X minutos / horas e se o usuário nunca escolheu 'Lembrar-me', a identidade do usuário é 'rejeitada' com a próxima solicitação, se esse período terminar.
Alguém criou uma solução alternativa em sua implementação de identidade do ASP.NET para garantir que os cookies da sessão expirem no back-end após o tempo X ou talvez haja uma maneira melhor de contornar essa limitação? Talvez seja possível fazer isso usando uma implementação personalizada do CookieAuthenticationProvider ou entregar uma data / hora de vencimento à reivindicação do usuário, que pode ser verificada em algum lugar do processo ValidateIdentity?
Alguma idéia seria ótima. Agradecemos antecipadamente, -Igor
Editar - mais informações: Minha implementação de autenticação possui 2 "modos" básicos (não consigo pensar em uma palavra melhor no momento). Minha implementação é para um formulário simples de nome de usuário / senha com uma caixa de seleção 'lembrar de mim'. O valor da caixa de seleção é passado para a propriedade IsPersistent do objeto AuthenticationProperties que é passada para o método AuthenticationManager :: SignIn.
O usuário deseja 'lembrar de mim', que cria um cookie de longa duração com uma expiração de 30 dias definida usando uma expiração deslizante. Isso permite que o usuário fique autenticado entre as sessões do navegador e não há tempo limite devido à inatividade, com exceção de não visitar o site por mais de 30 dias. As configurações no meu método de inicialização owin refletem que o tempo de expiração do cookie é de 30 dias (CookieAuthenticationOptions.ExpireTimeSpan definido como 30 dias). Isso funciona independentemente da plataforma do navegador (tanto quanto eu posso dizer).
O usuário não quer 'lembrar de mim', qual deve ser o comportamento esperado é que um cookie de sessão seja criado e quando um navegador é fechado, o cookie de sessão é removido do navegador. estedevemos verifique se na próxima vez em que o navegador é iniciado, o usuário não está autenticado. Isso é especialmente importante quando um dispositivo compartilhado está sendo usado como um computador público. O problema é que nem todos os navegadores sempre excluem os cookies da sessão, alguns os deixam de propósito se uma configuração do navegador estiver ativada (o Chrome é um bom exemplo). Um cookie de sessão não tem data / hora de vencimento, portanto, CookieAuthenticationOptions.ExpireTimeSpan não tem efeito aqui. É aqui que procuro conselhos, pois tenho certeza de que não posso ser o primeiro a se deparar com isso. Provavelmente, existe uma maneira de tornar esse comportamento mais seguro, pois a alternativa é não fazer nada e, possivelmente, deixar um cookie de sessão (que nunca expira!) No navegador.
Consulte este link para obter mais detalhes sobre o Chrome e os cookies de sessão.