能直接在hyperf框架中使用jwt的组件. 用之前,请详细的看下下面的文档~
1、只支持php >= 7.4版本,如果php jwt-auth 支持多应用单点登录、多应用多点登录、多应用支持注销 token(token会失效)、支持多应用刷新 token
多应用单点登录:在该应用配置下只会有一个 token 生效,一旦刷新 token ,前面生成的 token 都会失效,一般以用户 id 来做区分
多应用多点登录:在该配置应用下token 不做限制,一旦刷新 token ,则当前配置应用的 token 会失效
注意:使用多应用单点登录或者多应用多点登录时,必须要开启黑名单,并且使用
Hyperf的缓存(建议使用redis缓存)。如果不开启黑名单,无法使 token 失效,生成的 token 会在有效时间内都可以使用(未更换证书或者 secret )。
多应用单点登录原理:
JWT有七个默认字段供选择。单点登录主要用到 jti 默认字段,jti字段的值默认为缓存到redis中的key(该key的生成为场景值+存储的用户id(sso_key)),这个key的值会存一个签发时间,token检测会根据这个时间来跟token原有的签发时间对比,如果token原有时间小于等于redis存的时间,则认为无效
多应用多点登录原理:多点登录跟单点登录差不多,唯一不同的是jti的值不是场景值+用户id(
sso_key),而是一个唯一字符串,每次调用refreshToken来刷新token或者调用logout注销 token 会默认把请求头中的 token 加入到黑名单,而不会影响到别的 token
token 不做限制原理:token 不做限制,在 token 有效的时间内都能使用,你只要把配置文件中的
blacklist_enabled设置为false即可,即为关闭黑名单功能
使用
Hyperf 2.x版本,则
composer require phper666/jwt-auth:~4.0.0
php bin/hyperf.php vendor:publish phper666/jwt-auth
去配置 config/autoload/jwt.php 文件或者在配置文件 .env 里配置
…
更多的配置请到 config/autoload/jwt.php 查看
在 config/autoload/middlewaress.php 配置文件中加入 jwt 验证中间件,所有的路由都会进行 token 的验证,例如:
[
Phper666\JWTAuth\Middleware\JWTAuthDefaultSceneMiddleware:class
],
];
在 config/routes.php 文件中,想要验证的路由加入 jwt 验证中间件即可,例如:
[Phper666\JWTAuth\Middleware\JWTAuthDefaultSceneMiddleware::class]]);
请看官方文档:https://doc.hyperf.io/#/zh/middleware/middleware
在你想要验证的地方加入 jwt 验证中间 件即可。
…
注意:暂时不支持传入用户对象获取 token,后期会支持
[Phper666\JWTAuth\Middleware\JWTAuthDefaultSceneMiddleware::class]]);
在需要鉴权的接口,请求该接口时在 HTTP 头部加入
Authorization Bearer token
{
"code": 0,
"msg": "获取token成功",
"data": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NjQ3MzgyNTgsIm5iZiI6MTU2NDczODI1OCwiZXhwIjoxNTY0NzM4MzE4LCJ1aWQiOjEsInVzZXJuYW1lIjoieHgifQ.CJL1rOqRmrKjFpYalY6Wu7JBH6vkbysfvOf-TMQgonQ"
}
}
{
"code": 0,
"msg": "success",
"data": {
"a": 1
}
}
…
提供了一个 getParserData 来获取解析后的 token 数据。
例如:JWTUtil::getParserData($this->request)
具体你可以查看Phper666\JWTAuth\Middleware\JWTAuthSceneDefaultMiddleware和Phper666\JWTAuth\Middleware\JWTAuthSceneApplication1Middleware这两个中间件,根据这两个中间件你可以编写自己的中间件来支持每个场景生成的token不能互相访问各个应用
目前
jwt抛出的异常目前有两种类型Phper666\JWTAuth\Exception\TokenValidException、Phper666\JWTAuth\Exception\JWTException,TokenValidException
异常为TokenValidException验证失败的异常,会抛出401,JWTException异常会抛出400,
最好你们自己在项目异常重新返回错误信息
No open issues yet, or sync has not completed.