php – 我将关键对象的哪一部分传入`openssl_verify`来验证Googl
我正在尝试使用Google和OpenID Connect实现联合登录系统,而且我无法验证并解析我从Google收到的JWT ID令牌.我在这里关注
Google’s documentation.
根据文档的建议,我正在尝试使用现有的JWT库. GitHub上最流行的PHP版本似乎是PHP_JWT.问题似乎是JWK密钥的格式. 上面链接的谷歌文档说,从他们的发现文档中显示的jwks_uri端点获取密钥.该端点返回以下内容: { "keys": [ { "kty": "RSA","alg": "RS256","use": "sig","kid": "1771931eb0eb64eb97733e857685be153e079bb9","n": "AMNFQMNJw/EVwrYsyPTnEHWkaPinPb4ngc/SqD701aisFhbU9/wWoKADeFtwfBcWl1qjzIqhPorQElB+2mtiqUh3Qtaazt1x5wA9XnJDe6kjtMGm9nNLMilSVNBilAE8GIdbciMycISfOfL0WRaJrqpNxewNEVZjuYiGzOWahiDP","e": "AQAB" },{ "kty": "RSA","kid": "7b3bc600209875d3c42ae277a0d018d1d21986ec","n": "AN2UvG5+hNEMIPIbnpPm+JQi6LFWXBPzg3Ltb3xkVmSTjVaCFWppw/ZYRBgpToGKZP9XJstlOE88SDUFSMZIkIqtLpnUqmZax2Zc2gjEB9PhmHSH3/tTmtZ1U0X6V+crqitZ2uc3NV78vCn9/s+WuPwk/gfKBG8Cirb0fgLmsPd9","e": "AQAB" } ] } 查看the source的JWT类的解码和验证方法,似乎$keys参数可以是一个数组,但是他们希望数组键是孩子,数组值是:@param string | resource $key for HS *,字符串键有效.对于RS *,必须是openssl公钥的资源.它很简单,可以取出kid属性并将它们用作数组键,但应该用什么作为数组值? 从谷歌的JWKs文档来看,我们看起来正在使用RS *,但我不知道关键对象的哪一部分是openssl公钥的资源.我已经尝试使用整个stdClass对象和n字符串,但都在 所以,显然,我传递的是错误的钥匙,但正确的钥匙是什么? Google’s library为此似乎使用different endpoint获取密钥.该端点似乎返回了一系列证书.我需要使用类似的东西吗?如果是这样,为什么文档会告诉你使用jwks_uri端点?
两个端点包含相同的信息,但格式不同.
jwks_uri端点为您提供RSA公钥的模数和指数值.您可以使用这两个值来生成从https://www.googleapis.com/oauth2/v1/certs获得的PEM文件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |