gpt4 book ai didi

azure - WIF session 安全 token 过期

转载 作者:行者123 更新时间:2023-12-04 12:54:51 25 4
gpt4 key购买 nike

我正在尝试实现滑动 session 过期。我正在使用 Windows Azure ACS、.Net 4.5、WIF。当我第一次收到 token 时,我所做的是将其默认过期时间设置为 2 小时,并将该 token 写入 cookie,如下面的代码所示:

internal void SetSession(ClaimsPrincipal principal)
{
var sessionToken = new SessionSecurityToken(principal, TimeSpan.FromMinutes(120));
FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken);
Thread.CurrentPrincipal = principal;
}

此时,如果我检查 sessionToken 变量的 ValidFromValidTo 属性,我会得到正确的值,如屏幕截图所示如下:

enter image description here

现在为了实现滑动 session 过期,我在 Global.asax 文件中处理 SessionAuthenticationModule_SessionSecurityTokenReceived 事件,如下所示:

    void SessionAuthenticationModule_SessionSecurityTokenReceived(object sender, SessionSecurityTokenReceivedEventArgs e)
{
var sessionToken = e.SessionToken;
}

但是,当我检查 token 的 ValidFromValidTo 属性时,这不是我在将 token 写入 cookie 时设置的内容,如下面的屏幕截图所示:

enter image description here

不知道为什么会发生这种情况。谁能解释一下我做错了什么。

更新:

这是我注意到的一件有趣的事情。我实现滑动 session 的方法是检查 token 的 ValidTo 属性并将其与当前日期/时间(UTC 格式)进行比较。如果差异小于 5 分钟,我会将 ValidTo 时间增加 2 小时并重新发出 cookie,如下面的代码所示:

    void SessionAuthenticationModule_SessionSecurityTokenReceived(object sender, SessionSecurityTokenReceivedEventArgs e)
{
var sessionToken = e.SessionToken;
var currentDateTime = DateTime.UtcNow.Ticks;
var sessionExpirationDateTime = sessionToken.ValidTo.Ticks;
if (sessionExpirationDateTime >= currentDateTime)
{
var renewTokenWindow = 5 * 60 * 1000;//5 minutes
TimeSpan ts = new TimeSpan(sessionExpirationDateTime - currentDateTime);
if (ts.TotalMilliseconds < renewTokenWindow)
{
var newSessionTokenExpiry = sessionToken.ValidTo.AddMinutes(120);
//Renew token
SessionAuthenticationModule sam = sender as SessionAuthenticationModule;
var newSessionToken = sam.CreateSessionSecurityToken(sessionToken.ClaimsPrincipal, sessionToken.Context, sessionToken.ValidFrom, newSessionTokenExpiry, sessionToken.IsPersistent);
e.SessionToken = newSessionToken;
e.ReissueCookie = true;
}
}
}

现在,如果我在后续请求中检查 ValidTo 属性的值,它实际上会遵循我设置的值,如下所示。并且这个值会在请求后得到持久的请求,即一旦我重新发出 token ,一切都会正常工作。

enter image description here

最佳答案

Thinktecture IdentityModel 有一个实现,因此您可以通过 NuGet 引用该包,也可以只复制源代码:

http://brockallen.com/2013/02/17/sliding-sessions-in-wif-with-the-session-authentication-module-sam-and-thinktecture-identitymodel/

关于azure - WIF session 安全 token 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17905700/

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