github: https://github.com/lcobucci/jwt/tree/3.2

1.安装


PHP 5.5+ (v3.2) and PHP 7.1 (v4.x)
OpenSSL Extension

composer require lcobucci/jwt

2. 一些参数说明

iss 【issuer】发布者的url地址

sub 【subject】该JWT所面向的用户,用于处理特定应用,不是常用的字段

aud 【audience】接受者的url地址

exp 【expiration】 该jwt销毁的时间;unix时间戳

nbf 【not before】 该jwt的使用时间不能早于该时间;unix时间戳

iat 【issued at】 该jwt的发布时间;unix 时间戳

jti 【JWT ID】 该jwt的唯一ID编号

3.使用

生成token

<?php

require './vendor/autoload.php';

use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Signer\Hmac\Sha256;

//发布端url
$iss = 'http://www.koukousky.com';
//请求端URL
$aud = 'http://www.koukousky.com/user/login';
//唯一的jwt id
$jwt_id = '123123sad';
//私钥,用于token验证
$signer_key = 'testing';
$signer = new Sha256();

$token = (new Builder())->setIssuer($iss) // Configures the issuer (iss claim)
                        ->setAudience($aud) // Configures the audience (aud claim)
                        ->setId($jwt_id, true) // Configures the id (jti claim), replicating as a header item
                        ->setIssuedAt(time()) // Configures the time that the token was issued (iat claim)
                        ->setNotBefore(time() + 60) // Configures the time that the token can be used (nbf claim)
                        ->setExpiration(time() + 3600) // Configures the expiration time of the token (exp claim)
                        ->set('username', 'lili') // Configures a new claim, called "uid"
                        ->set('age', '20')
                        ->sign($signer, $signer_key) // creates a signature using "testing" as key
                        ->getToken(); // Retrieves the generated token
echo $token;

// $token->getHeaders(); // Retrieves the token header
// $token->getClaims(); // Retrieves the token claims

// echo $token->getHeader('jti'); // will print "4f1g23a12aa"
// echo '<br />';
// echo $token->getClaim('iss'); // will print "http://example.com"
// echo '<br />';
// echo $token->getClaim('username'); 
// echo '<br />';
// echo $token->getClaim('age'); 
// echo '<br />';
// echo $token;
// var_dump($token);

// var_dump($token->verify($signer, 'testing 1')); // false, because the key is different
// var_dump($token->verify($signer, 'testing')); // true, because the key is the same

?>

验证token

<?php
require './vendor/autoload.php';

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

$token = $_GET['token'] ?? '';

$token = (new Parser())->parse((string) $token); // Parses from a string
// $token->getHeaders(); // Retrieves the token header
// $token->getClaims(); // Retrieves the token claims
$signer = new Sha256();

$aud = $token->getClaim('aud'); // 
$iss = $token->getClaim('iss'); // http://www.koukousky.com
$jwt_id = $token->getHeader('jti');
$username = $token->getClaim('username');
$age = $token->getClaim('age');

$signer_key = 'testing';//私钥,没有私钥不会认证通过

$data = new ValidationData(); // It will use the current time to validate (iat, nbf and exp)

$data->setIssuer($iss);
$data->setAudience($aud);
$data->setId($jwt_id);

//先验证私钥
var_dump($token->verify($signer, $signer_key));
//失败,因为token在60秒后方可验证
var_dump($token->validate($data)); 
//修改验证时间
$data->setCurrentTime(time() + 60); 
// true
var_dump($token->validate($data)); 

$data->setCurrentTime(time() + 4000); 
//false,token过期
var_dump($token->validate($data)); 

?>

php predis 操作类库扩展

需先安装php predis 类库 详细predis 命令参考 :http://www.koukousky.com/back/1644.html <?php /** * Predis缓存驱动 * 要求安装phpredis扩展:https...

阅读全文

php imagick 水印、缩略图 图像处理类

使用前需安装 ImageMagick 客户端和 php Imagick 扩展类库 可解决上传图片在ios 下翻转的问题。 使用方法 $imagick = new \lib_image_imagick(); $width = 2...

阅读全文

适用于php7+的加密解密类

<?php /* * 加密解密类 */ namespace app\common\lib\encrypt; use Defuse\Crypto\Key; use Defuse\Crypto\Crypto; #使用之前需先安装 defuse/php-e...

阅读全文

欢迎留言