我不明白 JWT 刷新令牌的行为 (LARAVEL)

dar*_*mnx 5 php jwt laravel

我刚刚用 LARAVEL 和这个https://github.com/tymondesigns/jwt-auth尝试过 JWT 身份验证

但有一点我无法理解。在他们的配置中,他们放置了:

'ttl' => env('JWT_TTL', 60), // in munutes
'refresh_ttl' => env('JWT_REFRESH_TTL', 20160), // in minutes
Run Code Online (Sandbox Code Playgroud)

我所理解的是:令牌的有效期为 1 小时,可以在 2 周内刷新

但是 3 小时后,如果我尝试查询某些内容,它会显示“令牌已过期”。

这个系统是否意味着,用户必须在每小时内更新/刷新他的令牌,但限制为 2 周?我不明白。

用户如何在这种系统上持续登录?第一个小时后刷新令牌如何有用,虽然还不到 2 周,但我无法获得新令牌?

谢谢

更新:代码

配置/jwt.php

'ttl' => 2, // 2 minutes
'refresh_ttl' => 5, // 5 minutes
Run Code Online (Sandbox Code Playgroud)

路线/api.php

Route::post('/login', 'AuthController@login');
Route::get('/test', 'AuthController@test')->middleware('jwt.auth', 'jwt.refresh');
Run Code Online (Sandbox Code Playgroud)

Http/控制器/AuthController

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;

class AuthController extends Controller
{
    public function test()
    {
        return response()->json(['coucou' => 1]);
    }

    public function login(Request $request)
    {
        // grab credentials from the request
        $credentials = $request->only('email', 'password');

        try {
            // attempt to verify the credentials and create a token for the user
            if (! $token = JWTAuth::attempt($credentials)) {
                return response()->json(['error' => 'invalid_credentials'], 401);
            }
        } catch (JWTException $e) {
            // something went wrong whilst attempting to encode the token
            return response()->json(['error' => 'could_not_create_token'], 500);
        }

        // all good so return the token
        return response()->json(compact('token'));
    }
}
Run Code Online (Sandbox Code Playgroud)

这是流程:

请求/登录与{用户名:XXX,密码:XXX} 响应/登录> {令牌:XXXXXXX}

请求/测试直后(10秒)与承载XXXXXX 响应/测试>在HEADER与新令牌良好JSON响应

请求/测试3分钟(这样3mins 10秒有过去现在,小于的刷新限制在5分钟)后 响应/测试>令牌过期

我不明白。

jps*_*jps 4

访问令牌过期后,您可以使用刷新令牌获取新的访问令牌,而无需要求用户再次输入用户名和密码。只有刷新令牌过期后,用户才需要重新登录。

但 3 小时后,如果我尝试查询某些内容,它会显示“令牌已过期”。

那是因为访问令牌已过期。

该系统是否意味着用户必须在每小时内更新/刷新其令牌,但限制为两周?我不明白。

是的。您将刷新令牌保留在客户端系统中,并在访问令牌过期时使用它来请求新的访问令牌。