Authentifizierung der Knoten-API mit passport-jwt

Ich versuche, die JWT-Authentifizierung mit passport-jwt einzurichten. Ich glaube, ich habe die richtigen Schritte unternommen, aber ein Test mit GET wird nicht erfolgreich sein und ich weiß nicht, wie ich ihn debuggen soll.

Hier ist was ich getan habe:

installieren Passport-JWT direkt aus dem Dokument so viel wie möglic

var jwtOptions = {
    secretOrKey: 'secret',
    issuer: "accounts.examplesoft.com",  // wasn't sure what this was, so i left as defaulted in the doc
    audience: "yoursite.net"   // wasn't sure what this was, so i left as defaulted in the doc
  };

jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeader();

passport.use(new JwtStrategy(jwtOptions, function(jwt_payload, done) {
  User.findOne({id: jwt_payload.sub}, function(err, user) {
    if (err) {
        return done(err, false);
    }
    if (user) {
        done(null, user);
    } else {
        done(null, false);
        // or you could create a new account
    }
  });
}));

Meinem Benutzer / Login-Endpunkt ein Token-Ergebnis hinzugefügt

var jwt = require('jsonwebtoken');
// ...

exports.postLogin = function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) throw err;
    if (!user) {
        return res.send({ msg: 'Login incorrect' });
    }
    req.logIn(user, function(err) {
        if (err) throw err;
        var secretOrKey = jwtOptions.secretOrKey;
        var token = jwt.sign(user, secretOrKey, {
            expiresIn: 631139040 // 20 years in seconds
        });
        res.send({ user: user, jwtToken: "JWT " + token });
    });
  })(req, res, next);
};

Things sah bis hier gut aus. Ich kann einen Benutzer anmelden (mit passport local auth) und die Antwort war eine, die ich gehofft habe ...

{"user": {"_id": "56c8b5bd80d16ef41ec705dd", "email": "[email protected]", "password": "$ 2a $ 10 $ zd ... etc.", "__v": 0, }, "jwtToken": "JWT eyJ0eXAiOiJ .... etc." }

Ich habe eine ungeschützte Testroute wie diese erstellt ...

// in my routes file
app.get('/user/tokenTest', user.tokenTest);

Und in meinem Controller ein einfacher Endpunkt ...

exports.tokenTest = function(req, res) {
    console.log(req.headers);
    res.send("token test!!");
};

Und GET-ing das funktioniert auch.

Aber dann versuche ich, diese Route wie folgt zu schützen:

app.get('/user/tokenTest', passport.authenticate('jwt', { session: false }),
    user.tokenTest);

Nachdem ich das mache, nichts als Traurigkeit. Ich sende eine Anfrage wie diese:

curl -k 'https://localhost:3443/user/tokenTest' -H 'Authorization: JWT eyJ0eXAiOiJ... etc.' 

Und immer, immer ein 401 bekommen:

Unauthorized

Console-Protokolle in der Steuerung scheinen nicht ausgeführt zu werden, ebenso wenig wie die Protokollierung impassport.use Strategie-Methode. Ich habe gezwickt und gezwickt, aber ich bin ein bisschen verloren. Das passport-jwt-Dokument liefert nur das Beispiel und praktisch keine andere Hilfe.

Please, irgendwelche Ideen über entweder einen Fehler, den ich oben mache, oder zumindest, wie man über das Debuggen geht ??

Antworten auf die Frage(4)

Ihre Antwort auf die Frage