分享方式:


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

什麼是 SameSite?

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

  • SameSite 設定為 [Lax] 時,Cookie 在相同網站中,會以要求傳送,而從其他網站而來的 Cookie,則會以 GET 要求傳送。 跨網域不會以 GET 要求傳送。
  • Strict 值可確保 Cookie 在相同的網站中時,才能以要求傳送。

根據預設,瀏覽器中不會設定 SameSite 值,因此不會限制 Cookie 須以要求傳送。 應用程式必須依其需求,設定 [Lax] 或 [Strict]來加入 CSRF 保護。

SameSite 變更及其對驗證的影響

SameSite 標準最近的更新建議,除非此值設為 [Lax],否則 SameSite 的預設行為為保護應用程式。 此風險降低措施表示 Cookie 只能透過來自其他網站的 GET 要求,而無法透過 HTTP 要求。 此外也加入了 [None] 值來移除對所要傳送之 Cookie 的限制。 這些更新很快就會在即將推出的 Chrome 瀏覽器版本中發行。

Web 應用程式使用回應模式 "form_post" 向 Microsoft 身分識別平台進行驗證時,登入伺服器會使用 HTTP POST 回應應用程式,從而傳送權杖或驗證碼。 因為此要求是跨網域要求 (從 login.microsoftonline.com 到您的網域 ,例如 https://contoso.com/auth),所以您應用程式設定的 Cookie 現在會在 Chrome 新規則的規範之內。 跨網站案例中所要使用的 Cookie,會保存 statenonce 值,也會隨登入要求傳送。 Microsoft Entra ID 會捨棄其他 Cookie 來保存工作階段。

若您未更新您的 Web 應用程式,上述新行為將會導致驗證失敗。

風險降低與範例

為了克服驗證失敗,使用 Microsoft 身分識別平台進行驗證的 Web 應用程式,可以將 Cookie 的 SameSite 屬性設定為 None ,以利其在跨網域案例中,於 Chrome 瀏覽器上執行。 其他瀏覽器 (完整清單請參閱這裡) 仍採有原有的 SameSite 行為,在設定 SameSite=None 的情況下,不會包含 Cookie。 因此,如需支援多個瀏覽器的驗證,Web 應用程式只須在 Chrome 上,將 SameSite 值設定為 [None],在其他瀏覽器上將此值保留為空白即可。

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

下一步

深入了解 SameSite 與 Web 應用程式案例: