2020年3月30日 星期一

[ ASP.NET MVC ] Cookie Same Site 屬性設定

最近開發網站突然遇到 Cookie 與 Session 失效,並且都發生在 Chrome 瀏覽器上,後來爬文才發現 Chorme 瀏覽器 80 以上版本安全性更新,會造成第三方 Cookie 失效,所以這邊紀錄一下處理的方式與當初踩到的地雷。


1. 調整專案目標 Framework 至 4.7.2


2. 設定 Cookie SameSite 與 Secure 參數


3. 啟用 SSL 設定


4. 測試 Cookie 設定參數是正確



到此為止程式碼的設定就完成了,原本我是這麼想的但接下來的狀況就是不斷的踩雷,下面是我所遇到的狀況與解決辦法。


1. 已設定 SameSite 但卻沒有生效 ( 可能是空白或者是 Lax )

因為 SameSite 設定需搭配 Https 才會生效,所以如果要測試請記得將 Https 打開,本機測試可以到 IIS "建立自我簽屬憑證" 進行測試。


2. Framework 已升級至 4.7.2 但 SameSite 設定還是沒有生效

爬了一些文之後才發現,原本的 Framework 4.7.2 存在一些 Bug,在 FormsAuth 和 SessionState 即使設定還是會維持 Lax, 所以更新完成之後還必須更新相關套件才可以正常 Work,各 OS 需更新套件版本請參考下面連結。

3. Cookie __RequestVerificationToken 失效

 Framework 4.7.2 之後,所有 Cookie 都會新增 Samesite 參數,並預設 Lax,但舊版本之瀏覽器並不支援,所以使用舊版本之瀏覽器時會有 Cookie 失效的情況發生,這時候必須將 Samesite 設為 -1 ( 代表不使用此參數 ),才可以正常工作。

Cookie SameSite属性介绍及其在ASP.NET项目中的应用

支援 Samesite 屬性的瀏覽器

最後特別補充一下,SameSite 與 Secure 都可以透過 WebConfig 設定,但我的開發環境一直無法辨識 SameSite 參數,所以最後只好透過程式控制,如果大家沒有這個問題,可以透過 WebConfig 設定就好,這樣其實比較簡單清楚


參考資料:

什麼!? SameSite Cookies Policy 更新了— Chrome SameSite Attribute 簡介



2020年3月23日 星期一

[ Entity Framework Core ] 1. 使用 Entity Framework Core

1. 加入 EF package

dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.SqlServer  
dotnet add package Microsoft.EntityFrameworkCore.Sqlite.Core  

2. 從資料庫建立模型

dotnet ef dbcontext scaffold "Server=192.168.XXX.XXX;Database=[dbname];User ID=[db_account];Password=[db_pw];Trusted_Connection=True;Integrated Security=False;" Microsoft.EntityFrameworkCore.SqlServer -o Models

3. 從資料庫更新模型

dotnet ef dbcontext scaffold "Server=192.168.XXX.XXX;Database=[dbname];User ID=[db_account];Password=[db_pw];Trusted_Connection=True;Integrated Security=False;" Microsoft.EntityFrameworkCore.SqlServer -o Models -f

4. [DB]Context.cs 移除 ConnectionString 設定