如何验证最终用户经过身份验证的令牌(使用 Firebase 身份验证)来调用 google cloud run 端点?

2024-05-10

请帮助使用 firebase 身份验证在云运行中进行最终用户身份验证。

简短的介绍: 我从 firebase 函数提交 Authorization: Bearer + idToken 标头,并使用电子邮件/密码 firebase 用户进行身份验证的 idTokenuser1。 我将其提交到云运行实例,并为此设置了 Cloud Run Invoker 角色user1。 但在云运行日志中我看到以下错误:

该请求未被授权调用此服务。阅读更多内容https://cloud.google.com/run/docs/securing/authenticating https://cloud.google.com/run/docs/securing/authenticating

我究竟做错了什么?如何从经过身份验证的用户调用的 firebase 函数调用云运行端点调用?


更多细节:

我有一个简单的 firebase 应用程序,带有电子邮件/密码 firebase 身份验证。 什么时候user1, say [电子邮件受保护] /cdn-cgi/l/email-protection使用电子邮件/密码进行身份验证,我使用 firebase.User.getIdToken() 获取该用户的 Id 令牌并将其提交给 firebase 函数。

在 firebase 函数端,我提取用户令牌并将其作为 Authorization: Bearer + token header 提交到 google cloud run 端点:

export const getData = functions.https.onRequest(
  async (req, response) => {
    cors(req, response, async () => {
      getToken(req)
        .then(async (token: any) => {
              const options = {
                url: cloud_run.CLOUD_RUN_ENDPOINT,
                headers: {
                  Authorization: `Bearer ${token}`,
                },
              };
           request.get(options, async function (err, resp) {
             //Processing the result
           });
    //etc
    

在谷歌云运行上,我部署了云运行端点。 在云运行权限选项卡中,我已为我的云运行调用者角色设置user1 [电子邮件受保护] /cdn-cgi/l/email-protection.

但是当我执行上述 firebase 函数 getData 时,我在云运行日志中看到以下错误:

2020-10-29 14:30:13.498 MSK GET 401 0 B 0 ms@root+request/1.6.1 node/v10.22.0 linux/4.4.0 Linux/x64 https:// 该请求未被授权调用此服务。阅读更多内容https://cloud.google.com/run/docs/securing/authenticating https://cloud.google.com/run/docs/securing/authenticating

根据本手册:https://cloud.google.com/run/docs/authentication/end-users https://cloud.google.com/run/docs/authenticating/end-users为了 Firebase 身份验证:https://cloud.google.com/run/docs/authenticating/end-users#cicp-firebase-auth https://cloud.google.com/run/docs/authenticating/end-users#cicp-firebase-auth

我需要实施 Identity Platform 或 Firebase 身份验证(已完成)并手动验证其凭据。 如何手动验证凭据?提交不记名授权令牌后我应该做什么?


为了实现这一目标,您有 2 个解决方案:

  • 请自行检查未经身份验证的 Cloud Run 服务中的令牌。最近有一个很棒的Google Cloud 对此发布了帖子 https://cloud.google.com/run/docs/tutorials/identity-platform。就我个人而言,我不喜欢这个解决方案,因为如果发生攻击,则由您的服务来管理如此高的流量,并且您需要付费!
  • 使用代理。 (旧的)Cloud Endpoint 可以实现这一点,而我写了一篇关于这个的文章 https://medium.com/google-cloud/secure-cloud-run-cloud-functions-and-app-engine-with-api-key-73c57bededd11 年前(使用 API 密钥安全定义,但将其更改为Firebase 身份验证安全定义 https://cloud.google.com/endpoints/docs/openapi/authenticating-users-firebase并使用它!)。它已经很老了,因为今年夏天发布了一项新服务,名为API网关 https://cloud.google.com/api-gateway今天,这是一个完全由 Google 管理的 Cloud Endpoint(现在的功能是相同的,但 API Gateway 将会发展;不确定 Cloud Endpoint!)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何验证最终用户经过身份验证的令牌(使用 Firebase 身份验证)来调用 google cloud run 端点? 的相关文章

随机推荐

  • F# 对于 OO 或命令式来说缺少什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 基本 C++ 文本对齐

    我正在尝试编写一个程序 该程序从文件中获取输入行并使其恰好为 80 个字符 假设输入行始终小于 80 然后打印该行 这是通过在以下标点符号后添加最多两个空格来完成的 如果一行少于 41 个字符 则不加修改地打印 如果该行仍然不是 80 个字
  • 将本机 swift Set 转换为数组[重复]

    这个问题在这里已经有答案了 我需要将 Set 转换为 AnyObject 或 String 的数组 这可能吗 我知道使用 NSSet 我可以使用 allObjects 但对于本机集似乎没有任何函数 只需直接强制转换为数组即可 let arr
  • History.pushState和页面刷新

    我开始研究 HTML5 新历史 API 不过 我有一个问题 如何处理页面刷新 例如 用户单击一个链接 该链接由 js 函数处理 该函数 异步加载页面内容 使用history pushState 更改URL 用户刷新页面 但是服务器上当然不存
  • 如何自定义 ckeditor 4.2 内置插件(如链接)?

    如果我想向链接插件添加选项卡 最佳实践方法是什么 我不想更改发布代码 只需用带有我的自定义的版本覆盖它即可 因此 很容易更新新版本 CKEDITOR 4 2 有这方面的操作方法吗 我正在使用新的内联样式工具栏 如果我获得源代码 我可以在没有
  • Windows、Emacs、Git Bash 和 shell 命令

    Windows 7 Emacs 24 3 1 git 1 8 1 msysgit 1 我的等效 emacs 文件中有以下内容 if equal system type windows nt progn setq explicit shell
  • Tesseract 是否会忽略扫描文档中的任何非文本区域?

    我正在使用 Tesseract 但我不知道它是否忽略任何非文本区域并仅针对文本 我是否必须删除任何非文本区域作为预处理步骤以获得更好的输出 Tesseract 有一个非常好的算法来检测文本 但它最终会给出误报匹配 理想情况下 您应该在将图像
  • 使用javascript向url添加哈希而不滚动页面?

    在不滚动页面的情况下向 url 添加哈希 使用 JavaScript 我打开页面 我向下滚动 我单击添加哈希的链接 可能带有值 test 示例 http www example com test http www example com t
  • 如何在 Material UI 的 webpack 构建中包含 Roboto 字体?

    For a 进步网络应用程序基于材质用户界面 http www material ui com 反应 并构建Webpack 我如何正确包含 Roboto 字体 以便该应用程序不依赖于 Google 服务器并且字体也可以工作offline T
  • 如何让 BottomNavigationBar 粘在键盘颤动的顶部

    我正在尝试制作一个简单的聊天应用程序 所以我创建了一个脚手架和我的身体 将是消息和我的bottomNavigationBar将是我的打字字段和发送图标 我添加了一个文本字段 但键入时导航栏被键盘隐藏 这是我的代码BottomNavigati
  • 对打开文件的脚本进行单元测试

    我编写了一个脚本 它打开一个文件 读取内容并进行一些操作和计算 并将它们存储在集合和字典中 我该如何为这样的事情编写单元测试 我的问题具体是 我会测试文件是否打开 文件很大 这是unix字典文件 我如何对计算进行单元测试 我真的必须手动计算
  • 如何使用材料用户界面和样式组件定位按钮基础

    使用ToggleButton and ToggleButtonGroup组件来自material ui从材料 ui 开始盖茨比模板 https github com mui org material ui tree master examp
  • 如何在“python setup.py test”中运行 py.test 和 linter

    我有一个项目setup py文件 我用pytest作为测试框架 我还在我的代码上运行各种 linter pep8 pylint pydocstyle pyflakes ETC 我用tox在多个 Python 版本中运行它们 并使用以下命令构
  • Woocommerce 预订中每人和每件商品的动态结账自定义字段

    对于预订网站 我正在尝试创建一个功能 可以根据人数添加与会者列表 感谢 LoicTheAztec 我已经获得了单次预订的代码 那部分工作正常 我还需要相同的功能来进行多次预订 我怎样才能实现这个目标 这是代码 Add a new check
  • 如何对Oracle进行SQL注入

    我正在对一个系统进行审计 开发人员坚称该系统可以防止 SQL 注入 他们通过去掉登录表单中的单引号来实现这一点 但后面的代码没有参数化 它仍然使用字面 SQL 如下所示 username username Replace var sql s
  • 无法将较大的 blob 上传到 Azure:azure.core.exceptions.ServiceRequestError:操作未完成(写入)(_ssl.c:2317)

    我正在尝试使用 Python SDK 将一些较大的 blob gt 50MB 上传到我的 Azure 存储容器 connect str os environ AZURE STORAGE CONNECTION STRING blob serv
  • 返回一个需要由智能指针保存的“指针”

    我有一个项目 我想更多地使用智能指针 总的来说 我在这个目标上取得了成功 然而 我遇到了一些我不确定 最佳实践 是什么的事情 基本上我想从函数返回一个 指针 但是require用户将其放在智能指针中 不仅如此 我不想强 制使用特定的智能指针
  • 使用 Jquery 更改 css 属性时的事件检测

    有没有办法检测元素的 显示 css 属性是否更改 是否更改为无 块或内联块 如果没有的话有什么插件吗 谢谢 Note 突变事件 https developer mozilla org en US docs Web Guide Events
  • 将 Django 表单中的所有 CharField 表单字段输入转换为小写

    我使用 Django 表单进行用户注册 用户可以在其中输入优惠券代码 我希望在优惠券代码字段中输入的所有字符都转换为小写 我尝试过在保存方法 自定义清理方法和自定义验证器中使用 lower 但这些方法没有运气 下面是我的代码 class S
  • 如何验证最终用户经过身份验证的令牌(使用 Firebase 身份验证)来调用 google cloud run 端点?

    请帮助使用 firebase 身份验证在云运行中进行最终用户身份验证 简短的介绍 我从 firebase 函数提交 Authorization Bearer idToken 标头 并使用电子邮件 密码 firebase 用户进行身份验证的