mzh/hyperf-jwt

hyperf-jwt 优化版

v0.1.5 2020-06-27 00:05 UTC

This package is auto-updated.

Last update: 2024-09-14 11:32:07 UTC


README

基于Hyperf框架的jwt鉴权

Stable Version Build Status Total Downloads Monthly Downloads Php Version Swoole Version  License

思路来源于 (https://github.com/phper666/jwt-auth)组件

重构sso单点登录token失效逻辑

说明:

hyperf-jwt 支持单点登录、多点登录、支持注销token(token会失效)、支持使用refresh换取新token并失效旧token

单点登录:只有一个token生效,一旦刷新token,之前生成的token都会失效,通常以用户id来区分

多点登录:token没有限制

单点登录原理:token版本号,JWT单点登录必须使用aud(接收方)默认字段,aud字段的值默认为用户id。当生成token时,会更新白名单uid的key值为当前的版本号,但是如果是调用refreshToken刷新token或者调用logout注销token,默认前面生成的token都会失效。
如果开启单点登录模式,每次验证时都会查询当前uid的对应key是否与当前的版本号对应

多点登录原理:暂未实现

token不限制原理:token不限制,在token有效期内都可以使用

使用:

1、安装依赖
composer require mzh/hyperf-jwt
2、发布配置
php bin/hyperf.php jwt:publish --config
3、jwt配置

去配置config/autoload/jwt.php文件或者在配置文件.env里配置

# 务必改为你自己的字符串
JWT_SECRET=hyperf
#token过期时间,单位为秒
JWT_TTL=60

更多的配置请到config/autoload/jwt.php查看

4、模拟登录获取token
<?php

namespace App\Controller;
use \Mzh\JwtAuth\Jwt;
class IndexController extends Controller
{
    # 模拟登录,获取token
    public function login(Jwt $jwt)
    {
           #用法1 对象模式

            $jwtData = new JwtBuilder();
            $jwtData->setIssuer('api');
            #... 设置更多token属性

            #... 设置data数据
            $jwtData->setJwtData(['uid' => 123,'type' => 1111,'group' => 1]);

            #返回 JwtBuilder对象
            $tokenObj = $jwt->createToken($jwtData);

            #获取生成的token 
            $tokenObj->getToken();  

            #用法2 传入数组 
            #返回 JwtBuilder对象
            $tokenObj = $jwt->createToken(['uid' => $id,'type' => $type,'group' => $group]);

            #获取生成的token 
            $tokenObj->getToken();  


          #获取刷新token 传入数组  第一个参数为数据,第二个参数为类型,默认是access 可以定义为 refersh 或者其他类型自定义
            #返回 JwtBuilder对象  
            $tokenObj = $jwt->createToken(['uid' => $id,'type' => $type,'group' => $group],Jwt::SCOPE_REFRESH);

            #获取生成的token 
            $tokenObj->getToken();  
       
        return $tokenObj->getToken();
    }
}

注意:支持传入用户对象获取token,支持token类型

5、参考https://github.com/lphkxd/hyperf-admin使用例子
6、建议

目前jwt抛出的异常有两种类型Mzh\JwtAuth\Exception\TokenValidExceptionMzh\JwtAuth\Exception\JWTException,TokenValidException,异常为token验证失败的异常,会抛出401JWTException异常会抛出500,最好你们自己在项目异常重新返回错误信息