使用passport-jwtvalidation节点API

我正在尝试使用passport-jwt来设置JWTauthentication。 我想我已经采取了正确的步骤,但testingGET不会成功,我不知道如何debugging它。

以下是我所做的:

  1. 尽可能设置护照-jwt直接从文档中删除

    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 } }); })); 
  2. 将令牌结果添加到我的用户/login端点

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

事情看起来很好,在这里。 我可以login一个用户(使用护照本地身份validation)和答复是我希望…

{“user”:{“_id”:“56c8b5bd80d16ef41ec705dd”,“email”:“peachy@keen.com”,“password”:“$ 2a $ 10 $ zd … etc.”,“__v”:0,} ,“jwtToken”:“JWT eyJ0eXAiOiJ ….等” }

我创build了这样一个无保护的testing路线…

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

而在我的控制器,一个简单的端点…

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

GET-ing也可以正常工作。

  1. 但是,我试图保护这样的路线:

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

我这样做后,只有悲伤。 我发送这样的请求:

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

总是得到一个401:

擅自

控制台中的控制台日志似乎不会执行,也不会logging在passport.use策略方法中。 我已经调整和调整,但我有点失落。 passport-jwt文档只是提供了示例,实际上没有其他帮助。

请任何关于我上面犯的错误,或至less如何去debugging?

       

网上收集的解决方案 "使用passport-jwtvalidation节点API"

对于在这里跟随我的任何可怜的灵魂:护照-jwt文档暗示auth头应该看起来像这样…

授权:JWT JSON_WEB_TOKEN_STRING …..

结果是误导(无论如何)(对我来说)。

幸运的是,由于这篇文章,我能够学习如何构build令牌。 (令牌的前缀“。”是该scheme的base64编码,前面的“JWT”是噪声,阻止了validation的工作。

所以解决的办法是将用户控制器返回的令牌从:

  res.send({ user: user, jwtToken: "JWT " + token }); 

更简单一点:

  res.send({ user: user, jwtToken: token }); 

唷。 是我吗,还是它真的是无赖这些东西有多么不足解释在这么多的节点包文档?