PHP-Open-Source-Saver / jwt-auth 无效和黑名单 JWT 令牌
PHP-Open-Source-Saver / jwt-auth Invalidate and Blacklist JWT Token
我在 Apache2 服务器上的 PHP8.0 环境中设置了一个 Laravel 8.* 项目。我安装了新的 PHP-Open-Source-Saver / jwt-auth
存储库并实现了必要的中间件来验证 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 令牌时,它仍然允许对用户进行身份验证。没有 JWT 黑名单例外。没有错误。唯一停止身份验证的是当 jwt 令牌过期时。
有人可以帮助深入了解如何 invalidate
和 blacklist
jwt 令牌吗?
好的,我找到了答案。默认情况下,包有 disabled the showing of a blacklist exceptions.
我只需要在我的 .env 中设置 JWT_SHOW_BLACKLIST_EXCEPTION=1
,现在就可以了。没有阅读软件包论坛问题是我的疏忽。
我在 Apache2 服务器上的 PHP8.0 环境中设置了一个 Laravel 8.* 项目。我安装了新的 PHP-Open-Source-Saver / jwt-auth
存储库并实现了必要的中间件来验证 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 令牌时,它仍然允许对用户进行身份验证。没有 JWT 黑名单例外。没有错误。唯一停止身份验证的是当 jwt 令牌过期时。
有人可以帮助深入了解如何 invalidate
和 blacklist
jwt 令牌吗?
好的,我找到了答案。默认情况下,包有 disabled the showing of a blacklist exceptions.
我只需要在我的 .env 中设置 JWT_SHOW_BLACKLIST_EXCEPTION=1
,现在就可以了。没有阅读软件包论坛问题是我的疏忽。