PHP-Open-Source-Saver / jwt-auth 无效和黑名单 JWT 令牌
Posted
技术标签:
【中文标题】PHP-Open-Source-Saver / jwt-auth 无效和黑名单 JWT 令牌【英文标题】:PHP-Open-Source-Saver / jwt-auth Invalidate and Blacklist JWT Token 【发布时间】:2022-01-17 05:11:26 【问题描述】:我在 Apache2 服务器上的 php8.0 环境中设置了 Laravel 8.* 项目。我安装了新的PHP-Open-Source-Saver / jwt-auth
repo 并实现了必要的中间件来验证 jwt 令牌以及 JwtController 以在登录时生成 jwt 令牌并在需要时刷新。
Api 请求通过以下方式进行身份验证:
$user = JWTAuth::parseToken()->authenticate();
到目前为止,除了 jwt 令牌的 invalidation
和 blacklisting
之外,一切都按照包装盒侧面的说明进行。
我的 jwt 配置黑名单键在 env 中设置为:
JWT_BLACKLIST_ENABLED=true
JWT_BLACKLIST_GRACE_PERIOD=0
我尝试了说明和以下所有方法,每种方法至少两次:
public function jwt_logout(Request $request)
//get bearer token
$token = $request->bearerToken();
if (! isset($token) )
return response()->json([
'success' => false,
'message' => 'Token is not set, please retry action or login.'
]);
//Invalidate and blacklist methods
try
//JWTAuth::invalidate(JWTAuth::getToken());
//JWTAuth::invalidate($request->bearerToken());
//auth("api")->invalidate(true);
//JWTAuth::invalidate($request->token);
//JWTAuth::parseToken()->invalidate();
//\Illuminate\Support\Facades\Auth::setToken($token)->invalidate(true);
JWTAuth::setToken($token)->invalidate(true);
//auth("api")->logout(true);
//JWTAuth::invalidate(true);
//\JWTAuth::manager()->invalidate(new \PHPOpenSourceSaver\JWTAuth\Token($token), $forceForever = true);
return response()->json([
'success' => true,
'message' => 'User has been logged out'
]);
catch (JWTException $exception)
return response()->json([
'success' => false,
'message' => 'Sorry, user cannot be logged out'
], Response::HTTP_INTERNAL_SERVER_ERROR);
但是每次我尝试使用在运行上述方法后被列入黑名单的 jwt 令牌时,它仍然允许对用户进行身份验证。没有 JWTBLACKLILTED 异常。没有错误。唯一停止身份验证的是 jwt 令牌过期时。
有人可以帮助深入了解如何使用 invalidate
和 blacklist
一个 jwt 令牌吗?
【问题讨论】:
【参考方案1】:好的,我找到了答案。默认情况下,包有disabled the showing of a blacklist exceptions。
我只需要在我的 .env 中设置 JWT_SHOW_BLACKLIST_EXCEPTION=1
,现在它就可以工作了。没有阅读软件包论坛问题是我的疏忽。
【讨论】:
以上是关于PHP-Open-Source-Saver / jwt-auth 无效和黑名单 JWT 令牌的主要内容,如果未能解决你的问题,请参考以下文章
求数组中 (i,j) 对的总数,使得 i<j 且 a[i]+a[j]=i+j。 [关闭]
matlab中if、else语句运算结果为啥只显示最后一个if的值?