提问者:小点点

Laravel JWT作者


我正在 Laravel 作为 API 后端工作,并为令牌实施了 JWT 身份验证

在研究JWT工作流程后,我了解到:

1) JWT 令牌应具有最短到期日期(TTL:30 分钟)。

2)JWT刷新代币到期日不应大于1周。

我所理解的流程是:

1) 用户登录并收到 JWT 令牌。

2) 对于每个请求,它都应该向系统提供JWT令牌。

3)如果JWT令牌过期,系统检查JWT令牌并向其提供刷新令牌

我不明白的是:

1)如果刷新令牌过期,该怎么办?用户是否再次登录?

2) 移动设备是否应该替换过期的令牌以刷新令牌,并在每次向系统请求时提供当前保存的刷新令牌?

3) 如果未经授权的人拥有过期的令牌,他/她仍然可以访问该人的信息,因为系统始终为其提供刷新令牌并且循环继续。

4) 我必须在Laravel应用程序中存储刷新令牌吗?

我提取了中间件中VerifyJWTToken.phpJWT令牌检查

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个答案

匿名用户

1) 如果刷新令牌过期怎么办?用户是否再次登录=

4)我必须在Laravel应用程序中存储刷新令牌吗?=