c# – Asp.net身份终止会话Cookie

前端之家收集整理的这篇文章主要介绍了c# – Asp.net身份终止会话Cookie前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们正在使用MVC 5.2和 ASP.NET Identity框架进行身份验证屏幕(用户和密码组合)的身份验证,并使用Cookie持久化身份.我在启动方法中配置了Identity框架,将认证cookie的到期时间设置为30天,当用户选择“记住我”(IsPersistent = true)时,此功能很好.当IsPersistent = false(用户选择不选择“记住我”)时,会默认创建一个会话cookie.这个会话cookie在Internet Explorer和FireFox中工作得很好,当浏览器关闭时,cookie丢失.在Chrome和Safari(也可能是其他浏览器)中,有一些选项可以确保会话cookie不会丢失,在这种情况下,即使浏览器关闭并重新打开,用户仍然可以登录.

我想要一个工作,以确保会话cookie永远不会持续,但在一小时内被丢弃.我可以通过检查帐户是否在X分钟/小时内没有活动,并且用户从未选择“记住我”,但是如果该时间间隔过去,则用户身份将被拒绝接受下一个请求.

有没有人在他们的ASP.NET身份实现中创建了一个工作,以确保会话cookie在X时间后的后端过期,或者有更好的方法解决这个限制?也许可以使用CookieAuthenticationProvider的自定义实现来执行此操作,或者将用户声明的到期日期/时间提交到可在ValidateIdentity进程中的某个地方检查?

任何想法都会很棒.
先谢谢你,
-Igor

编辑 – 更多信息:
我的认证实现有两个基本的“模式”(目前不能想到一个更好的词).我的实现是一个简单的用户名/密码表单与复选框’记住我’.复选框值传递给AuthenticationProperties对象的IsPersistent属性,该属性传递给AuthenticationManager :: SignIn方法.

>用户想要“记住我”,它创建一个长寿命的cookie,使用滑动过期设置30天的到期时间.这使得用户能够在浏览器会话之间保持身份验证,并且由于不活动而没有超时,除了未访问网站超过30天.我的owin启动方法中的设置反映了cookie的到期时间为30天(CookieAuthenticationOptions.ExpireTimeSpan设置为30天).无论浏览器平台如何,我都可以这样做(据我所知).
>用户不想“记住我”,预期的行为应该是创建会话cookie,会话cookie从浏览器中删除.这应该确保下次浏览器启动时,用户未通过身份验证.当共享设备像公共计算机一样被使用时,这一点尤为重要.问题并不在于所有浏览器都会删除会话Cookie,如果启用了浏览器设置,则有人会将其删除(Chrome是一个很好的例子).会话cookie没有到期日期/时间,所以CookieAuthenticationOptions.ExpireTimeSpan在这里没有影响.
这是我正在寻找建议的地方,因为我确信我不能成为第一个遇到这个问题的人.可能有一种方法可以使此行为更安全,因为替代方法是不执行任何操作,并且可能会在浏览器上留下会话cookie(永远不会过期!).

See this link for more detail on Chrome and session cookies.

解决方法

身份已经将到期时间嵌入到Cookie数据中,并由OWIN进行检查.

要限制Cookie生命周期在Startup.Auth.cs中将ExpireTimeSpan设置为ConfigureAuth方法中的一小时:

public void ConfigureAuth(IAppBuilder app)
{
    // other stuff
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        ExpireTimeSpan = TimeSpan.FromHours(1),});            
}

这将确保Cookie将在一小时内到期.

猜你在找的C#相关文章