我想要一个工作,以确保会话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生命周期在Startup.Auth.cs中将ExpireTimeSpan设置为ConfigureAuth方法中的一小时:
public void ConfigureAuth(IAppBuilder app) { // other stuff app.UseCookieAuthentication(new CookieAuthenticationOptions { ExpireTimeSpan = TimeSpan.FromHours(1),}); }
这将确保Cookie将在一小时内到期.