Google OAuth JWT签名验证

时间:2013-07-13 22:15:39

标签: php validation google-oauth jwt

我正在PHP项目中创建自己的google oauth实现。除非我在访问令牌请求(https://accounts.google.com/o/oauth2/token)之后尝试验证JWT,否则一切正常。

对于JWT解码我正在使用firebase/php-jwt类。

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

我的猜测是,如果我将错误的密钥传递给decode()方法。当签名生成完成后,它稍后用于hash_hmac()函数。

所以我的问题是:我应该准确地将哪些密钥传递给Google OAuth JWT上下文进行签名验证?

1 个答案:

答案 0 :(得分:9)

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

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

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