尝试连接到 Google API 的 Google Oauth 时 JWT 无效

2023-12-02

我试图通过 JWT 通过 OAuth 连接到 Google API,但我不断收到此错误:

{ "error": "invalid_grant", "error_description": "无效的 JWT:令牌必须是短期令牌且处于合理的时间范围内" }

在我的 JWT calim 中,我将 iat 设置为当前时间减去 1970-01-01(以秒为单位),并将 exp 设置为 iat + 3600,所以我不知道为什么我仍然收到此错误。如果有人知道答案请告诉meeeeeee!


不确定你是否让它工作,但以下简单的步骤对我使用 PHP 函数有用openssl_sign():

//helper function
function base64url_encode($data) { 
    return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); 
}

//Google's Documentation of Creating a JWT: https://developers.google.com/identity/protocols/OAuth2ServiceAccount#authorizingrequests

//{Base64url encoded JSON header}
$jwtHeader = base64url_encode(json_encode(array(
    "alg" => "RS256",
    "typ" => "JWT"
)));
//{Base64url encoded JSON claim set}
$now = time();
$jwtClaim = base64url_encode(json_encode(array(
    "iss" => "761326798069-r5mljlln1rd4lrbhg75efgigp36m78j5@developer.gserviceaccount.com",
    "scope" => "https://www.googleapis.com/auth/prediction",
    "aud" => "https://www.googleapis.com/oauth2/v4/token",
    "exp" => $now + 3600,
    "iat" => $now
)));
//The base string for the signature: {Base64url encoded JSON header}.{Base64url encoded JSON claim set}
openssl_sign(
    $jwtHeader.".".$jwtClaim,
    $jwtSig,
    $your_private_key_from_google_api_console,
    "sha256WithRSAEncryption"
);
$jwtSign = base64url_encode($jwtSig);

//{Base64url encoded JSON header}.{Base64url encoded JSON claim set}.{Base64url encoded signature}
$jwtAssertion = $jwtHeader.".".$jwtClaim.".".$jwtSig;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试连接到 Google API 的 Google Oauth 时 JWT 无效 的相关文章

