主要用到内置函数
hash_hmac() base64_decode() json_decode()
用base64_decode 改做成base64url_encode 就可以了
function base64url_encode($data) {
$remainder=strlen($data) %4;
if($remainder){
$addlen=4-$remainder;
$data.=str_repeat('=', $addlen);
}
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
先取jwt最后的sign部分留着待会验证
$index= strrpos($token, '.');
$message= substr($token,0, $index);
$signature1=substr($token,$index+1);
$key="字符串密钥xxx";
然后生成sign看看是否相同,默认是sha256算法
$signature =hash_hmac('sha256', $message,($key),true );
$signature = base64url_encode($signature);
判断($signature1==$signature) 就可完成校验
解码信息则是取jwt 两个点.中间部分直接 json_decode(base64_decode($str)) 就可以了
参考
本文介绍了如何在PHP后端使用内置函数如hash_hmac,base64url_encode和json_decode来处理JWT令牌的签名验证和解码过程,包括生成签名、校验以及解码JWT中的认证信息。





