我有一个 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(使用前将#替换为@)