应该在每个请求上调用OWIN cookie身份验证OnValidateIdentity吗?

时间:2015-09-18 18:56:51

标签: vb.net cookies asp.net-identity owin

也许我误解了它是如何工作的,但我认为在服务器的每个HTTP请求上都会调用OnValidateIdentity。我看到它在初始登录时被击中(很多次,所以看起来它最初是每个HTTP请求),但是它似乎没有被再次调用。我让我的应用程序坐在那里,直到它应该过期,但在后续的服务器请求中再也不会被命中,直到我退出并再次登录。

我已将我的到期时间设置得非常低并关闭了滑动过期,看看我是否可以让它失败,但无济于事。

我是否应该看到每个HTTP请求都调用OnValidateIdentity?最终,我真的只想要一个cookie过期导致注销。我假设我必须检查OnValidateIdentity中每个请求的到期日期,但如果不是这样做,请告诉我!

我是否误解了这项工作的方式,或者我应该如何使用Cookie expiries强制注销?

这是我的基本设置:

app.UseCookieAuthentication(New CookieAuthenticationOptions() With
        {
            .AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            .AuthenticationMode = AuthenticationMode.Active,
            .ExpireTimeSpan = TimeSpan.FromMinutes(1.0),
            .SlidingExpiration = False,
            .Provider = New CookieAuthenticationProvider() With
                        {
                            .OnValidateIdentity = SecurityStampValidator.OnValidateIdentity(Of ApplicationUserManager, ApplicationUser, Integer)(
                                validateInterval:=TimeSpan.FromMinutes(1.0),
                                regenerateIdentityCallback:=Async Function(manager, user)
                                                                Return Await user.GenerateUserIdentityAsync(manager, DefaultAuthenticationTypes.ApplicationCookie)
                                                            End Function,
                                getUserIdCallback:=Function(id) id.GetUserId(Of Integer)())
                        },
            .LoginPath = New PathString("/Account/Login")
        })

1 个答案:

答案 0 :(得分:1)

可能有点晚......

要使用Cookie Expiry,请将其委派给浏览器。如果Cookie过期,则浏览器无法发送。

每次请求都会调用OnValidateIdentity。如果要调试它,请将其拉​​出到新方法中,然后从该方法调试。

但是,只有在传递validationInterval时才会对数据库进行身份验证。