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

?>

一个好用的图片裁剪,水印类 intervention/image,支持gd库和image和imagick

安装 composer require intervention/image 使用文档:http://image.intervention.io/getting_started/introduction 类库 <?php /* * 图片处理 */ name...

阅读全文

php正则获取字符串中的图像src地址

<?php $str = <<<str <img src="1.jpg"/> <p>123123</p> <span>3322</span> <img ...

阅读全文

php predis 操作类库扩展

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

阅读全文

1 条评论

欢迎留言