从 Google Chat POST 请求验证 JWT

2024-05-02

我有一个 NodeJS 机器人使用 HTTPs 端点连接到 Google Chat。我正在使用快递来接收请求。我需要验证所有请求是否都来自 Google,并且希望使用 Google 随请求发送的不记名令牌来执行此操作。

我的问题是我正在努力寻找验证令牌的方法。

我已经捕获了令牌并尝试了 GET 请求https://oauth2.googleapis.com/tokeninfo?id_token=ey https://oauth2.googleapis.com/tokeninfo?id_token=ey...(其中 ey... 是令牌开始)。

返回:

    "error": "invalid_token",
    "error_description": "Invalid Value"
}

我已经尝试过谷歌推荐的方法:

var token = req.headers.authorization.split(/[ ]+/);
client.verifyIdToken({
    idToken: token[1],
    audience: JSON.parse(process.env.valid_client_ids)
}).then((ticket) => {
    gchatHandler.handleGChat(req.body, res);
}).catch(console.error);

并得到以下错误:

错误:找不到信封的 pem:{"alg":"RS256","kid":"d...1","typ":"JWT"}

知道我应该从这里前往哪里吗?

Edit: https://www.googleapis.com/service_accounts/v1/metadata/x509/[电子邮件受保护] https://www.googleapis.com/service_accounts/v1/metadata/x509/chat@system.gserviceaccount.com发现了这个,正在研究如何使用它。这孩子和我得到的很匹配。


最终解决了。

你需要点击:https://www.googleapis.com/service_accounts/v1/metadata/x509/[电子邮件受保护] https://www.googleapis.com/service_accounts/v1/metadata/x509/chat@system.gserviceaccount.com获取包含链接到其 KID 的密钥的 JSON 文件。

然后,当请求到达时,使用 jsonwebtoken (NPM) 解码令牌并从标头中提取 KID。

使用 KID 在上述网站的响应中查找匹配的公钥,然后使用验证函数确保令牌与公钥匹配。

您还需要传递受众和发行者选项进行验证,以验证是否是您的特定服务帐户正在访问机器人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Google Chat POST 请求验证 JWT 的相关文章

