NodeJS JWT令牌validation

我试图validation签名令牌,并使用NodeJS从它提取信息。

我现在在浏览器中有一个名为userToken的token,login后我保存了(我用auth0login)。

我尝试在这里手动validation我的令牌: http : //jwt.io ,它工作,并给我有效载荷数据没有问题。 但是,我不能用NodeJS做同样的事情。 我该怎么做?

我阅读文档,但我无法得到它。 https://github.com/auth0/express-jwt

这是我的server.js

var http = require('http'); var express = require('express'); var cors = require('cors'); var app = express(); var jwt = require('express-jwt'); var dotenv = require('dotenv'); dotenv.load(); var authenticate = jwt({ secret: new Buffer(process.env.AUTH0_CLIENT_SECRET, 'base64'), audience: process.env.AUTH0_CLIENT_ID }); // view engine setup var path = require('path'); app.set('views', path.join(__dirname, 'views')); app.use(express.static(path.join(__dirname, 'public'))); app.set('view engine', 'jade'); app.configure(function () { // Request body parsing middleware should be above methodOverride app.use(express.bodyParser()); app.use(express.urlencoded()); app.use(express.json()); app.use(cors()); app.use(app.router); }); app.get('/', function (req, res) { res.render('index'); }); app.get('/test', function(req,res) { // how do I check it? }); var port = process.env.PORT || 3001; http.createServer(app).listen(port, function (err) { console.log('listening in http://localhost:' + port); }); 

这个示例应该可以帮助你,但是没有经过testing,但是确定它是正确的,看看express-jwt源代码,它在幕后也是一样的

 app.get('/test', function(req, res) { var jsonwebtoken = require('jsonwebtoken'); //install this, move to declarations var loginToken = req.headers.authentication || req.body.userToken || req.headers.Bearer; //or your own, it's just headers that pass from browser to client jsonwebtoken.verify(loginToken, new Buffer(process.env.AUTH0_CLIENT_SECRET, 'base64'), function(err, decoded) { if(err) { return res.status(401).send({message: 'invalid_token'}); } //be aware of encoded data structure, simply console.log(decoded); to see what it contains res.send(decoded); //`decoded.foo` has your value }); }); 

问题是你必须自己编码你的数据,然后解码,所以要注意,auth0为你返回有效的数据结构(因为我不确定)

你不需要执行任何操作。 既然你正在使用这个express-jwt ,只需将userProperty标签传递给jwt

 var authenticate = jwt({ secret: new Buffer(process.env.AUTH0_CLIENT_SECRET, 'base64'), audience: process.env.AUTH0_CLIENT_ID, userProperty: 'payload' }); 

所以,你可以在你的控制器中使用req.payload获得所有的jwt有效载荷数据。 你可以用console.log(req.payload)来检查它。

你可以看到它是如何工作在这里: https : //github.com/auth0/express-jwt/blob/master/lib/index.js#L121

我希望这有助于我的英语,并对此感到抱歉。