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

今天訪問天貓的站點,發現這個公告,他們教用戶設置瀏覽器。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM