Javascript nodejsjwt令牌验证
我正在尝试验证已签名的令牌,并使用NodeJS从中提取信息 我现在在浏览器中有一个名为userToken的令牌,它是在我登录后保存的(顺便说一下,我使用auth0登录) 我试图在这里手动验证我的令牌:,它可以正常工作,并毫无问题地为我提供有效负载数据。然而,我不能对NodeJS做同样的事情。我怎么做 我看了文件,但没看懂。 这是我的server.jsJavascript nodejsjwt令牌验证,javascript,node.js,auth0,Javascript,Node.js,Auth0,我正在尝试验证已签名的令牌,并使用NodeJS从中提取信息 我现在在浏览器中有一个名为userToken的令牌,它是在我登录后保存的(顺便说一下,我使用auth0登录) 我试图在这里手动验证我的令牌:,它可以正常工作,并毫无问题地为我提供有效负载数据。然而,我不能对NodeJS做同样的事情。我怎么做 我看了文件,但没看懂。 这是我的server.js var http = require('http'); var express = require('express'); var cors =
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);
});
这个示例应该对您有所帮助,它没有经过测试,但请确保它是正确的,请查看
expressjwt
的源代码,确实如此
问题是您必须自己对数据进行编码,然后解码,因此请注意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)
检查它
您可以在此处看到它的工作原理:
我希望它能帮上忙,我的英语也很抱歉。Node告诉你,
jwt
没有verify
功能,事实上它看起来没有。我正在努力弄清楚express jwt和jsonwebtokens之间有什么联系。是的,jsonwebtoken
为express jwt
创建(或签名)令牌。谢谢,差不多完成了。如果我将令牌作为字符串传递,它将工作。但如果我尝试req、headers.userToken或req.body.userToken,它将返回无效的令牌,因为它可能在其中找不到令牌。是什么原因造成的?我如何找到要调用哪个req对象(标头、正文等)来获取userToken?我的令牌位于localstorage中,我应该安装一个模块来获取它,还是有一种内置的方法来获取它?@salep Browser必须发送带有标头(或正文)的令牌,为此,从localstorage获取令牌,并用该令牌修补所有传出的http请求(添加到标题),这就是itI成功实现的,它适用于jQuery Ajax post请求,但get请求仍然存在问题。感谢您的帮助,我非常感激。什么是userProperty?这应该是最好的答案。
var authenticate = jwt({
secret: new Buffer(process.env.AUTH0_CLIENT_SECRET, 'base64'),
audience: process.env.AUTH0_CLIENT_ID,
userProperty: 'payload'
});