需要澄清 firebase 函数 (v2) 上的 httponly cookie 限制

问题描述 投票:0回答:1
  • 注意:我正在使用 firebase 函数“v2”(
    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
(不是准确的引用,但足够接近)

总结一下

  1. 有谁知道如果预检请求不允许

    Access-Control-Allow-Credentials: true
    ,Firebase 身份验证客户端如何在后台发送 __session cookie。它是否使用非 httponly(js 可访问)cookie 并从 fetch api 或类似的 ajax 手动发送“Cookie:”标头?

  2. 如果我想实现自定义身份验证(例如自定义 jwt 协议),我是否应该从 firebase 函数迁移出去。我应该直接考虑谷歌云功能(而不是通过 Firebase 生态系统)还是它们会有相同的限制。是时候迁移到 vps 服务器,还是使用 NextJS 和 vercel 了?

支持信息:

https://firebase.google.com/docs/auth/admin/manage-cookies

为什么 firebase auth 不支持 httponly cookie 持久性?

firebase firebase-authentication google-cloud-functions fetch-api session-cookies
1个回答
0
投票
嗨,首先我不是这个主题的专家,所以我只是分享我的观点,据我有限的知识是正确的。所以,如果这证明没有用,请宽容。

我也认为了解 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

您可以通过在网上提及该方法来搜索如何做到这一点,但如果事实证明这很困难,请联系我,以便我可以提供帮助。


祝你好运👍

© www.soinside.com 2019 - 2024. All rights reserved.