JWT在PHP中的简单使用示例

官网 https://jwt.io/
3.0版本 https://github.com/lcobucci/jwt

安装

composer require lcobucci/jwt

依赖

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

示例

获取token
<?php

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

include "../vendor/autoload.php";

$builder = new Builder();
$signer  = new Sha256();

$secret = "51talk@)!*";

//设置header和payload,以下的字段都可以自定义
$builder->setIssuer("51talk.com") //发布者
        ->setAudience("51talk.com") //接收者
        ->setId("abc", true) //对当前token设置的标识
        ->setIssuedAt(time()) //token创建时间
        ->setExpiration(time() + 60) //过期时间
        ->setNotBefore(time() + 5) //当前时间在这个时间前,token不能使用
        ->set('uid', 30061); //自定义数据

//设置签名
$builder->sign($signer, $secret);
//获取加密后的token,转为字符串
$token = (string)$builder->getToken();
var_dump($token);
验证token
<?php

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

include "../vendor/autoload.php";

$signer  = new Sha256();

$secret = "51talk@)!*";

//获取token
$token = isset($_SERVER['HTTP_AUTHORIZATION']) ? $_SERVER['HTTP_AUTHORIZATION'] : '';

if (!$token) {
    invalidToken('Invalid token');
}

try {
    //解析token
    $parse = (new Parser())->parse($token);
    //验证token合法性
    if (!$parse->verify($signer, $secret)) {
        invalidToken('Invalid token');
    }

    //验证是否已经过期
    if ($parse->isExpired()) {
        invalidToken('Already expired');
    }

    //获取数据
    var_dump($parse->getClaims());

} catch (Exception $e) {
    //var_dump($e->getMessage());
    invalidToken('Invalid token');
}

function invalidToken($msg) {
    header('HTTP/1.1 403 forbidden');
    exit($msg);
}

转载于:https://my.oschina.net/u/1391699/blog/1822497

PHP JWT 接口安全示例: 1. 首先需要安装 JWT 扩展包,如果使用 composer 可以在命令行输入 "composer require firebase/php-jwt" 来安装。 2. 生成 JWT 令牌: ``` <?php require_once "vendor/autoload.php"; use \Firebase\JWT\JWT; $secret_key = "YOUR_SECRET_KEY"; $issuer_claim = "THE_ISSUER"; $audience_claim = "THE_AUDIENCE"; $issuedat_claim = time(); // issued at $notbefore_claim = $issuedat_claim + 10; //not before in seconds $expire_claim = $issuedat_claim + 60; // expire time in seconds $token = array( "iss" => $issuer_claim, "aud" => $audience_claim, "iat" => $issuedat_claim, "nbf" => $notbefore_claim, "exp" => $expire_claim, "data" => array( "user_id" => "1", "user_name" => "John Doe", ) ); $jwt = JWT::encode($token, $secret_key); echo $jwt; ``` 3. 验证 JWT 令牌: ``` <?php require_once "vendor/autoload.php"; use \Firebase\JWT\JWT; $secret_key = "YOUR_SECRET_KEY"; $jwt = "YOUR_JWT_TOKEN"; try { $decoded = JWT::decode($jwt, $secret_key, array('HS256')); print_r($decoded); } catch (\Firebase\JWT\ExpiredException $e) { echo json_encode(array( "status" => $e->getStatusCode(), "message" => $e->getMessage() )); } catch (\Firebase\JWT\SignatureInvalidException $e) { echo json_encode(array( "status" => $e->getStatusCode(), "message" => $e->getMessage() )); } catch (\Firebase\JWT\BeforeValidException $e) { echo json_encode(array( "status" => $e->getStatusCode(), "message" => $e->getMessage() )); } catch (\Firebase\JWT\InvalidArgumentException $e) { echo json_encode(array( "status" => $e->getStatusCode(), "message" => $e->getMessage() )); } catch (\Exception $e) { echo json_encode(array( "status" => $e->getStatusCode(), "message" => $e->getMessage()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值