如何允许在阻止第三方 cookie 的浏览器上对 web 应用程序进行身份验证?

Posted

技术标签:

【中文标题】如何允许在阻止第三方 cookie 的浏览器上对 web 应用程序进行身份验证?【英文标题】:How do I allow for authentication of a webapp on browsers that block third party cookies? 【发布时间】:2021-12-30 18:14:44 【问题描述】:

我正在创建一个 web 应用程序,并使用带有 cookie 的 Rails 会话来验证用户身份。在 Chrome 桌面浏览器上,它没有问题。但是,我最近将应用程序(一个 rails api 和一个单独的前端 react 应用程序)部署到 Heroku,我在桌面 Safari、移动 Safari 和移动 Chrome 上保持登录时遇到了问题。

我做了一些挖掘,我相信我的 cookie 设置得很好,但是在 Safari 中默认选中“防止跨站点跟踪”设置。取消选中此选项后,它适用于所有 Safari 版本。如果我希望我的平台上有真正的用户,这不是一个可行的解决方案,我将如何解决这个问题?是否可以通过更改我当前的 cookie 配置来修复,还是我必须做一些更激烈的事情,比如实现一些类似 JWT 的身份验证?我比较新,不精通身份验证方法,所以一些特定的方向会非常有帮助。如果需要,我可以发布代码 sn-ps,但我正在进行一个非常典型的 rails cookie 设置。谢谢。

【问题讨论】:

【参考方案1】:

我会说最好保留会话 cookie,并且要启用此功能,您需要确保您的 api 和前端来自同一个域 - 这些可以是同级域,例如www.example.com 和 api.example.com。

您可以使用 JWT,但它会解决一个问题并产生许多其他问题。例如。在浏览器中处理的 JWT 被认为不如会话 cookie 安全。

【讨论】:

【参考方案2】:

确实,您可以查看涉及持久令牌的解决方案(基于 JWT、oauth 流......)。无论您的客户端浏览器的“第三方 cookie”设置如何,这将始终有效。

但是,我建议您先看看您的 API 以及您的客户端如何与您的后端交互。在大多数基本的应用设置中,您可以使用永远不会被浏览器阻止的第一方 cookie。这是否希望您的应用程序依赖第三方 cookie?如果答案是肯定的(例如:因为您的 API 是从与您的应用程序完全不同的域提供的,那么,请转到第一个选项。否则,请尝试检查您是否无法从与应用程序相同的域提供 API , 如果您想继续使用 cookie。

【讨论】:

感谢您的回复,我一定会调查 JWT。一些简单的问题:我可以将 JWT 与 cookie 一起使用,还是会完全取代我当前的 cookie 设置?如果您有任何您非常喜欢的特定 JWT 指南/参考资料,您介意发送吗?

以上是关于如何允许在阻止第三方 cookie 的浏览器上对 web 应用程序进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

手机浏览器如何防止被检测到设备信息

手机怎么开启浏览器的cookie设置?

cookie是啥功能

如何在不刷新页面的情况下检测第三方 cookie 被阻止; [?]

IE浏览器的Cookies被禁用,如何设置允许使用

cookie是 啥意思