2017-09-22 4 views
0

J'essaye d'implémenter l'authentification basée sur des jetons dans Laravel 5.5 en utilisant JWTAuth de Tymon. J'ai suivi le GitHub Documentation pour la bibliothèque et j'utilise le flux d'authentification suivant. Voici la partie d'authentification de mon itinéraire de connexion:Authentification Laravel Tymon JWT: recherche de jeton valide en attente avant l'authentification?

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 ]]); 

Et voici les routes:

Route::group([ 

    'middleware' => ['jwt.auth', 'jwt.refresh'], 

    ], 

    function() { 

     // Routes requiring authentication 
     Route::get('/logout', 'Auth\[email protected]'); 
     Route::get('/protected', function() { 
      return 'This is a protected page. You must be logged in to see it.'; 
    }); 

}); 

vous pouvez donc voir que je suis en utilisant le jwt.auth et intergiciels jwt.refresh. Maintenant, tout fonctionne comme prévu et je peux authentifier les utilisateurs avec des jetons. Chaque jeton a une durée de vie d'une utilisation et un jeton valide est fourni après chaque requête (le flux de rafraîchissement).

Cependant, mon problème est que si j'ai un jeton valide pour un utilisateur qui n'a pas encore été utilisé, puis-je le supprimer de l'en-tête et cliquez sur le/itinéraire de connexion avec des informations d'identification valides, je suis délivré une autre jeton valide. J'ai maintenant deux jetons valides qui peuvent être utilisés pour authentifier un utilisateur, car ma route/login n'invalide pas les jetons émis précédemment.

Est-ce que quelqu'un sait d'une manière de vérifier si un utilisateur a un jeton valide exceptionnel, de sorte qu'il peut être invalidé si l'utilisateur se connecte d'ailleurs?

Répondre

0

Je vais répondre à ma propre question après avoir fait quelques recherches. D'après ce que je comprends, les jetons JWT sont valides sauf s'ils sont explicitement mis sur liste noire. Tant que le serveur reconnaît qu'il a lui-même créé le jeton, il peut déchiffrer le jeton à l'aide d'une clé secrète et supposer qu'il est valide. C'est pourquoi les durées de vie des jetons sont si importantes. Donc, si vous voulez invalider un jeton émis, vous devez soit attendre l'expiration soit le mettre sur liste noire.