至少几年来,我在MVC解决方案中一直使用类似于此的代码。
[Authorize]
public class HomeController : Controller
{
[HttpGet]
public ActionResult Index()
{
..........然后在我的认证代码中
myAuthenticationProperties = new Microsoft.Owin.Security.AuthenticationProperties();
myAuthenticationProperties.AllowRefresh = true;
myAuthenticationProperties.ExpiresUtc = DateTime.UtcNow.AddMinutes(60);
myAuthenticationManager.SignIn(myAuthenticationProperties, myClaimsIdentity);
return RedirectToAction("Index", "Home");在我创业的时候..。
public void Configuration(IAppBuilder app)
{
CookieAuthenticationOptions myAuthOptions = new CookieAuthenticationOptions();
myAuthOptions.AuthenticationType = "ApplicationCookie";
myAuthOptions.CookieHttpOnly = true;
myAuthOptions.SlidingExpiration = true;
myAuthOptions.LoginPath = new PathString("/Authentication/LogIn");
//This is what was added for the Owin cookie "fix"
myAuthOptions.CookieSameSite = SameSiteMode.Strict;
myAuthOptions.CookieSecure = CookieSecureOption.Always;
app.UseCookieAuthentication(myAuthOptions);
}生活一直很美好..。直到现在。我一直在到处追逐我的尾巴,试图找出为什么当我尝试登录时,有时它会工作,而另一些时候,它只是挂起。使用一些调试消息,我发现我的身份验证过程已经完成,但是当RedirectToAction发生时,什么也不会发生。挂着就行。
然后我有了一个突破,我试着使用IE和Edge,它似乎每次都起作用。只有Chrome挂起,如果不是更多的话,它至少有75%的时间会挂起。
**更新**
我已经使用了Fiddler和Chrome的调试(控制台和网络标签)和当RedirectToAction发生,就网站而言,它是这样做的。然而,没有什么,我没有任何意义,回到我的客户(根据Fiddler和Chrome的网络)的网络。
然而,如果我手动更改url回家,Chrome是快乐的,我现在已经通过认证,我的授权现在允许加载控制器。
我已经研究了新的Chrome问题,虽然“修复”看起来像泥浆一样清晰,但我还是找到了一个使用代码强迫SameSite cookie报告其他内容的人。我实现了它,实际上它被设置为“严格的”并且仍然..。铬挂。
**乐队-援助**
我不知道这会给我带来多少时间,但我使用Javascript计时器解决了这个问题,当用户单击submit按钮时,计时器启动,等待6秒,然后重定向回Home/Index。
如果问题不存在(IE,Edge),客户端会在计时器有机会掌握之前自动重定向。如果他们正在使用Chrome,它决定挂起,6秒后,它将表现得好像他们的浏览器只是缓慢,也会带他们到正确的地方。
**固定(可能) **
因此,即使没有网络流量返回到客户端,我最终还是(除了上面的创可贴)实现了一些额外的更改,所以现在Owin和Asp.net cookie都报告了安全和sameSite =严格。这似乎对我的问题有很大的影响,如果它还想挂,我的定时重定向就会解决这个问题。
对于那些可能也经历过这种怪事的人来说,饼干修复的要点是.
做这三件事(以及在SSL下运行您的项目)将导致Chrome报告cookies既安全又严格。
发布于 2020-02-12 21:50:17
谷歌在没有SameSite属性的情况下对SameSite做了修改。在此之前,Chrome将不将SameSite属性设置在cookie上与使用SameSite=None一样处理,这意味着浏览器将接受所有cookie。现在,他们把它当作拥有SameSite=Lax,它只接受来自同一个域的cookie。要获得与旧方法相同的效果,必须将属性设置为SameSite=None; Secure。
我不知道这是否对你有影响,但如果是这样,你会在Chrome控制台上看到一个错误。

官方发布的是2月4日的IIRC,但他们正在分阶段推出,以判断正在引发的问题。
一些资源:
https://stackoverflow.com/questions/60196931
复制相似问题