gpt4 book ai didi

php - 如何使用公共(public) RSA key 验证 JSON Web token ?

转载 作者:可可西里 更新时间:2023-11-01 13:16:00 31 4
gpt4 key购买 nike

新问题使这个问题更加具体和切题。

我有一个来自 Azure 的 JWT,现在我需要在我的应用程序中验证签名。

Microsoft 的公钥可以在这里找到:

https://login.windows.net/common/discovery/keys

如何使用这些 key 来验证签名?我可以告诉这些是我需要的公钥,因为 JWT 中的 X5T header 与此公钥列表中的相匹配。

我正在使用 JWT PHP 库,但我作为公钥输入的所有内容似乎都失败了。

supplied key param cannot be coerced into a public key

所以使用上面的链接,从那里进入 PHPopenssl_verify 函数作为参数三(下例中的 $key)?

$success = openssl_verify($msg, $signature, $key, 'SHA256')

我输入的所有内容都会以某种方式导致错误。

谢谢,

最佳答案

问题已解决。

事实证明,JSON 数组的 X5C 部分是证书而不是公钥,因此 JSON 解码 https://login.windows.net/common/discovery/keys并获取 X5C 元素并使用 openssl 导出公钥:

$cert_object = openssl_x509_read($cert);

$pkey_object = openssl_pkey_get_public(cert_object);

$pkey_array = openssl_pkey_get_details($pkey_object);

$publicKey = $pkey_array ['key'];

在此示例中,$cert 是 X5C 值。然而,这本身是不够的,因为它没有编码为 X509。所以我所做的是在 Windows 中创建一个名为 certificate.cer 的新文件,在记事本中打开并将 X5C 值放在那里。然后双击 Windows 中的 .cer,导航到详细信息选项卡并单击“复制到文件”,这将打开证书导出向导。

导出为X509并上传到服务器。

$cert = file_get_contents('Certificates/Public/public.cer');

有效!可能有一种更简单的方法,但这很有效。

关于php - 如何使用公共(public) RSA key 验证 JSON Web token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32185238/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com