【问题标题】:FedAuth cookie does not display expiry date in FirebugFedAuth cookie 在 Firebug 中不显示到期日期
【发布时间】:2014-09-11 22:45:58
【问题描述】:

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

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

当我在浏览器中访问该站点时,Firebug 没有按预期显示到期日期。相反,到期日期显示为 Session

谁能解释一下这是为什么?我假设 ASP.Net 在读取 cookie 时仍然可以在内部看到实际的到期日期?更何况,cookie的过期时间实际设置在哪里?

【问题讨论】:

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


    【解决方案1】:

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

    • 令牌过期 确定令牌有效的时间。在那之后,即使令牌附加到请求中,它也会被视为无效并且不会被兑现。通常到期时间在令牌本身内加密,这意味着它仅由令牌颁发者控制。

    • Cookie 过期 是由客户端(在本例中为您的 Web 浏览器)控制的。一旦 Cookie 过期,它将不再附加到请求中。但是,如果浏览器决定发送它,它将一直工作到令牌到期为止。

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

    1 天后(令牌过期),即使您仍在会话中,您也始终需要重新登录。

    更新(根据您的 cmets):

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

    在您的SessionSecurityToken 中也是如此,如果您将其IsPersistent 标志设置为true,您会注意到Cookie 过期现在与票证相同:

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

    【讨论】:

    • 好的,谢谢。如果我希望用户在一天内不必再次登录(无论浏览器是否关闭),我是否需要将 cookie 令牌到期时间都设置为 1 天?考虑到它们的相关性质,我认为令牌发行者会自动完成此操作?
    • 您能否提供有关为什么两者没有自动链接的任何详细信息 - 例如cookie 与令牌一起存在吗?当然,如果将令牌写入 cookie,那么该 cookie 应该自动保持令牌时间跨度,因为只有两个对象组合提供了有效的 ClaimsIdentity?
    猜你喜欢
    • 1970-01-01
    • 2012-02-26
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2017-11-10
    相关资源
    最近更新 更多