.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 ,Chrome在80之前會通知你要修改為Lax。
- 80之後,Lax為Chrome的預設值。意思是你不設定的話,預設為Lax。
- ps:目前的程式不用更動。
- 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。
其它參考