簡體   English   中英

Thinktecture Identity v2滾動會話安全令牌

[英]Thinktecture Identity v2 rolling session security token

我目前正在使用Identity作為登錄系統,但它創建的會話令牌提供了10個小時的固定到期日期。 如果用戶閑置20分鍾,我的系統規范要求會話到期。 我無法在源代碼中找到提供滾動會話狀態的任何地方。

我已經搜索了該問題,唯一的解決方案是每次在global.asax中引發SessionAuthenticationModule_SessionSecurityTokenReceived事件時,從sessionAuthenticationModule創建一個新會話。

        if (validFrom.AddMinutes(halfSpan) < now && now < validTo)
        {
            var sam = sender as SessionAuthenticationModule;

            e.SessionToken = sam.CreateSessionSecurityToken(
                e.SessionToken.ClaimsPrincipal,
                e.SessionToken.Context,
                now,
                now.AddMinutes(5),
                e.SessionToken.IsPersistent);
            e.ReissueCookie = true;
        }

這種方法有更好的替代方案嗎?

ThinkTecture的成員艾倫·布洛克(Allen Brock)表示,如果會話仍然有效但超過一半已經過期,我們會重新簽發令牌:

void SessionAuthenticationModule_SessionSecurityTokenReceived(object sender, SessionSecurityTokenReceivedEventArgs e)
{
    SessionAuthenticationModule sam = FederatedAuthentication.SessionAuthenticationModule;

    var token = e.SessionToken;
    var duration = token.ValidTo.Subtract(token.ValidFrom);
    if (duration <= TimeSpan.Zero) return;

    var diff = token.ValidTo.Add(sam.FederationConfiguration.IdentityConfiguration.MaxClockSkew).Subtract(DateTime.UtcNow);
    if (diff <= TimeSpan.Zero) return;

    var halfWay = duration.TotalMinutes / 2;
    var timeLeft = diff.TotalMinutes;
    if (timeLeft <= halfWay)
    {
        e.ReissueCookie = true;
        e.SessionToken =
            new SessionSecurityToken(
                token.ClaimsPrincipal,
                token.Context,
                DateTime.UtcNow,
                DateTime.UtcNow.Add(duration))
            {
                IsPersistent = token.IsPersistent,
                IsReferenceMode = token.IsReferenceMode
            };
    }
}

如果你贊成,你不需要自己編寫,但可以從global.asax調用它:

public override void Init()
{
    PassiveModuleConfiguration.EnableSlidingSessionExpirations();
}

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

另請參閱使用SAM和Thinktecture IdentityModel在WIF中使用滑動會話時使用新的SessionSecurityToken更新BootStrapContext以解決此問題:序列化為當前聲明的BootStrapToken標識仍然是舊的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM