【发布时间】:2013-09-09 14:07:35
【问题描述】:
如Sliding Sessions for WIF 4.5 中所述,我已在我的依赖方应用程序中实现了滑动会话。就目前而言,这很有效,但有一个问题似乎没有人谈论。
正如链接的博客文章指出的那样,当 RP 令牌过期时,下次发出请求时,令牌会从 STS 重新发出。当然,假设 STS 会话的生命周期比 RP 的会话生命周期长,如果您正在实施滑动会话,几乎可以肯定是这种情况。
无论如何,这完全违背了滑动会话的全部意义。
似乎没有人谈论的是当 RP 会话到期时该怎么做。我想要是,如果 RP 会话超时(通常是因为有人离开他的办公桌 10 分钟),我的应用程序将重定向到用户可以重新验证的 STS 登录页面,然后被重定向回我请求的页面;或者可能是我提出请求时所在的页面。
我几乎可以肯定这是可能的,但我完全不知道它是如何做到的。
这是我来自 global.asax 的代码:
private const int InactivityTimeout = 5; // minutes
void SessionAuthenticationModule_SessionSecurityTokenReceived
(object sender, SessionSecurityTokenReceivedEventArgs e)
{
var now = DateTime.UtcNow;
var validFrom = e.SessionToken.ValidFrom;
var validTo = e.SessionToken.ValidTo;
double halfSpan = (validTo - validFrom).TotalMinutes/2;
if (validFrom.AddMinutes(halfSpan) < now && now < validTo)
{
// add more time
var sam = sender as SessionAuthenticationModule;
e.SessionToken = sam.CreateSessionSecurityToken(
e.SessionToken.ClaimsPrincipal,
e.SessionToken.Context,
now,
now.AddMinutes(InactivityTimeout),
e.SessionToken.IsPersistent);
e.ReissueCookie = true;
}
else
{
// re-authenticate with STS
}
}
我的问题:
-
else子句是否适合放置重新身份验证逻辑? - 如果是这样,请提供一个示例,因为我不知道。
- 如果对 #1 的回答是否定的,那么我是否需要订阅一个单独的事件来告诉我“嘿,您的会话安全令牌已过期!”?
【问题讨论】:
标签: authentication wif thinktecture-ident-server