随机推荐

  • 动态图片绑定vue

    我想做与这里相同的事情 但我想使用 images sample 作为参数 例如props images sample
  • Schema.org:使用什么,微数据还是 JSON-LD?

    数据标记Schema org对于 Google Yahoo Bing 和 Yandex 等搜索网站来说 片段非常适合 然而 我认为大多数网站管理员都使用微数据 但几乎从不使用JSON LD 最近了解了JSON LD 有一些疑惑 我可以在没有
  • SQL:如何按两列的唯一组合进行分组?

    Context A table message有列from user id and to user id 用户应该看到最近的对话以及显示的最后一条消息 一个对话由多条消息组成 这些消息具有相同的用户 ID 组合 用户发送消息 用户接收消息
  • Python 相当于 MATLAB 的“ismember”函数

    经过多次尝试优化代码后 最后一个资源似乎是尝试使用多个内核运行下面的代码 我不确切知道如何转换 重新构造我的代码 以便它可以使用多个内核运行得更快 如果我能获得实现最终目标的指导 我将不胜感激 最终目标是能够针对数组 A 和 B 尽可能快地
  • 在 JavaScript 中用正则表达式替换字符串

    一个特定的正则表达式现在困扰着我 我只是想更换范围 100像这样的字符串 var string commonstringblabla b range 100 b stringandsoon with commonstringblabla b
  • Git 预提交挂钩

    我是 git hooks 的新手 我无法理解下面的预提交挂钩 谁能告诉我这是如何工作的 这里我怀疑 grep 将如何在提交的文件中发生 因为我们不会将这些文件带到任何地方 抱歉 如果我问错了问题 但请帮助我理解 git hooks usr
  • 外部服务的 Kubernetes 入口规则

    这个问题类似于question但这更多的是围绕可以配置的规则中的路径 入口应该能够处理内部服务和外部服务 外部服务的 URL 应该类似于http 主机名 80 es 当用户点击此 url 时 应将其重定向到外部服务 服务定义和入口规则配置如
  • 在android中从sdcard中删除文件

    我正在制作一个应用程序 其中我必须删除 SD 卡中最近添加的 mp3 文件 歌曲保存的格式为 Songhello 17 26 amr where 17 26是添加歌曲的时间 谁能帮我如何删除SD卡中最近添加的文件 我的意思是说我想删除时间意
  • 如何在涉及链接的 Access 中连接多行?

    我的 Access 数据库存在以下问题 我有 3 个表 分别是 tblComponents tblErrors 和 linkComponentsErrors 这是一种多对多关系 这意味着一个组件可以有多个错误 而一个错误可以有多个组件 这些
  • 数字文字末尾的 F 和 D 是什么意思?

    我见过一些这样的符号 但我找不到任何奇怪的地方 double d 5D float f 3 0F 5后面的D和F到底是什么意思 意味着这些数字分别是双精度数和浮点数 假设你有 void foo int x void foo float x
  • 如何重新排列 PDF 文件的页面顺序?

    我最后正在生成目录 我想将目录移动到开头 假设我的 PDF 有 16 页 目录从第 13 页开始到第 15 页结束 我想将目录移至第二页 这样第一页仍为第 1 页 最后一页仍为第 16 页 这段代码没有给我我想要的 public void
  • 如何从 aframe 中的 3D 对象获取边界框信息?

    我正在开发一个 aframe 项目 该项目涉及将未知大小的 3D 对象加载到我的场景中 当然 在将对象放入场景之前 我希望将其大小调整到一定的大小 例如固定高度 但是如何从对象的边界框中提取宽度 高度和深度等信息呢 您需要在此处使用 A F
  • 我如何在原型工作中得到“this = this”

    好吧 偷看 所以我知道弄乱原型是不好的做法 但无论如何 Array prototype rev function this reverse 工作正常 更新源数组变量 ary 如预期 例如 ary 123 456 ary rev result
  • 在 ggplot2 中用梯度和变化的图例特征标记线条

    我正在使用以下数据查看 1954 年至 2000 年每月最高气温的变化 http pastebin com 37zUkaA4 为了清楚起见 我决定只在图表上绘制每个月的 abline 我的代码如下 OxTemp Month lt facto
  • 如何删除 sed 中第一个模式后面的空格

    我有一个文件 file txt Name 6 1 4 Float Time 453802 464204 466345 464481 466131 464283 465065 462561 Name 6 1 4 Logic Good Time
  • 在 Outlook 中触发外部 API 调用,回复来自特定电子邮件 ID 的电子邮件

    当我回复来自特定发件人的电子邮件时 我尝试触发外部 API 为了描述用例 我们有一个内部平台 人们可以在其中提出具体问题 专家会回答这些问题 类似于堆栈溢出 我们希望为专家回答问题启用 Outlook 功能 这将使专家能够回复电子邮件通知
  • 使用信号和 sigpipe

    我正在做一项作业 涉及编写一个程序来使用 fork 进程 信号和选择来处理数据 计算 pi 我现在正在处理信号 我想我想做的是使用 SIGPIPE 因此如果程序捕获它 它会尝试再次写入管道 如果进程尝试写入没有读取器的管道 将会发送 SIG
  • 指定用作参考时区的时区

    根据前两个答案 问题与最初发布的一样不清楚 因此我完全重写它 以下问题仅涉及如何存储数据以及存储什么数据 而与检索时转换数据的形状或形式无关 因此 在 SELECT 处转换为所需的时区并不是一个合适的答案 将值插入到带有时区的时间戳字段时
  • Android - 清除导航 Backstack

    我有4页 从第 1 页 gt 第 2 页 gt 第 3 页 gt 第 4 页 用户到达 page 3 并单击按钮后 就会导航到 page 4 单击按钮后 我想清除所有导航历史记录 以便当用户返回 page 4 时 应用程序退出而不是返回 p
  • 尝试连接到 Google API 的 Google Oauth 时 JWT 无效

    我试图通过 JWT 通过 OAuth 连接到 Google API 但我不断收到此错误 error invalid grant error description 无效的 JWT 令牌必须是短期令牌且处于合理的时间范围内 在我的 JWT c