.NET Core非身份Cookie身份验证未授权应用程序池刷新

时间:2018-02-12 15:22:32

标签: asp.net-mvc iis asp.net-core .net-core asp.net-identity

我有一个ASP.NET Core 2.0 MVC应用程序,它使用API​​进行身份验证。如果成功,API将返回JWT值,然后用户将登录并将令牌值存储在安全cookie中(并用于进一步的请求)。

但是,如果用户登录,关闭标签并等待一会儿,他们将被提示再次登录(尽管他们仍然会有一个身份验证cookie)。当他们再次登录时,该站点将成功登录,但然后再次重定向到登录页面。如果用户此时导航到授权页面,则允许他们(这是正确的)。它就像最初的RedirectToAction尚未注册用户已获得授权,但在后续请求中它可以正常工作。

我认为登录提示是由于IIS上的应用程序池由于不活动而刷新。所以 - 两个问题

  1. 我可以避免在应用程序池刷新时重新验证用户吗?
  2. 为什么识别第一个重定向的应用程序是否经过身份验证?
  3. 我在https://github.com/aspnet/Security/issues/356找到了可能相关的帖子,虽然这似乎与OIDC有关。值得注意的是,这不是另一个使用ASP.NET核心身份的相同网站的问题。

    Cookie设置:

            services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
            {
                options.LoginPath = "/Account/Login/";
                options.Cookie.HttpOnly = true;
                options.ExpireTimeSpan = TimeSpan.FromHours(6);
            });
    

    登录代码:

                    var claims = new List<Claim>
                    {
                        new Claim(ClaimTypes.Name, model.Email),
                        new Claim("AuthToken", response.Result.Token)
                    };
    
                    var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
    
                    await HttpContext.SignOutAsync();
    
                    await HttpContext.SignInAsync(
                        CookieAuthenticationDefaults.AuthenticationScheme,
                        new ClaimsPrincipal(claimsIdentity));
    
                    _logger.LogInformation("{0} logged in.", model.Email);
    
                    if (String.IsNullOrWhiteSpace(returnUrl))
                    {
                        return RedirectToAction("Index", "Home");
                    }
    
                    return Redirect(returnUrl);
    

0 个答案:

没有答案