【发布时间】:2015-09-13 10:23:29
【问题描述】:
我用尽了谷歌寻找解决方案,我声称身份验证集成到我的应用程序中,一切都按预期工作。
我遇到的问题是,如果用户不点击退出,他们将保持登录状态,我可以使用 Claims 设置超时吗?比如说用户登录后会在 60 分钟内自动注销?
这就是我配置 CLaims 身份验证的方式,这与您提供的代码示例不同:
var userCredentials = new[]
{
new Claim("UserId", userProfile.UserId.ToString()),
new Claim("Username", userProfile.UserName)
};
var id = new ClaimsIdentity(userCredentials, "Forms");
var cp = new ClaimsPrincipal(id);
var token = new SessionSecurityToken(cp);
var sam = FederatedAuthentication.SessionAuthenticationModule;
sam.WriteSessionTokenToCookie(token);
更新
好的,所以在被告知时间跨度后,我将其添加到我的 SessionSecurityToken 中,它的时间跨度为十分钟,如下所示:
var token = new SessionSecurityToken(cp, TimeSpan.FromMinutes(10))
然而,当我调试它时,它显示的时间与我预期的完全不同,目前我在晚上 20:42(澳大利亚,墨尔本),但是当我查看 SessionSecurityToken 的有效从/有效到时显示作为
ValidFrom = {14/09/2015 10:42:49} ValidTo = {14/09/2015 10:52:49}
我不知道为什么?
这是我的配置中的内容:
<system.identityModel>
<identityConfiguration>
<securityTokenHandlers>
<add type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel">
<sessionTokenRequirement lifetime="00:10:00" />
</add>
</securityTokenHandlers>
</identityConfiguration>
【问题讨论】:
-
也许我在这里遗漏了一些东西 -
SessionSecurityToken构造函数有一个覆盖,它提供了一个TimeSpan,它允许您指定令牌的有效期:msdn.microsoft.com/en-us/library/hh158905%28v=vs.110%29.aspx -
@BrendanGreen 感谢您的建议,我已经实现了这一点,但它并没有给我我所期望的,即未授权并重新定向回登录页面,而是保持登录状态?我已经更新了我的问题是哪个示例和网络配置,你有没有机会来看看我?
标签: asp.net-mvc-5 claims-based-identity