【发布时间】:2016-02-19 19:12:21
【问题描述】:
有一些库用于在 PHP 中实现 JSON Web Tokens (JWT),例如 php-jwt。我正在编写自己的非常小且简单的课程,但无法弄清楚为什么我的签名无法通过验证here,即使我已经尝试遵守标准。我已经尝试了几个小时,但我被卡住了。请帮忙!
我的代码很简单
//build the headers
$headers = ['alg'=>'HS256','typ'=>'JWT'];
$headers_encoded = base64url_encode(json_encode($headers));
//build the payload
$payload = ['sub'=>'1234567890','name'=>'John Doe', 'admin'=>true];
$payload_encoded = base64url_encode(json_encode($payload));
//build the signature
$key = 'secret';
$signature = hash_hmac('SHA256',"$headers_encoded.$payload_encoded",$key);
//build and return the token
$token = "$headers_encoded.$payload_encoded.$signature";
echo $token;
base64url_encode 函数:
function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
我的标头和有效负载与 validation site's 默认 JWT 完全匹配,但我的签名不匹配,因此我的令牌被标记为无效。这个标准看起来很简单,所以我的签名有什么问题?
【问题讨论】:
-
哇。我们遇到了同样的问题。我们构建代币的方法是相同的。和我们的
base64url_encode()完全一样。你是来自未来的我吗? -
哈哈。谢谢你们的笑声。也许无助的头脑也有相似的想法。
标签: php json authentication jwt sha