最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

使用IdentityServer出現(xiàn)過(guò)SameSite Cookie這個(gè)問(wèn)題嗎?

2022-04-29 16:00 作者:沙漠盡頭的狼  | 我要投稿

原文作者:Sebastian Gingter

原文鏈接:https://www.thinktecture.com/en/identityserver/prepare-your-identityserver/

譯者:沙漠盡頭的狼

譯文鏈接:https://dotnet9.com/2022/04/How-To-Prepare-Your-IdentityServer-For-Chromes-SameSite-Cookie-Changes-And-How-To-Deal-With-Safari-Nevertheless

本文是作者2019年的一篇分享,里面的一些觀點(diǎn)和使用的技術(shù),對(duì)我們現(xiàn)在的開發(fā)依然有效,建議查看原文閱讀,對(duì)本文翻譯如有疑問(wèn),歡迎提PR。

首先,好消息:Google 將在 2020 年 2 月發(fā)布 Chrome 80時(shí),包括 Google 實(shí)施的“漸進(jìn)式更好的 Cookie”(Incrementally better Cookies),這將使網(wǎng)絡(luò)成為一個(gè)更安全的地方,并有助于確保用戶獲得更好的隱私(站長(zhǎng)注:現(xiàn)在是2022年4月28號(hào),Chrome已經(jīng)發(fā)布了多個(gè)更新版本)。

壞消息是,這個(gè)新實(shí)現(xiàn)是瀏覽器決定如何向服務(wù)器發(fā)送 cookie 的重大變化。首先,如果您為 Web 應(yīng)用程序和身份驗(yàn)證服務(wù)器使用單獨(dú)的域,那么 Chrome 中的這種更改很可能會(huì)破壞部分用戶的會(huì)話體驗(yàn)。第二個(gè)問(wèn)題是它還可能使您的部分用戶無(wú)法再次正確注銷您的系統(tǒng)。

1. 首先,這個(gè) SameSite 是關(guān)于什么的?

Web 是一個(gè)非常開放的平臺(tái):Cookie 是在大約 20 年前設(shè)計(jì)的,以及 2011 年在?RFC 6265中重新審視該設(shè)計(jì)時(shí),跨站請(qǐng)求偽造 (CSRF) 攻擊和過(guò)度用戶跟蹤還不是什么大事。

簡(jiǎn)而言之,正常的 Cookie 規(guī)范說(shuō),如果為特定域設(shè)置了 Cookie,它將在瀏覽器發(fā)出的每個(gè)請(qǐng)求時(shí)帶上Cookie發(fā)送到該域。無(wú)論您是否直接導(dǎo)航到該域,如果瀏覽器只是從該域加載資源(即圖像),向其發(fā)送 POST 請(qǐng)求或?qū)⑵渲械囊徊糠智度氲?iframe 中。但也許對(duì)于后一種可能性,您不希望瀏覽器自動(dòng)將用戶會(huì)話 Cookie 發(fā)送到您的服務(wù)器,因?yàn)檫@將允許任何網(wǎng)站在該用戶的上下文中執(zhí)行針對(duì)您的服務(wù)器的請(qǐng)求的 JavaScript,而不會(huì)引起他們的注意。

為了防止這種情況發(fā)生,?SameSite cookie 規(guī)范?是在 2016 年起草的。它讓您可以更好地控制何時(shí)應(yīng)該或不應(yīng)該發(fā)送 cookie:當(dāng)您設(shè)置 cookie 時(shí),您現(xiàn)在可以為每個(gè) cookie 明確指定瀏覽器何時(shí)應(yīng)將其添加到請(qǐng)求。為此,當(dāng)瀏覽器位于您自己的域中時(shí),它引入了同站點(diǎn) cookie 的概念,而當(dāng)瀏覽器在不同域中導(dǎo)航但向您的域發(fā)送請(qǐng)求時(shí),它引入了跨站點(diǎn) cookie 的概念。

