gpt4 book ai didi

php - 如何使用 RSA256 在 PHP 中创建有效的 JWT

转载 作者:行者123 更新时间:2023-12-05 03:42:20 26 4
gpt4 key购买 nike

我一直遇到与此类似的困难 question .我需要在 php 中创建一个 JWT。我有以下代码:

define('RSA_PRIVATE', 'MIICXAIB......EWxOf9o=');

$payload = json_encode([
'sub' => 'username',
'email' => 'john@example.com',
'given_name' => 'John',
'family_name' => 'Example',
'iat' => time(),
'nonce' => '12345'
]);


$header = json_encode([
'typ' => 'JWT',
'alg' => 'RS256'
]);

$base64UrlHeader = base64UrlEncode($header);
$base64UrlPayload = base64UrlEncode($payload);
$signature = hash_hmac('sha256', "$base64UrlHeader.$base64UrlPayload", RSA_PRIVATE, true);

$base64UrlSignature = base64UrlEncode($signature);
$jwt = "$base64UrlHeader.$base64UrlPayload.$base64UrlSignature";

echo($jwt);


function base64UrlEncode($text)
{
return str_replace(
['+', '/', '='],
['-', '_', ''],
base64_encode($text)
);
}

每当我尝试向需要我的 JWT 的第三方进行验证时,它会返回一条消息告诉我

签名验证失败:rsa 签名不匹配

当我尝试使用 JWT debugger 进行验证时, 它也说它是无效的。

我是不是漏掉了什么?与上一个问题一样,我只见过人们使用小 secret 而不使用 RSA 私钥的示例。

最佳答案

根据@Michal Trojanowski 的回答,我继续使用 openssl_sign。但是,当我将 key 作为代码中的变量时,这不起作用。相反,按照 php manual 上的示例我设法使用以下调整使其工作:

$private_key = openssl_pkey_get_private("file:///path.to/jwtRS256.key");

openssl_sign(
"$base64UrlHeader.$base64UrlPayload",
$signature,
$private_key,
"sha256WithRSAEncryption"
);

openssl_free_key($private_key);

$base64UrlSignature = zd_base64UrlEncode($signature);
$jwt = "$base64UrlHeader.$base64UrlPayload.$base64UrlSignature";

关于php - 如何使用 RSA256 在 PHP 中创建有效的 JWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67325893/

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