php jwt 解密token,JWT做token校验,php部分

源码和示例

jwt的构成

jwt分成三个部分,前两部分是base64转码的字符串,第三部分是通过前两部分和一个密钥,进行加密生成的。

第一部分$header基本上是固定的,不用改它,就是个声明。

$playload是涉及到的参数,都是自定义的,转成base64,基本上跟明文没什么区别。就是把自己想用的一些不是特别敏感的参数放上

$signature这部分才是重头戏,他是根据前两个+自己定义的secret加密成的token。之所以要用前两个参数参与加密,就是防止

前两个参数被私自篡改。如果被改之后,第三个参数由于加密规则不符,所以可以失败

生成JWT

下面是生成方法,最关键的是密钥部分

public function GetJwt()

{

$header = base64_encode(json_encode(array(

'typ' => 'JWT',

'alg' => 'HS256'

)));

$playload = base64_encode(json_encode(array(

"sub" => "1234567890",

"name" => "夏天",

"admin" => true

)));

$returnVal = $header.'.'.$playload;

$signature =hash_hmac('sha256', $returnVal, 'secret');

$returnVal.= '.'.$signature;

return $returnVal;

}

JWT验证

这部分只是示例的做了一下,意思大概就是,我按照第二部分$playload的参数,重新生成一次JWT,然后再跟接收到的这个JWT进行比对,看是否一致

public function CkJwt($opt)

{

$hashed_expected = $this-> GetJwt();

$result = $this -> hash_compare($opt, $hashed_expected);

return $result;

}

public function hash_compare($a, $b) {

$newJwt = $_SERVER['HTTP_HTTP_ACCESS_TOKEN'];

$originJwt = $this->CkJwt();

$return = $newJwt === $originJwt;

$this->ajaxReturn($return);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值