PHP实现JWT lcobucci/jwt生成jwt token

2021-12-08 14:34:29 浏览数 (1)

github: github.com/lcobucci/jw…

1.安装
代码语言:javascript复制
PHP 5.5  (v3.2) and PHP 7.1 (v4.x)
OpenSSL Extension
"lcobucci/jwt": "^3.3"

composer require lcobucci/jwt
复制代码

2. 一些参数说明

代码语言:javascript复制
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
代码语言:javascript复制
namespace AppCommon;

use LcobucciJWTBuilder;
use LcobucciJWTParser;
use LcobucciJWTSignerHmacSha256;
use InvalidArgumentException;

class Jwt
{
    //私钥,没有私钥不会认证通过
    private $secret = "OOOO_WWW_EE_N__@server.zhang.com^1#096&24 20";
    //令牌的过期时间
    private $tokenTtl = 60 * 60 * 2;

    //验证token
    public function checkTokenJWT($token)
    {
        try{
            $signer = new Sha256();
            if (!$token) {
                return false;
            }
            $parser = new Parser();
            $parse = $parser->parse($token);
            ////先验证私钥
            if ($parse->verify($signer, $this->secret) === false) {
                return false;
            } else {
                return [
                    'user_id' => $parse->getClaim("user_id"),
                    'user_name' => $parse->getClaim('user_name')
                ];
            }
        }catch (InvalidArgumentException $e){
            return false;
        }
    }

    //生成token
    public function newTokenJWT($userId)
    {
        $builder = new Builder();
        $signer = new Sha256();
        //发布端url颁发者
        $builder->setIssuer("server.owenzhang.cn");
        //请求端URL访问群体
        $builder->setAudience("owenzhang-user-token");
        //唯一的jwt id作为头项复制
        $builder->setId("fu51server", true);
        //配置颁发令牌的时间
        $builder->setIssuedAt(time());
        //令牌可以使用的时间
        $builder->setNotBefore(time()   5);
        //令牌的过期时间
        $builder->setExpiration(time()   $this->tokenTtl);
        //配置一个名为“user_id”的新声明
        $builder->set("user_id", $userId);
        //使用“$this->secret”作为密钥创建签名
        $builder->sign($signer, $this->secret);
        //生成的令牌
        $token = $builder->getToken();
        $tokenStr = (string)$token;

        return $tokenStr;
    }

}
复制代码

0 人点赞