為了向后兼容,相同站點(diǎn) cookie 的默認(rèn)設(shè)置并沒(méi)有改變以前的行為。您必須選擇加入該新功能并明確設(shè)置您的 cookie??或??使其更安全。這已在 .NET Framework(包括.NET CORE) 和所有常見(jiàn)瀏覽器中實(shí)現(xiàn)。 Lax 意味著,cookie 將在初始導(dǎo)航時(shí)發(fā)送到服務(wù)器, Strict 意味著 cookie 只會(huì)在您已經(jīng)在該域上時(shí)發(fā)送(即初始導(dǎo)航后的第二個(gè)請(qǐng)求)。

遺憾的是,這項(xiàng)新功能的采用速度很慢(根據(jù) 2019 年 3 月 Chrome 的遙測(cè)數(shù)據(jù) 【來(lái)源?】,全球范圍內(nèi) Chrome 上處理的所有 cookie 中只有 0.1% 使用 SameSite 標(biāo)志)。

谷歌決定推動(dòng)采用該功能。為了強(qiáng)制執(zhí)行,他們決定更改世界上最常用的瀏覽器的默認(rèn)設(shè)置:Chrome 80 將??指定一個(gè)新的設(shè)置??來(lái)保留處理 cookie 的舊方式,如果您像舊規(guī)范建議的那樣省略 SameSite 字段,它將 cookie 視為使用?.

請(qǐng)注意: 該設(shè)置??僅在 cookie 也被標(biāo)記為??并需要 HTTPS 連接時(shí)才有效。

更新:?如果您想了解有關(guān) SameSite cookie 的更多背景信息,有一篇包含?所有細(xì)節(jié)的新文章。

2. 這對(duì)我有影響嗎?如果是,怎么做?

如果您有一個(gè)單頁(yè)面 Web 應(yīng)用程序 (SPA),它針對(duì)托管在不同域上的身份提供者(IdP,例如?IdentityServer 4)進(jìn)行身份驗(yàn)證,并且該應(yīng)用程序使用所謂的靜默令牌刷新,您就會(huì)受到影響。

登錄 IdP 時(shí),它會(huì)為您的用戶設(shè)置一個(gè)會(huì)話 cookie,該 cookie 來(lái)自 IdP 域。在身份驗(yàn)證流程結(jié)束時(shí),來(lái)自不同域的應(yīng)用程序會(huì)收到某種訪問(wèn)令牌,這些令牌通常不會(huì)很長(zhǎng)時(shí)間。當(dāng)該令牌過(guò)期時(shí),應(yīng)用程序?qū)o(wú)法再訪問(wèn)資源服務(wù)器 (API),如果每次發(fā)生這種情況時(shí)用戶都必須重新登錄,這將是非常糟糕的用戶體驗(yàn)。

為防止這種情況,您可以使用靜默令牌刷新。在這種情況下,應(yīng)用程序會(huì)創(chuàng)建一個(gè)用戶不可見(jiàn)的 iframe,并在該 iframe 中再次啟動(dòng)身份驗(yàn)證過(guò)程。IdP 的網(wǎng)站在 iframe 中加載,如果瀏覽器沿 IdP 發(fā)送會(huì)話 cookie,則識(shí)別用戶并發(fā)出新令牌。

現(xiàn)在 iframe 存在于托管在應(yīng)用程序域中的 SPA 中,其內(nèi)容來(lái)自 IdP 域。如果 cookie 明確指出?,Chrome 80 只會(huì)將該 cookie 從 iframe 發(fā)送到 IdP,這被認(rèn)為是跨站點(diǎn)請(qǐng)求。 如果不是這種情況,您的靜默令牌刷新將在 2 月 Chrome 80 發(fā)布時(shí)中斷。

還有其他情況可能會(huì)給您帶來(lái)問(wèn)題:首先,如果您在 Web 應(yīng)用程序或網(wǎng)站中嵌入源自另一個(gè)域的元素,例如視頻的自動(dòng)播放設(shè)置,并且這些需要 cookie 才能正常運(yùn)行,這些也會(huì)需要設(shè)置 SameSite 策略。如果您的應(yīng)用程序需要從依賴于 cookie 身份驗(yàn)證的瀏覽器請(qǐng)求第 3 方 API,這同樣適用。

