如何检测WSFederationSession是否已过期或结束?

时间:2014-11-06 08:45:04

标签: c# asp.net-mvc thinktecture-ident-server ws-federation

我在控制器中有几种方法:

public ActionResult Issue()
{
    var message = WSFederationMessage.CreateFromUri(HttpContext.Request.Url);

    // sign in 
    var signinMessage = message as SignInRequestMessage;
    if (signinMessage != null)
    {
        return ProcessWSFederationSignIn(signinMessage, ClaimsPrincipal.Current);
    }

    // sign out
    var signoutMessage = message as SignOutRequestMessage;
    if (signoutMessage != null)
    {
        return ProcessWSFederationSignOut(signoutMessage);
    }

    return View("Error");
}

在这个问题上对我来说最有价值的是:

private ActionResult ProcessWSFederationSignOut(SignOutRequestMessage message)
{
    FederatedAuthentication.SessionAuthenticationModule.SignOut();

    var mgr = new SignInSessionsManager(HttpContext, _cookieName);

    // check for return url
    if (!string.IsNullOrWhiteSpace(message.Reply) && mgr.ContainsUrl(message.Reply))
    {
        ViewBag.ReturnUrl = message.Reply;
    }

    return View("Signout");
}

一切正常,但是,有一些有趣的时刻。 如果我自己结束会话,或者会话只是过期,那么这两种情况都适用。它很好但实际上,我需要区分这些情况,在ViewBag中写一些像"你被烧掉了#34;或者"会话已过期"取决于结果并将其显示在视图中。

是否有某种方法来检测会话过期的情况,还是应该是不同的?

P.S抱歉我的英语不好。

1 个答案:

答案 0 :(得分:-1)

由于您更改了主题,我将更新我的回答。我还没有使用WSFederatinSession,但也许你可以存储关于会话结束的信息(例如在cookie中)和下一个请求(例如在全局的asax中)读取这个inf并做你想做的事情。