1. 程式人生 > 實用技巧 >php Jwt 驗證

php Jwt 驗證

首先composer下載lcobucci/jwf擴充套件包:

composer require lcobucci/jwt

 現在完成後在vendor目錄下會生成以下檔案:

下載完成後直接複製這個類就行了,記得修改名稱空間!!!

<?php

namespace  app\utils;

use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Parser;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use Lcobucci\JWT\Signer\Key;
use Lcobucci\JWT\ValidationData;

class JwtAuth { /** * @var 單例限制 */ static private $instance=null; /** * @var 祕鑰資訊 * 編碼祕鑰 * 解碼祕鑰 */ private $token; private $decodetoken; /** * @var頭資訊 * 釋出者 * 接受者 * 識別碼 * 有效週期 */ private $iss = "Phor"; private $aud
= "App"; private $ident = "Esint"; private $effective_time = 60; /** * @var * 加密資訊 */ public $uid; //多個加密資訊 /** * @var 祕鑰 */ private $secret = "ljbpyshagcssjcsa"; /** * @return JwtAuth|單例限制 */ static public function getInstance() {
if (is_null(self::$instance)) { self::$instance = new self(); } return self::$instance; } /** * JwtAuth constructor. 私有化建構函式 單例 */ private function __construct() { } /** * 私有化克隆函式 */ private function __clone() { // TODO: Implement __clone() method. } /** * @param $uid * 初始化uid */ public function setUid($uid) { $this->uid = $uid; } /** * @return string * 呼叫token */ public function get_token() { $this->encode(); return (string)$this->token; } /** * @return 祕鑰資訊|\Lcobucci\JWT\Token * 編碼token */ public function encode() { $signer = new Sha256(); $time = time(); $this->token = (new Builder()) ->issuedBy($this->iss) //頒發者 ->permittedFor($this->aud) // 接受者 ->identifiedBy($this->ident, true) // 識別碼 ->issuedAt($time) // 頒發時間 (iat claim) ->canOnlyBeUsedAfter($time) //可用時間(nbf claim) ->expiresAt($time + $this->effective_time) //失效時間(exp claim) ->withClaim('uid', $this->uid) // 填充加密 "uid" // 填充加密 "uid" 多引數繼續操作此方法 ->getToken($signer, new Key($this->secret)); // 返回token 加密方式Sha256 祕鑰:secrect return $this->token; } /** * @param $token * 解碼token */ public function setToken($token) { $this->token = (new Parser())->parse((string) $token); $this->decode(); } /** * 解碼加密資訊 */ public function decode(){ $this->uid = $this->token->getClaim('uid');//多引數這裡也要新增多引數解碼token } /** * @return mixed * 檢驗token資訊 是否過期等 */ public function validate() { $data = new ValidationData(); $data->setIssuer($this->iss); $data->setAudience($this->aud); $data->setId($this->ident); $data->setCurrentTime(time()); return $this->token->validate($data); } /** * @return mixed * 驗證token加密方式 以及祕鑰 */ public function verify() { $signer = new Sha256(); return $this->token->verify($signer, new Key($this->secret)); } }

控制器呼叫方式(也可以放在公共方法裡面):

  public function testJwt(){
        $jwt = JwtAuth::getInstance();//呼叫單例方法
        $jwt->setUid('21345321');//需要加密的id
        $token = $jwt->get_token();//獲取token
        
        $jwt->setToken($token); //存入token
        
//        var_dump($jwt->validate());//檢驗token是否過期等 返回true/false
//        var_dump($jwt->verify());//檢驗加密以及祕鑰  返回true/false

        $jwt->setToken($token);//獲取token
        $uid=$jwt->uid;
        print_r($uid);die;
    }