Share via


處理 Chrome 瀏覽器中的 SameSite Cookie 變更

什麼是 SameSite?

SameSite 是可在 HTTP Cookie 中設定的屬性,以防止 Web 應用程式中的跨網站要求偽造(CSRF) 攻擊:

  • 當 設定為 LaxSameSite,Cookie 會在相同網站內的要求和來自其他網站的 GET 要求中傳送。 它不會在跨網域的 GET 要求中傳送。
  • Strict可確保 Cookie 只會在相同網站內的要求中傳送。

根據預設, SameSite 此值不會在瀏覽器中設定,這就是為什麼要求中傳送 Cookie 沒有限制的原因。 應用程式必須依照其需求設定 LaxStrict ,選擇加入 CSRF 保護。

SameSite 變更和對驗證的影響

SameSite 上標準的最新更新建議在未將任何值設定為 Lax 時的預設行為SameSite來保護應用程式。 此風險降低表示除了從其他月臺取得 GET 以外,HTTP 要求會限制 Cookie。 此外,會引進 None,以移除所傳送 Cookie 的限制。 這些更新即將在即將推出的 Chrome 瀏覽器版本中發行。

當 Web 應用程式使用回應模式 「form_post」 向 Microsoft 身分識別平台 進行驗證時,登入伺服器會使用 HTTP POST 回應應用程式以傳送令牌或驗證碼。 由於此要求是跨網域要求(例如https://contoso.com/authlogin.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 上將值設定 SameSiteNone ,並在其他瀏覽器上保留值空白。

下列範例程式代碼會示範此方法。

下表呈現在 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 的詳細資訊,請參閱:

下一步

深入瞭解 SameSite 和 Web 應用程式案例: