我試圖實現滑動會話過期。我正在使用Windows Azure ACS,.Net 4.5,WIF。當我第一次收到令牌,如我在做什麼它的默認過期時間設定爲2小時,寫令牌到餅乾在下面的代碼:WIF SessionSecurityToken到期
internal void SetSession(ClaimsPrincipal principal)
{
var sessionToken = new SessionSecurityToken(principal, TimeSpan.FromMinutes(120));
FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken);
Thread.CurrentPrincipal = principal;
}
在這個時候,如果我檢查ValidFrom
和sessionToken
變量的ValidTo
性質,我得到適當的值,如下面的截圖:
我們實現滑動會話過期,我在處理我的Global.asax
文件SessionAuthenticationModule_SessionSecurityTokenReceived
事件,如下圖所示:
void SessionAuthenticationModule_SessionSecurityTokenReceived(object sender, SessionSecurityTokenReceivedEventArgs e)
{
var sessionToken = e.SessionToken;
}
然而,當我檢查令牌的ValidFrom
和ValidTo
性質,它不是我,當我在寫令牌作爲cookie的如下面的截圖設置:
不知道爲什麼會這樣。任何人都可以解釋我做錯了什麼。
UPDATE:
下面是我注意到一個有趣的事情。我實施滑動會話的方式是檢查令牌的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
屬性的值在隨後的請求,它實際上是尊重我設定的價值,如下所示。並且這個值在請求後得到持續的請求,即一旦我重新發布令牌,一切都很好。
謝謝布洛克。但是我仍然不明白爲什麼'ValidTo'值沒有設置爲我想要的值。這是WIF的錯誤還是我做錯了什麼? –
嗨布洛克/高拉夫 - 你有沒有設法弄清楚爲什麼'ValidTo'值設置不正確? – Mike
對不起......我應該很久以前就更新了答案。本質上,默認令牌到期在Windows Azure ACS門戶中設置。無論價值是什麼,都是第一次選擇。 HTH。 –