.Net Core Identity 無法登入

前言
 
前陣子使用Blazor Assembly寫的一個Side Project給家人使用,這兩天反應無法登入,一直跳回Login。在反應的當下,我測試都正常,直到今天早上要登入時,出現了同樣的問題。
http status回應200,沒有任何錯誤訊息。

執行版本
  • .Net Core 3.1
  • Blazor Assembly 3.2.0
  • Microsoft.AspNetCore.Identity 3.1.7

原因

檢查console及Response Header,有警告訊息"Identity.External samesite=none; httponly...",判斷應該chrome 85針對SameStie更嚴格的限制造成的。

圖片來源 Ps:忘了擷圖XD,引用一張相似的。

關於SameStie
  • SameStie是防止第三方Cookie的存取。
  • Strict : 嚴格限制。
  • Lax  : 只有Get 可以存取,Post不行。
  • None : 在https下,Secure設為true,第三方才可以存取。

解決方式

將Identity相關Cookie由原于的none設置成Lax。

1.設定Lax
   services.ConfigureExternalCookie(options =>
            {
                options.Cookie.SameSite =  Microsoft.AspNetCore.Http.SameSiteMode.Lax;
            });
            services.Configure<CookiePolicyOptions>(options =>
            {
                options.MinimumSameSitePolicy = SameSiteMode.Lax;
          
            });

2.啟用Cookie Policy
   app.UseCookiePolicy();

大功告成,修正bug。

其它參考

這個網誌中的熱門文章

IIS 設定只允許特定IP進入

[Sql Server] 資料庫備份筆記