我有一个ASP.NET Core 2.0 MVC应用程序,它使用API进行身份验证。如果成功,API将返回JWT值,然后用户将登录并将令牌值存储在安全cookie中(并用于进一步的请求)。
但是,如果用户登录,关闭标签并等待一会儿,他们将被提示再次登录(尽管他们仍然会有一个身份验证cookie)。当他们再次登录时,该站点将成功登录,但然后再次重定向到登录页面。如果用户此时导航到授权页面,则允许他们(这是正确的)。它就像最初的RedirectToAction尚未注册用户已获得授权,但在后续请求中它可以正常工作。
我认为登录提示是由于IIS上的应用程序池由于不活动而刷新。所以 - 两个问题
我在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);