HttpContext.SignInAsync 失效(表面解决了问题,未深入到.net core 源码去找问题,记录一下,等有时间翻一下.net core 源码试试能不能找到根本原因)

今天在弄 identityServer4 项目的时候,发现好好的登录竟然没用了。

各种跟踪后发现是 HttpContext.SignInAsync 这个方法不写cookies了

原本经过这个方法后,会写入 idsrv和idsrv.session 两个cookies的。

搜索资料后发现简书上有人和我一样的问题

链接如下 https://www.jianshu.com/p/30089845b172

然后我也跟着一样清理了浏览器缓存等数据,也好了。所以这是为什么?

先记录一下解决问题,回头看下.net core 源码看看它是怎么工作的。

我记得出现这个问题的原因是:

我将id4中的  app.UseHttpsRedirection(); 这行代码给注释掉了,首先我没注释前,用它登录过,成功能写cookies

后来我因为开发环境懒得搞证书什么的,就先注释了这句,结果再去登录就写不上cookies了。

先记录问题。我的.net core 版本是 3.1,如果有人知道麻烦评论区告知一下。谢谢

===============================

20201030

因为某些原因,这个项目很久没搞,然后过了2 个月后,跑回来继续弄这个项目,又发现问题,又是控制台报 

 Showing login: User is not authenticated

我以为又是和上次一样的问题,又想着先清理缓存试试,结果发现怎么清理缓存都没用。

然后又开始搜资料,发现了一个人提问和我很像,链接如下,英文的:https://www.e-learn.cn/topic/3672478

我英文也是弱鸡,大概意思是说:

如果用http协议+chrome浏览器(我用的edge最新版,edge也是chromeium核心的吧),如果是http协议+chrome浏览器,会拒绝 SameSite=none 的cookie。

所以,造成了id4无法写入cookie,然后导致一直报这个错误(id4写的cookieSameSite属性=none)

怎么解决,一般推荐用https(我是直接在vs里面启用https来测试的,一起用https就可以登陆了,然后马上了更新了一下这篇文章,我记性差,怕下次遇到又忘记)

也可以修改cookie策略

app.UseCookiePolicy(new CookiePolicyOptions { MinimumSameSitePolicy = SameSiteMode.Lax }); 加入这句代码修改cookie策略(我不知道这么做是否会影响id4功能,我随意测试了一下没有影响,没仔细测。)

推荐还是启用https吧,开发时候我就修改这个策略,上线我还是用https来吧。

记录一下过程,提醒自己。

说起来你们可能不信,我都忘记我写了这篇文章,刚刚登录不上去我又是搜索 HttpContext.SignInAsync 失效,然后找到自己的文章的。。。。。

 

=====20201031

今天访问天猫的站点,发现这个公告,他们教用户设置浏览器。

 

posted @ 2020-06-13 09:31  LoveCoder  阅读(2247)  评论(4编辑  收藏  举报