检查用户是否仍在登录而不重置auth超时

Naj*_*kin 8 authentication asp.net-mvc asp.net-identity-2

我有一个ASP.Net MVC 5应用程序,使用Identity 2进行身份验证(使用标准cookie身份验证中间件,配置为ExpireTimeSpan = 30分钟,SlidingExpiration = true).

我已经将身份验证配置为在30分钟后过期,我需要从客户端检查用户是否仍然登录.我可以为此做一个简单的AJAX调用,但它会刷新我的会话并重置超时,这是正是我想要避免的.只有当客户端在我的应用程序上只打开一个选项卡时,在Javascript中使用30分钟超时才有效,这是我无法保证的.

我正在考虑向可以检查身份验证是否仍然有效但不重置超时的操作添加自定义属性.有没有办法做到这一点?

或者,这可能也可以使用OWIN中间件完成,但同样,我不知道如何在不重置超时的情况下检查身份验证.

Ste*_*ve0 1

这是我用来完成这一壮举的函数,尽管我只使用 MVC 4。我只是通过定时 ajax post 调用它。我用它来确定需要设置定时 ajax 调用多长时间,这就是我返回剩余秒数的原因。

    <OutputCache(NoStore:=True, Duration:=0)> _
    Function GetExpirySeconds() As ActionResult
        Dim tkt As FormsAuthenticationTicket = Nothing
        Dim retVal As ActionResult = Json("expired")
        Response.Cookies.Remove(FormsAuthentication.FormsCookieName)
        If Request.Cookies(FormsAuthentication.FormsCookieName) IsNot Nothing AndAlso Request.Cookies(FormsAuthentication.FormsCookieName).Value <> "" Then
            tkt = FormsAuthentication.Decrypt(Request.Cookies(FormsAuthentication.FormsCookieName).Value)
            retVal = Json(Math.Floor((tkt.Expiration - Now).TotalSeconds))
            If Math.Floor((tkt.Expiration - Now).TotalSeconds) <= 0 Then retVal = Json("expired")
        End If
        Return retVal
    End Function
Run Code Online (Sandbox Code Playgroud)

参考博文:Kobi 的博客