ASP.NET - owin static WebMethod - cookie未经过验证

时间:2016-11-23 07:34:09

标签: asp.net asp.net-mvc cookies owin

我的owin设置为使用基于cookie的身份验证与OpenIdConnect,如下所示:

        var options = new CookieAuthenticationOptions()
        {
            ExpireTimeSpan = TimeSpan.FromDays(30),
            Provider = new CookieAuthenticationProvider {
               OnValidateIdentity = cookieValidateIdentityContext =>
               {
                cookieValidateIdentityContext.Properties.ExpiresUtc = DateTime.UtcNow.AddMinutes(1);
                return Task.FromResult(30);
               }
            }
        }
        app.UseCookieAuthentication(options);
        app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions() {.....})

我有一个像这样的静态WebMethod

    [WebMethod]
    public static String GetJsonData(string query)
    {
        var user = HttpContext.Current.User.Identity.Name;
        .....
    }

这样可以正常工作,但如果用户离开浏览器的时间超过20分钟,则auth会失败。 HttpContext.Current.User.Identity.IsAuthenticated为false。

即使我的Cookie设置为在30天后过期,也会发生这种情况。有没有办法强制验证cookie和autenticate?我没有使用基于表单的身份验证。

此外,一旦超过20分钟,就不会调用cookieValidateIdentityContext func。如果我在cookieValidateIdentityContext中设置断点,则在20分钟之前,断点被击中但不会被击中。

1 个答案:

答案 0 :(得分:0)

根据这篇文章Cookie Middleware SlidingExpiration导致问题尝试在web.config中设置它。

SlidingExpiration - 一个标志,指示当ExpireTimeSpan间隔的一半以上过去时,是否将重置cookie过期日期。新的到期日期将向前移动为当前日期加上ExpireTimespan。在调用SignInAsync时,可以使用AuthenticationProperties类设置绝对到期时间。绝对过期可以通过限制身份验证cookie有效的时间来提高应用程序的安全性。