處理 Chrome 瀏覽器中的 SameSite Cookie 變更
什麼是 SameSite?
SameSite
是可在 HTTP Cookie 中設定的屬性,以防止 Web 應用程式中的跨網站要求偽造(CSRF) 攻擊:
- 當 設定為 Lax 時
SameSite
,Cookie 會在相同網站內的要求和來自其他網站的 GET 要求中傳送。 它不會在跨網域的 GET 要求中傳送。 - Strict 值可確保 Cookie 只會在相同網站內的要求中傳送。
根據預設, SameSite
此值不會在瀏覽器中設定,這就是為什麼要求中傳送 Cookie 沒有限制的原因。 應用程式必須依照其需求設定 Lax 或 Strict ,選擇加入 CSRF 保護。
SameSite 變更和對驗證的影響
SameSite 上標準的最新更新建議在未將任何值設定為 Lax 時的預設行為SameSite
來保護應用程式。 此風險降低表示除了從其他月臺取得 GET 以外,HTTP 要求會限制 Cookie。 此外,會引進 None 值,以移除所傳送 Cookie 的限制。 這些更新即將在即將推出的 Chrome 瀏覽器版本中發行。
當 Web 應用程式使用回應模式 「form_post」 向 Microsoft 身分識別平台 進行驗證時,登入伺服器會使用 HTTP POST 回應應用程式以傳送令牌或驗證碼。 由於此要求是跨網域要求(例如https://contoso.com/auth
從 login.microsoftonline.com
網域到您的網域),因此您的應用程式所設定的Cookie現在屬於Chrome中的新規則。 跨網站案例中需要使用的 Cookie 是保留 狀態 和 nonce 值的 Cookie,這些 Cookie 也會在登入要求中傳送。 Microsoft Entra ID 會捨棄其他 Cookie 來保存會話。
如果您未更新 Web 應用程式,此新行為會導致驗證失敗。
風險降低和範例
為了克服驗證失敗,使用 Microsoft 身分識別平台 進行驗證的 Web 應用程式可以將 屬性None
設定SameSite
為 ,以在 Chrome 瀏覽器上執行時用於跨網域案例的 Cookie。
其他瀏覽器(請參閱 這裡 以取得完整清單)遵循先前的行為 SameSite
,如果 SameSite=None
已設定,則不會包含 Cookie。
因此,若要在多個瀏覽器上支持驗證,Web 應用程式必須只在 Chrome 上將值設定 SameSite
為 None
,並在其他瀏覽器上保留值空白。
下列範例程式代碼會示範此方法。
下表呈現在 ASP.NET 和 ASP.NET Core 範例中處理 SameSite 變更的提取要求。
範例 | 提取要求 |
---|---|
ASP.NET Core Web 應用程式累加教學課程 | 相同的網站 Cookie 修正 #261 |
ASP.NET MVC Web 應用程式範例 | 相同的網站 Cookie 修正 #35 |
active-directory-dotnet-admin-restricted-scopes-v2 | 相同的網站 Cookie 修正 #28 |
如需如何在 ASP.NET 和 ASP.NET Core 中處理 SameSite Cookie 的詳細資訊,請參閱:
- 在 Core ASP.NET 中使用 SameSite Cookie。
- SameSite 問題的 ASP.NET 部落格
下一步
深入瞭解 SameSite 和 Web 應用程式案例: