const functions = require('firebase-functions/v2')
)因此,根据我将在最后列出的几个来源,似乎 firebase 函数会自动删除除
__session
, 之外发送的所有 httponly cookie
似乎无法控制预检 OPTIONS 请求以启用 httopnly cookie (
Access-Control-Allow-Credentials: true
),因为似乎所有 OPTIONS 请求(即预检请求)都由 firebase 功能引擎本身严格控制,并且无法在函数定义functions.https.onRequest
,因为它们仅在处理预检后才收到 POST/GET/PUT/DELETE 请求。
令我困惑的是,firebase 的官方身份验证库是如何在后台发送
__session
cookie 的?如果我有 firebase 函数手动将 __session
cookie 设置为 httponly,我无法在下一个请求中将其发回,因为如果我使用带有“credentials:”include”` 的 fetch
api,它总是会触发
Request blocked by CORS policy, resposne to preflight request sent Access-Control-Allow-Credentials: '' but Access-Control-Allow-Credentials: 'true' is required for this request
(不是准确的引用,但足够接近)
总结一下
有谁知道如果预检请求不允许
Access-Control-Allow-Credentials: true
,Firebase 身份验证客户端如何在后台发送 __session cookie。它是否使用非 httponly(js 可访问)cookie 并从 fetch api 或类似的 ajax 手动发送“Cookie:”标头?
如果我想实现自定义身份验证(例如自定义 jwt 协议),我是否应该从 firebase 函数迁移出去。我应该直接考虑谷歌云功能(而不是通过 Firebase 生态系统)还是它们会有相同的限制。是时候迁移到 vps 服务器,还是使用 NextJS 和 vercel 了?
支持信息:
我也认为了解 Firebase 中的安全身份验证是一个很好的问题。但与特定服务相关的任何问题都应询问其相关支持部门,这可能就是限制的原因。看看这个:
根据我在互联网上找到的信息,这就是 firebase 处理
__session
cookie 的方式:
Firebase 的
__session
cookie 不受与其他 cookie 相同的 CORS 限制。
Firebase Auth SDK 在内部处理
__session
cookie。 SDK 不依赖于浏览器的正常 cookie 发送机制。
Firebase Auth SDK 读取
__session
cookie 值(如果存在)并将其作为请求中的自定义标头发送。这绕过了 cookie 上的正常 CORS 限制。
在服务器端(在 Firebase 函数中),Firebase 运行时拦截请求并查找此自定义标头。如果找到,它会在将请求传递给函数代码之前重建
__session
cookie。
此过程对于客户端和服务器端代码都是透明的。在大多数情况下,您不需要显式处理此 cookie。
尽管没有作为普通 cookie 发送,但
__session
cookie 仍然受到跨站点脚本 (XSS) 攻击的保护,因为它是由 Firebase SDK 内部处理的。
此方法允许 Firebase 在解决 CORS 限制的同时保持安全性,否则这些限制会阻止 cookie 在跨源请求中发送。
下一步自定义身份验证实施,我认为您有以下选项:
您可以尝试使用
Firebase Custom Authentication
来创建自定义令牌。
您可以使用
Google Cloud Functions
,它允许您为CORS设置自定义标头,包括Access-Control-Allow-Credentials。但需要更多的手动配置。
最后你可以尝试一下
VPS or NextJS/Vercel
。
您可以通过在网上提及该方法来搜索如何做到这一点,但如果事实证明这很困难,请联系我,以便我可以提供帮助。
祝你好运👍