Laravel JWT Auth

问题描述 投票:1回答:1

我正在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
1个回答
-1
投票

1)如果刷新令牌已过期怎么办?用户是否再次登录?=>是,如果此令牌已过期,则应重定向到登录页面。

4)我必须将刷新令牌存储在Laravel应用中吗?=>不需要,但您需要将此令牌保存在客户端应用程序(Localstogare,Cookie等...)

© www.soinside.com 2019 - 2024. All rights reserved.