注意:?顯然您只能更改您自己的服務(wù)器關(guān)于cookie設(shè)置的cookie 行為。如果您碰巧使用了不受您控制的其他域中的元素,您需要聯(lián)系第 3 方,并在出現(xiàn)問(wèn)題時(shí)要求他們更改 cookie。

3. 好的,我將更改我的代碼并將 SameSite 設(shè)置為 None。我現(xiàn)在可以了,對(duì)吧?

不幸的是,Safari?有一個(gè)“錯(cuò)誤”。此錯(cuò)誤導(dǎo)致 Safari 無(wú)法將新引入的值??識(shí)別為 SameSite 設(shè)置的有效值。當(dāng) Safari 遇到無(wú)效值時(shí),它會(huì)將??當(dāng)作已指定的設(shè)置,并且不會(huì)將會(huì)話 cookie 發(fā)送到 IdP。此錯(cuò)誤已在 iOS 13 和 macOS 10.15 Catalina 上的 Safari 13 中修復(fù),但不會(huì)向后移植到 macOS 10.14 Mojave 和 iOS 12,它們?nèi)匀粨碛蟹浅4蟮挠脩羧骸?/p>

所以,我們現(xiàn)在陷入了兩難境地:要么我們忽略 SameSite 策略,我們的 Chrome 用戶無(wú)法進(jìn)行靜默刷新,要么我們?cè)O(shè)置??并鎖定 iPhone、iPad 和 Mac 用戶無(wú)法更新,或者舊設(shè)備無(wú)法更新到最新版本的 iOS 和 macOS。

4. 有沒(méi)有辦法確定我受到影響?

幸運(yùn)的是,是的。如果您已經(jīng)設(shè)置?,您可能已經(jīng)注意到您的應(yīng)用程序或網(wǎng)站在 iOS 12 和 macOS 10.4 上的 Safari 中無(wú)法正常工作。如果沒(méi)有,請(qǐng)確保在這些版本的 Safari 中測(cè)試您的應(yīng)用程序或網(wǎng)站。

如果您根本不設(shè)置 SameSite 值,您只需在 Chrome 中打開您的應(yīng)用程序并打開開發(fā)人員工具即可。您將看到以下警告:

如果您已經(jīng)設(shè)置??但忘了設(shè)置??標(biāo)志,您將收到以下警告:

5. 那么,我該如何真正解決這個(gè)問(wèn)題?我需要 Chrome 和 Safari 正常使用。

我們,也就是我的同事 Boris Wilhelms 和我自己,對(duì)該主題進(jìn)行了一些研究,并找到且驗(yàn)證了解決方案。微軟的 Barry Dorrans也有一篇?關(guān)于這個(gè)問(wèn)題的好博文。該解決方案并不美觀,遺憾的是需要在服務(wù)器端進(jìn)行瀏覽器嗅探,但這是一個(gè)簡(jiǎn)單的解決方案,在過(guò)去的幾周里,我們已經(jīng)在我們的幾個(gè)客戶項(xiàng)目中成功實(shí)現(xiàn)了這一點(diǎn)。

要解決這個(gè)問(wèn)題,我們首先需要確保需要通過(guò)跨站點(diǎn)請(qǐng)求傳輸?shù)?cookie(例如我們的會(huì)話 cookie)設(shè)置為??和?。我們需要在項(xiàng)目代碼中找到該 cookie 的選項(xiàng)并進(jìn)行相應(yīng)調(diào)整。這解決了 Chrome 的問(wèn)題并引入了 Safari 問(wèn)題。

