首页 > 编程语言 >PHP实现JWT lcobucci/jwt生成jwt token

PHP实现JWT lcobucci/jwt生成jwt token

时间:2023-04-03 20:31:55浏览次数:41  
标签:return jwt builder JWT token user



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

1.安装

PHP 5.5+ (v3.2) and PHP 7.1 (v4.x)
OpenSSL Extension
"lcobucci/jwt": "^3.3"

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

namespace App\Common;

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

class Jwt{
    //私钥,没有私钥不会认证通过
    private $secret = "[email protected]^1#096&24%2020";
    //令牌的过期时间
    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;
    }

}


标签:return,jwt,builder,JWT,token,user
From: https://blog.51cto.com/owenzhang24/6167374

相关文章

  • k8s work节点重新获取token
    在master节点重新生成token命令,然后在node子节点中执行kubuadmjoin命令kubeadmtokencreate--print-join-command如果网忘了证书的秘钥,可以在master节点执行以下命令opensslx509-pubkey-in/etc/kubernetes/pki/ca.crt|opensslrsa-pubin-outformder2>/dev/null......
  • 配置用户登录token的过期时间
    自定义配置token过期时间:JWT_AUTH={'JWT_RESPONSE_PAYLOAD_HANDLER':'app02.utils.my_jwt_response_payload_handler',#自定配置token过期时间#days:float=...,#seconds:float=...,#microseconds:float=...,#milliseconds:flo......
  • 用户名、手机号、邮箱、多方式登录自动签发token
    1.如果不加字段序列化,则默认的检验无法通过  2.第一种方式:使用手机号登录  3.第二种方法:使用邮箱校验  4.第三种方法:使用常规用户名登录  5.views中的代码思路共4步  6.urls中要指定请求与视图中的关系  7.settings中的配置,以及上面的APP注......
  • 两种方式自定制基于JWT的认证类BaseAuthentication和BaseJSONWebTokenAuthentication
    1.基于BaseAuthentication的自定义方法  2.views中调用自定义方法MyJwtAuthentication验证  3.基于BaseAuthentication的自定义方法测试:token过期  4.基于BaseAuthentication的自定义方法测试:token数据有错误,需检查token正确性  5.基于BaseAuthenticati......
  • JWT控制返回数据格式
    1.只使用JWT的局部校验,不加权限控制的不会限制用户登录  2.JWT的局部校验配合权限控制提供用户登录访问限制  2_1.JWT的局部校验配合权限控制提供用户登录访问限制  3.重写jwt_response_payload_handler方法,创建utils文件,自定义返回格式  4.重写jwt_respo......
  • 使用JWT自定制认证类
    1.创建auth写MyToken类  2.view中接口导入引用MyToken  3.测试自定义认证类_失败测试  4.测试自定义认证类_成功测试  5.打印用户信息  6.自定义Mytoken类_2  7.可以单独打印某项用户信息  8.可以单独打印某项用户信息_获取名称  ......
  • JWT的简单使用
    1.JWT原理  2.JWT校验流程  3.DRF项目的JWT认证开发流程(重点)4.配置用户头像存储  5.创建超级用户  6.修改该配置可以将默认项目的英文提示改成中文  7.JWT的简单使用_url  8.JWT的简单使用_测试生成token9.JWT的添加认证类全局配置,局部配置......
  • 利用 rpc 获取 boss __zp_stoken__
    1什么是RPCRPC,英文RangPaCong,中文让爬虫,旨在为爬虫开路,秒杀一切,让爬虫畅通无阻!开个玩笑,实际上RPC为远程过程调用,全称RemoteProcedureCall,是一种技术思想而非一种......
  • 百度普通收录API提交token推送在线版+随机URL生成+抓取内页URL工具
    普通收录:百度站长平台官方给出的使用说明如下1、普通收录工具可以向百度搜索主动推送资源,缩短爬虫发现网站链接的时间,不保证收录和展现效果。2、API提交和手动提交共享配额......
  • SpringBoot 项目使用 Sa-Token 完成登录认证
    一、设计思路对于一些登录之后才能访问的接口(例如:查询我的账号资料),我们通常的做法是增加一层接口校验:如果校验通过,则:正常返回数据。如果校验未通过,则:抛出异常,告知其需......