topphp/topphp-jwt

单点登录jwt工具

v1.0.3 2020-07-06 09:44 UTC

This package is auto-updated.

Last update: 2024-04-06 18:39:03 UTC


README

Latest Version on Packagist Software License Total Downloads

这是一个JWT工具,Json Web Token 跨语言支持的无状态web数据传输标准。常应用于登录验证。

包含方法

  • JwtHelper::handler();// 返回原始JWT对象句柄
  • JwtHelper::generateToken($id,$data,$expTime,$fromUrl,$toUrl);// 生成Token(支持设置过期时间与设置-1永久不过期以及校验签发者URL与接受者URL)
  • JwtHelper::generateRefreshToken($id,$data,$fromUrl,$toUrl);// 生成带有refreshToken的Token集合
  • JwtHelper::verifyToken($token,$isAll,$allowUrl);// 验证Token,支持返回原始全部JWT数据与校验签发者URL
  • JwtHelper::refreshToken($refreshToken,$data);// 根据refreshToken刷新Token,支持更新data中的数据
  • JwtHelper::refreshAllToken($refreshToken,$data);// 根据refreshToken刷新Token,返回值包含新的refreshToken,支持更新data中的数据

组件结构

config/     
src/     
tests/
vendor/

安装

    composer require topphp/topphp-jwt

用法

    #命名空间引用(建议直接使用助手类):
        use Topphp\TopphpJwt\JWT2;
        use Topphp\TopphpJwt\JwtHelper;
    #调用方式有两种:
        #1、通过原始JWT单例调用
            JWT2::getInstance()->setJti(10001)->setData(["test"=>"中文"])->createToken();
        #2、通过助手类直接调用
            JwtHelper::handler()->setJti(10001)->setData(["test"=>"中文"])->createToken();
        #3、助手类直接提供优化过的完善的快捷方法【推荐】
            JwtHelper::generateToken(10001, ["test"=>"中文"], time() + 7200);
            
    #注意事项:
       # 1、默认建议使用HMAC方式进行签名加密,如果对于数据加密需求比较高,提供RSA方式签名加密,只需要修改配置use_rsa为true
       # 2、使用RSA签名,配置文件topphpJwt中公私钥地址如果为空,默认获取根目录下 pem 中的公钥地址,可结合topphp-rsa组件创建公私钥
       # 3、默认的助手类已经提供了大部分常用场景所需的方法,更多用法可以参看单元测试文件和对应的官方文档
        
    #使用示例一:
        // 当前签发的JWT的唯一标识(例如:用户uid)
        $id  = 1;
        // 当前签发的JWT附带的额外数据(例如:用户信息)
        $data = [
            "uid"      => 1,
            "username" => "张三"
        ];
        // 当前JWT有效期,时间戳格式
        $expTime = time() + 7200;
        
        // 生成token
      /** @param int $id jwt唯一标识(如用户UID)
        * @param array $data 【可选】附加数据(如用户信息)
        * @param string $expTime 【可选】设置过期时间(时间戳)不传默认 1 小时,传 -1 为永不过期
        * @param string $fromUrl 【可选】签发者URL
        * @param string $toUrl 【可选】接收者URL
        */
        $token   = JwtHelper::generateToken($id, $data, $expTime);
        // token = eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6IjEifQ.eyJpc3MiOiJodHRwOlwvXC9kb21haW4xLmNvbSIsImp0aSI6IjEiLCJpYXQiOjE1ODMyNDAzMTMsIm5iZiI6MTU4MzI0MDMxMywiZXhwIjoxNTgzMjQ3NTEzLCJkYXRhIjoie1widWlkXCI6MSxcInVzZXJuYW1lXCI6XCJcdTVmMjBcdTRlMDlcIn0ifQ.TO-4staZCPwUi7qJp9Z7iDoj7LDmVME8Z-AHrPAag2M
        
        // 验证token
      /**
        * @param string $token
        * @param bool $isAll 【可选】是否验证成功返回全部数据
        * @param string $allowUrl 【可选】准许的签发者url
        */
        $res = JwtHelper::verifyToken((string)$token);
        // 验证通过会返回如下数据,不通过返回false
        /**
        array(4) {
          ["id"]=>
          string(1) "1"
          ["create_time"]=>
          string(19) "2020-03-03 21:05:05"
          ["expire_time"]=>
          string(19) "2020-03-03 22:05:05"
          ["data"]=>
          array(2) {
            ["uid"]=>
            int(1)
            ["username"]=>
            string(6) "张三"
          }
        }
        */
    // 使用示例二:
        $uid  = 1;
        $data = [
            "uid"      => 1,
            "username" => "张三"
        ];
        // $expTime = -1;// generateToken 方法允许设置永久不过期
        $expTime = time() + 7200;// generateToken 方法允许设置指定的过期时间
        // 生成token
        $token   = JwtHelper::generateToken($uid, $data, $expTime, "http://domain1.com");
        // 验证token
        $res     = JwtHelper::verifyToken((string)$token, false, "http://domain2.com");
        // 签发JWT时声明签发者自己的url(domain1),对方接收到JWT后按照约定的(domain2)验证,发现不符合匹配要求,返回false
        

修改日志

有关最近更改的内容的详细信息,请参阅更改日志(CHANGELOG)。

测试

    ./vendor/bin/phpunit tests/JwtTest.php

贡献

详情请参阅贡献(CONTRIBUTING)和行为准则(CODE_OF_CONDUCT)。

安全

如果您发现任何与安全相关的问题,请发送电子邮件至sleep@kaitoocn.com,而不要使用问题跟踪器。

信用

许可证

The MIT License (MIT). Please see License File for more information.