随机推荐

  • 无法启动客户端 Rust 语言服务器

    我正在尝试弄清楚如何使用 WSL 中的 rustc 和 Cargo 我使用 VS Code 和 Rust rls 插件 可以编译我的代码 但 RLS 存在问题 无法启动客户端 Rust 语言服务器 Rustup 不可用 安装自https w
  • 为什么 Github 操作日志显示星号?

    在 Github 操作运行器上运行时 Maven 日志输出仅显示 3 个星号 而不是实际的字符串 警告 home runner work project src test java de persistence dao DaoTest ja
  • C 中的字符计数

    我正在尝试编写一个程序来计算字符串中的所有字符 我本来有它 但后来意识到我无法计算空格 我不明白为什么这不起作用 for m 0 z m 0 m if z m charcount 任何帮助表示赞赏 编辑 如果像这样扫描输入 字符串 会有什么
  • Jenkins email-ext 会针对未按预期工作的罪魁祸首触发电子邮件

    当构建失败时 我试图向罪魁祸首发送电子邮件 如果我手动启动构建 则会发送电子邮件 但如果我通过 SCM 轮询启动构建 则不会发送电子邮件 并且构建的控制台输出会显示以下消息 An attempt to send an e mail to e
  • 如何使用 NPOI 获取包含日期的单元格的值并保留原始格式

    我有一个使用 DevExpress 编辑的 Excel 文件 并且正在使用 NPOI 阅读 当我尝试以字符串形式获取日期单元格的值时 它不会保留原始值 例如 在 DevExpress 网格中我设置了这个值 2016 08 12 我想在字符串
  • 使用 Seaborn FacetGrid 绘制相关热图

    我正在尝试创建一个带有热图的图像 分别表示每个标签的数据点特征的相关性 使用seaborn 我可以为单个类创建热图 如下所示 grouped df groupby target sns heatmap grouped get group C
  • 使用 MVC 通配符证书在 Azure 上托管许多 SSL 站点

    以下应用程序当前在我尝试迁移到 Azure 的 Windows 2008 R2 服务器上运行 Part 1 首先 我有以下 ASP NET MVC 站点 它根据 DNS 名称的第一部分路由客户 https customer1 myAzure
  • 将数字的最后 n 位转换为零

    在Python中 将数字的最后一位数字替换为零并保持前三位数字不变的最佳方法是什么 例子 23456789 gt 23400000 112022 gt 112000 1111 gt 1110 111 gt 111 no conversion
  • Python Asyncio run_forever() 和任务

    我改编了这段代码 以便在异步 Python 中使用 Google Cloud PubSub https github com cloudfind google pubsub asyncio https github com cloudfin
  • 是否可以将 Black 作为 API 调用?

    说我想用black https black readthedocs io en stable index html作为 API 并执行以下操作 import black black format some python code 通过调用格
  • 在2.0中实现SFTP

    我想在 NET 2 0 中编写SFTP 客户端和服务器 那可能吗 请给我一些建议 看一眼SharpSSH http www tamirgal com blog page SharpSSH aspx 它具有开源 BSD 风格许可证 并支持 S
  • C - 如何正确使用 OpenSSL 的 BIO_write()

    我是 OpenSSL 新手 我知道 BIO write BIO b const void buf int len 需要在循环中调用 但我不完全确定我是否正确使用它 我写了一个这样的函数 int32 t SendPacket BIO cons
  • 如何以编程方式在 Google 文档中创建文档?

    The Google 文档列表 API 的文档 http code google com apis documents overview html 好像说可以创建本地文档并上传 有没有办法实际创建和编辑文档on通过 API 的 Google
  • `uwsgi_modifier1 30` 指令没有按照记录从 PATH_INFO 中删除 SCRIPT_NAME

    这是我的 nginx 虚拟主机配置 debian cat etc nginx sites enabled mybox server listen 8080 root www index index html index htm server
  • 如何集成 sympy 表达式和 Latex 格式

    您好 提前感谢您的帮助 我正在尝试将数学格式与 sympy 表达式混合在一起 我正在使用 jupyter 笔记本 我可以在单独的行上获得乳胶和漂亮的 sympy 打印 但似乎无法找到一种方法将它们组合成一行 下面的代码打印三行 第三行应该是
  • 当id包含点时,如何使用jquery通过ID选择html节点?

    如果我的 html 看起来像这样 td class controlCell td
  • Log4j 显示包名称

    现在对于我的 ConversionPattern 我有 log4j appender A1 layout ConversionPattern d yyyy MMM dd HH mm ss SSS 5p t F L m n 我想做的还包括包含
  • 如何防止Excel单元格更新?

    我有一个相当大的范围 10 000 行 10 列 我每天都会逐行填充它 我还有一个较小的范围 366 行 5 列 其中 对于每个单元格 我运行一个宏 该宏的作用与 DSUM 或 SUMIF 的作用几乎相同 但具有多个条件 问题是 在实现了这
  • 最大值和最小值的算法? (目标-C)

    这是我正在阅读的一本学习 Objective C 的书的一部分 下面定义了一个名为 MAX 的宏 它给出了两个的最大值 价值观 define MAX a b a gt b a b 然后书中有一些练习要求读者定义一个宏 MIN 找到两个值中的
  • 从 Google Chat POST 请求验证 JWT

    我有一个 NodeJS 机器人使用 HTTPs 端点连接到 Google Chat 我正在使用快递来接收请求 我需要验证所有请求是否都来自 Google 并且希望使用 Google 随请求发送的不记名令牌来执行此操作 我的问题是我正在努力寻