然后我們將以下類和代碼片段添加到項(xiàng)目中。這會(huì)在 ASP.NET Core Web 應(yīng)用程序中添加和配置 cookie 策略。此策略將檢查是否設(shè)置了 cookie 為??。如果是這種情況,它將檢查瀏覽器的用戶代理,并確定這是否是一個(gè)瀏覽器的設(shè)置有問(wèn)題,比如我們受影響的 Safari 版本。如果也是這種情況,它會(huì)將 cookies SameSite 值設(shè)置為(未指定),這反過(guò)來(lái)將完全阻止設(shè)置 SameSite,從而為這些瀏覽器重新創(chuàng)建當(dāng)前默認(rèn)行為。

請(qǐng)注意: 此處提供的解決方案適用于?。對(duì)于完整的基于??的項(xiàng)目,您需要查看Barry Dorran 的帖子中指定的版本之一 。

5.1 要添加到項(xiàng)目中的類

5.2 配置和啟用 cookie 策略

要使用此 cookie 策略,您需要將以下內(nèi)容添加到您的啟動(dòng)代碼中:

6. 好的。我現(xiàn)在完成了嗎?

除了徹底的測(cè)試,特別是在 Chrome 79 中激活了“默認(rèn) cookie 的 SameSite”標(biāo)志以及 macOS 和 iOS 上受影響的 Safari 版本,是的,你現(xiàn)在應(yīng)該沒(méi)事了。要在 Chrome 79 中進(jìn)行測(cè)試,請(qǐng)導(dǎo)航到?、搜索??并啟用該??標(biāo)志。重新啟動(dòng)瀏覽器,您可以立即測(cè)試即將發(fā)生的更改。

嚴(yán)肅的說(shuō):確保您的靜默刷新 - 或者通常是需要 cookie 的跨站點(diǎn)請(qǐng)求 - 仍然可以在這些設(shè)備和瀏覽器上運(yùn)行。

7. 我不能簡(jiǎn)單地等待我的身份驗(yàn)證服務(wù)器供應(yīng)商為我解決這個(gè)問(wèn)題嗎?

這是不太可能的。在我們這里的具體示例中,實(shí)際上管理 cookie 的不是 IdentityServer 本身。IdentityServer 依賴于 ASP.NET Core 框架的內(nèi)置身份驗(yàn)證系統(tǒng),這是管理會(huì)話 cookie 的地方。雖然 ASP.NET Core 框架已更新以支持新??值??和技術(shù)設(shè)置??(不發(fā)送??), 但微軟表示?他們不能直接在 ASP.NET Core 中引入用戶代理嗅探。所以這真的取決于你和你現(xiàn)有的項(xiàng)目。

8. 總結(jié)

Chrome 將很快(2020 年 2 月)更改其處理 cookie 的默認(rèn)行為。將來(lái),它將默認(rèn)??被明確設(shè)置為標(biāo)志 和??標(biāo)志設(shè)置,以允許將 cookie 添加到某些跨站點(diǎn)請(qǐng)求。如果你這樣做,常見(jiàn)版本的 Safari 就會(huì)對(duì)此感到厭煩。

為確保所有瀏覽器都滿意,您將所有受影響的 cookie 設(shè)置為??和?,然后添加一個(gè) cookie 策略(如上所示的代碼),該策略可以覆蓋這些設(shè)置并再次為無(wú)法對(duì)??正確解釋該值的瀏覽器刪除標(biāo)志.


使用IdentityServer出現(xiàn)過(guò)SameSite Cookie這個(gè)問(wèn)題嗎?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
崇义县| 内丘县| 星座| 绍兴县| 长丰县| 吉安市| 旌德县| 曲阳县| 高尔夫| 刚察县| 山东| 余庆县| 永吉县| 宁晋县| 霍城县| 云龙县| 隆安县| 玉门市| 东兰县| 诸暨市| 余庆县| 昌黎县| 平昌县| 曲阜市| 孝义市| 宜川县| 清丰县| 车致| 商河县| 棋牌| 包头市| 冕宁县| 乌拉特后旗| 固始县| 连南| 邹城市| 滨州市| 榆林市| 徐州市| 海丰县| 乌审旗|