10

我正在 PHP 项目中制作自己的 google oauth 实现。一切正常,除非我尝试在访问令牌请求(https://accounts.google.com/o/oauth2/tokenJWT )之后验证收到。

对于 JWT 解码,我使用的是firebase/php-jwt类。

它完美解码,但如果我打开$verify选项(decode()方法 3-rd arg)我得到:Signature verification failed抛出异常。

我的猜测是,如果我将错误的密钥传递给该decode()方法。hash_hmac()稍后在签名生成完成时将其用于功能。

所以我的问题是:我应该将什么密钥传递给 Google OAuth JWT 上下文的签名验证?

4

1 回答 1

11

https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtoken推荐的方法:

“我们建议您从https://www.googleapis.com/oauth2/v1/certs检索 Google 的公钥并在本地执行验证。

由于 Google 很少更改其公钥(大约每天一次),因此您可以缓存它们,并且在绝大多数情况下,执行本地验证比使用 TokenInfo 端点更有效。这需要检索和解析证书,并进行适当的加密调用以检查签名。幸运的是,有多种语言的调试良好的库可以实现这一点。”

于 2013-07-15T01:20:40.287 回答