gpt4 book ai didi

asp.net-mvc - FedAuth cookie 不在 Firebug 中显示到期日期

转载 作者:行者123 更新时间:2023-12-04 14:47:59 28 4
gpt4 key购买 nike

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

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

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

Expiry date = "Session"

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

最佳答案

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

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

  • Cookie 过期 是由客户端(在本例中为您的网络浏览器)控制的。一旦 Cookie 过期,它就不再附加到请求中。但是,如果浏览器决定发送它,它将一直有效直到 token 到期。

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

1 天后( token 过期时),即使您仍在 session 中,您也总是需要重新登录。

更新(根据您的评论):

Ticket过期时间和Cookie过期时间可以分开设置,只是因为有时Ticket不一定包含在Cookie中。它可以使用其他方法(查询字符串、自定义 HTTP header 等)发送到服务器。然而,确实很自然的做法是将它们都设置为相同的到期时间。

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

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

关于asp.net-mvc - FedAuth cookie 不在 Firebug 中显示到期日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25782769/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com