Laravel JWT les jetons ne sont pas valides après les actualiser dans une authentification JWT approche

EDIT:

Lire la discussion sur le rapport de bogue à: https://github.com/tymondesigns/jwt-auth/issues/83

MA QUESTION INITIALE:

Je suis en œuvre avec jwt-auth mon protégé des ressources qui nécessitent un utilisateur authentifié avec soufflet code:

Route::group(['middleware' => ['before' => 'jwt.auth', 'after' => 'jwt.refresh']], function() {
    //Protected routes
});

Lorsque l'utilisateur "s'inscrire" sur l'API d'un jeton d'Autorisation est créé et envoyé sur la réponse de l'en-tête d'Autorisation à l'application client qui appel à la ressource. Ainsi, les applications client lors de l'interception d'un jeton d'Autorisation sur l'en-tête de la réponse à définir une variable/session/que ce soit avec ce jeton de la valeur, pour l'envoyer de nouveau à l'API sur demande suivante.

La première demande pour une ressource protégée après 'login', qui fonctionne bien, mais la prochaine application client demande à l'API avec un jeton d'actualisation, donne le message d'erreur suivant (API monter toutes les réponses au format json):

{
    "error": "token_invalid"
}

Ce qui peut se produire avec actualisé de jetons? Mon actualisation jeton de mise en œuvre (défini comme un après middleware) qui est mal? Ou n'est-ce pas nécessaire pour actualiser manuellement tous jeton d'Autorisation qui viennent avec des applications client demande?

Mise à JOUR:

- Je mettre à jour le jwt-auth RefreshToken middleware proposer ici, mais le token_invalid persistent.

BUG:

Je suppose que j'ai trouvé ce qui se passe. Notez que dans la méthode refresh, ancien jeton est ajouté à la liste noire cache de cas activée:

//Tymon\JWTAuth\JWTManager
public function refresh(Token $token)
{
    $payload = $this->decode($token);

    if ($this->blacklistEnabled) {
        //invalidate old token
        $this->blacklist->add($payload);
    }

    //return the new token
    return $this->encode(
        $this->payloadFactory->setRefreshFlow()->make([
            'sub' => $payload['sub'],
            'iat' => $payload['iat']
        ])
    );
}

Et note qu'en ajouter à la liste noire de la méthode de la clé est l'itc param de vieux jeton charge utile:

//Tymon\JWTAuth\Blacklist
public function add(Payload $payload)
{
    $exp = Utils::timestamp($payload['exp']);

    //there is no need to add the token to the blacklist
    //if the token has already expired
    if ($exp->isPast()) {
        return false;
    }

    //add a minute to abate potential overlap
    $minutes = $exp->diffInMinutes(Utils::now()->subMinute());

    $this->storage->add($payload['jti'], [], $minutes);

    return true;
}

Ainsi, lorsque sur la liste noire de la méthode est appelée, l'ancien jeton jti param est la même que la nouvelle, de sorte que le nouveau jeton est dans la liste noire:

//Tymon\JWTAuth\Blacklist
public function has(Payload $payload)
{
    return $this->storage->has($payload['jti']);
}

Si vous n'avez pas besoin de la liste noire de la fonctionnalité de mise à false jwt.php fichier de configuration. Mais je ne peux pas dire si c'est l'exposer à une certaine vulnérabilité de la sécurité.

Lire la discussion sur le rapport de bogue à: https://github.com/tymondesigns/jwt-auth/issues/83

A votre problème été résolu dans la nouvelle version 0.5.3 ? Comme mentionné par l'auteur, il a été résolu dans la dernière version. Mais je continue à avoir le même problème comme le vôtre.
quand j'ai découvert ce problème, j'écris un wrapper pour jwt-auth pour le résoudre, parce que j'avais besoin d'une solution rapide. Fondamentalement, j'ai remplacer le RefreshToken middleware dans mon App\Http\Middleware paquet. Mais je vais tester la nouvelle version de vérifier ce qui se passe.
Je peux dire que le problème est encore sur. Merci beaucoup pour cette idée. La désactivation de la liste noire de travaillé

OriginalL'auteur Maykonn | 2015-04-17