jwt解析token_jwt解析token

大家好,我是知秋君,一个会写博客吟诗的知秋码农。今天说一说jwt解析token_jwt解析token,希望能够帮助大家进步!!! 源码和示例 jwt的构成 jwt分成三个部分,前两部分是base64转码的字符串,第三部分是通过前两部分和一个密钥,进行加密生成的。 第一部分$header基本上是固定的,不用改它,就是个声明。 $playload是涉及到的参数,都是自定义的,转成base64

大家好,我是知秋君,一个会写博客吟诗的知秋码农。今天说一说jwt解析token_jwt解析token,希望能够帮助大家进步!!!

源码和示例

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" => "",

"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);

}

知秋君
上一篇 2024-07-03 15:31
下一篇 2024-07-03 15:31

相关推荐