Igo*_*gor 11 c# asp.net-mvc asp.net-identity
我们使用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身份实现中创建了一个解决方案,以确保在X时间之后会话cookie在后端过期,或者是否有更好的方法来解决这个限制?也许可以使用CookieAuthenticationProvider的自定义实现来执行此操作,或者将过期日期/时间交给用户声明,可以在ValidateIdentity流程中的某处进行检查?
任何想法都会很棒.提前谢谢你,-Igor
编辑 - 更多信息:我的身份验证实现有2种基本"模式"(目前无法想到更好的词).我的实现是一个简单的用户名/密码表单,带有一个"记住我"的复选框.复选框值传递给AuthenticationProperties对象的IsPersistent属性,该属性将传递给AuthenticationManager :: SignIn方法.
用户想要"记住我",这会创建一个长期存在的cookie,使用滑动过期设置30天.这使用户能够在浏览器会话之间保持身份验证,并且由于不活动而没有超时,除了不访问该站点超过30天.我的owin启动方法中的设置反映了cookie的到期时间为30天(CookieAuthenticationOptions.ExpireTimeSpan设置为30天).无论浏览器平台如何,这都有效(据我所知).
用户不想"记住我",预期的行为应该是创建会话cookie,当浏览器关闭时,会话cookie将从浏览器中删除.这应该确保下次启动浏览器时未对用户进行身份验证.当像公共计算机一样使用共享设备时,这一点尤其重要.问题是并非所有浏览器都会删除会话cookie,如果启用了浏览器设置,有些人会故意将它们留下(Chrome就是一个很好的例子).会话cookie没有到期日期/时间,因此CookieAuthenticationOptions.ExpireTimeSpan在此处没有任何影响.这是我在寻找建议的地方,因为我相信我不能成为第一个遇到此问题的人.可能有一种方法可以使这种行为更安全,因为替代方法是什么也不做,并且可能在浏览器上留下会话cookie(永不过期!).
tra*_*max 17
身份已经在cookie数据中嵌入了到期时间,并由OWIN进行检查.
ExpireTimeSpan在以下ConfigureAuth方法中将cookie生命周期限制为一小时Startup.Auth.cs:
public void ConfigureAuth(IAppBuilder app)
{
// other stuff
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
ExpireTimeSpan = TimeSpan.FromHours(1),
});
}
Run Code Online (Sandbox Code Playgroud)
这将确保cookie将在一小时后到期.
| 归档时间: |
|
| 查看次数: |
23251 次 |
| 最近记录: |