今天在弄 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
今天訪問天貓的站點,發現這個公告,他們教用戶設置瀏覽器。

