Laravel Tymon\JWT 身份验证:在身份验证之前检查未完成的有效令牌?
Laravel Tymon\JWT Auth: Check for Outstanding Valid Token Before Authentication?
我正在尝试使用 Tymon 的 JWTAuth 在 Laravel 5.5 中实施 token-based 身份验证。我按照图书馆的 GitHub Documentation 并使用以下身份验证流程。这是我的登录路由的身份验证部分:
try {
// attempt to verify the credentials and create a token for the user
if (!$token = JWTAuth::attempt($credentials)) {
return response()->json(['success' => false, 'error' => 'Invalid Credentials. Please make sure you entered the right information and you have verified your email address.'], 401);
}
}
catch (JWTException $e) {
// something went wrong whilst attempting to encode the token
return response()->json(['success' => false, 'error' => 'could_not_create_token'], 500);
}
// all good so return the token
return response()->json(['success' => true, 'data'=> [ 'token' => $token ]]);
这是路线:
Route::group([
'middleware' => ['jwt.auth', 'jwt.refresh'],
],
function () {
// Routes requiring authentication
Route::get('/logout', 'Auth\LoginController@logout');
Route::get('/protected', function() {
return 'This is a protected page. You must be logged in to see it.';
});
});
所以你可以看到我正在使用 jwt.auth 和 jwt.refresh 中间件。现在,一切似乎都按预期工作,我可以使用令牌对用户进行身份验证。每个令牌都有一次使用的生命周期,每次请求后我都会获得另一个有效令牌(刷新流程)。
但是,我的问题是,如果我有一个尚未使用的用户的有效令牌,然后我将其从 header 中删除并使用有效凭据点击 /login 路由,我我发行了 另一个 有效令牌。所以现在我有两个可用于对用户进行身份验证的有效令牌,因为我的 /login 路由不会使以前颁发的令牌无效。
有谁知道检查用户是否有未完成的有效令牌的方法,以便在用户从其他地方登录时使令牌失效?
我会在做一些研究后回答我自己的问题。据我了解,除非明确列入黑名单,否则 JWT 令牌是有效的。只要服务器认识到它自己创建了令牌,那么它就可以使用密钥解密令牌并假定它是有效的。这就是令牌生命周期如此重要的原因。因此,如果您想使已发行的令牌失效,您要么必须等待到期,要么将其列入黑名单。
我正在尝试使用 Tymon 的 JWTAuth 在 Laravel 5.5 中实施 token-based 身份验证。我按照图书馆的 GitHub Documentation 并使用以下身份验证流程。这是我的登录路由的身份验证部分:
try {
// attempt to verify the credentials and create a token for the user
if (!$token = JWTAuth::attempt($credentials)) {
return response()->json(['success' => false, 'error' => 'Invalid Credentials. Please make sure you entered the right information and you have verified your email address.'], 401);
}
}
catch (JWTException $e) {
// something went wrong whilst attempting to encode the token
return response()->json(['success' => false, 'error' => 'could_not_create_token'], 500);
}
// all good so return the token
return response()->json(['success' => true, 'data'=> [ 'token' => $token ]]);
这是路线:
Route::group([
'middleware' => ['jwt.auth', 'jwt.refresh'],
],
function () {
// Routes requiring authentication
Route::get('/logout', 'Auth\LoginController@logout');
Route::get('/protected', function() {
return 'This is a protected page. You must be logged in to see it.';
});
});
所以你可以看到我正在使用 jwt.auth 和 jwt.refresh 中间件。现在,一切似乎都按预期工作,我可以使用令牌对用户进行身份验证。每个令牌都有一次使用的生命周期,每次请求后我都会获得另一个有效令牌(刷新流程)。
但是,我的问题是,如果我有一个尚未使用的用户的有效令牌,然后我将其从 header 中删除并使用有效凭据点击 /login 路由,我我发行了 另一个 有效令牌。所以现在我有两个可用于对用户进行身份验证的有效令牌,因为我的 /login 路由不会使以前颁发的令牌无效。
有谁知道检查用户是否有未完成的有效令牌的方法,以便在用户从其他地方登录时使令牌失效?
我会在做一些研究后回答我自己的问题。据我了解,除非明确列入黑名单,否则 JWT 令牌是有效的。只要服务器认识到它自己创建了令牌,那么它就可以使用密钥解密令牌并假定它是有效的。这就是令牌生命周期如此重要的原因。因此,如果您想使已发行的令牌失效,您要么必须等待到期,要么将其列入黑名单。