【发布时间】:2020-03-18 04:58:42
【问题描述】:
我在 Laravel 作为 API 后端工作,并为令牌实现了 JWT Auth
研究了JWT工作流程后,我的理解是:
1) JWT 令牌的到期日应最短(TTL:30 分钟)。
2) JWT 刷新令牌的有效期不应超过 1 周。
我理解的流程是:
1) 用户登录并收到 JWT 令牌。
2) 对于每个请求,它都应该向系统提供 JWT 令牌。
3) 如果 JWT 令牌过期,系统会检查 JWT 令牌并为其提供刷新令牌
我不明白的是:
1) 如果刷新令牌过期了怎么办?用户是否再次登录?
2) 手机每次向系统请求时,是否应该将过期的令牌替换为刷新令牌并提供当前保存的刷新令牌?
3) 如果未经授权的人拥有过期的令牌,他/她仍然可以访问该人的信息,因为系统总是为其提供刷新令牌并且循环继续。
4) 我必须在 Laravel 应用中存储刷新令牌吗?
我在 VerifyJWTToken.php 中间件中提取了 JWT 令牌检查
class VerifyJWTToken extends BaseMiddleware
{
public function handle($request, Closure $next)
{
try {
if (!$user = JWTAuth::parseToken()->authenticate()) {
return response()->json([
'status' => 'false',
'data' => null,
'message' => 'User not found'
]);
}
} catch (TokenExpiredException $e) {
try {
$refreshed = JWTAuth::refresh(JWTAuth::getToken());
$user = JWTAuth::setToken($refreshed)->toUser();
$request->merge(['refreshed_token'=> $refreshed])
} catch (JWTException $e) {
return response()->json([
'status' => 'false',
'data' => null,
'message' => 'Token Invalid'
]);
}
} catch (JWTException $e) {
return response()->json([
'status' => 'false',
'data' => null,
'message' => 'Token Not Provided'
]);
}
auth()->login($user);
return $next($request);
}
}
【问题讨论】:
标签: php laravel jwt laravel-5.7 jwt-auth