我正在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);
}
}
1)如果刷新令牌已过期怎么办?用户是否再次登录?=>是,如果此令牌已过期,则应重定向到登录页面。
4)我必须将刷新令牌存储在Laravel应用中吗?=>不需要,但您需要将此令牌保存在客户端应用程序(Localstogare,Cookie等...)