FedAuth cookie在Firebug中不显示到期日期

时间:2014-09-11 08:33:24

标签: asp.net-mvc asp.net-identity

我有一个使用SSL保护的ASP.Net MVC网站并使用System.IdentityModel.Services并正在创建这样的令牌:

SessionSecurityToken token = new SessionSecurityToken(myClaimsPrincipal, TimeSpan.FromDays(1));
SessionAuthenticationModule sam = FederatedAuthentication.SessionAuthenticationModule;
sam.WriteSessionTokenToCookie(token);

当我在浏览器中访问该站点时,Firebug不会按预期显示到期日期。相反,失效日期显示为会话

Expiry date = "Session"

有谁可以解释为什么这是好的?我假设ASP.Net在读取cookie时仍然可以在内部看到实际的到期日期?更重要的是,实际设置的cookie到期时间在哪里?

1 个答案:

答案 0 :(得分:4)

你在这里混合了两件不同的东西:

  • 令牌过期正在确定令牌有效期。在此之后,即使令牌附加到请求,它也被视为无效,并且不会被尊重。通常,到期时间在令牌本身内加密,这意味着它只由令牌发行者控制。

  • Cookie Expiration 是由客户端控制的(在这种情况下是您的Web浏览器)。 Cookie过期后,不再附加到请求。但是,如果浏览器决定发送它,它将一直有效,直到Token到期为止。

在您的特定情况下,令牌过期设置为1天,但由于Cookie过期设置为“会话”,这意味着如果您要在某个时间点结束会话(通常通过关闭浏览器窗口)令牌过期后,Cookie将不会被发送,您将被要求再次登录。

在1天后(当令牌过期时),即使您仍处于会话中,您也总是需要再次登录。

更新(根据您的意见):

票证到期和Cookie到期可以单独设置,因为有时票证不一定包含在Cookie中。它可以使用其他方法(QueryString,自定义HTTP标头等)发送到服务器。然而,事实上,自然要做的就是将它们设置为相同的到期时间。

SessionSecurityToken中也是如此,如果您将IsPersistent标记设置为true,您会发现Cookie过期现在与故障单相同:< / p>

SessionSecurityToken token = new SessionSecurityToken(myClaimsPrincipal, TimeSpan.FromDays(1));
token.IsPersistent = true;