Sliding Sessions for WIF 4.5で説明されているように、Relying Party アプリケーションにスライディング セッションを実装しました。それはうまく機能しますが、誰も話していないように見える問題が 1 つあります。
リンクされたブログ投稿が指摘しているように、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 に対する答えが「いいえ」の場合、サブスクライブする必要がある別のイベントがあり、「ねえ、セッション セキュリティ トークンの有効期限が切れています!」と通知されますか?