簡體   English   中英

NodeJS JWT令牌驗證

[英]NodeJS JWT token verification

我正在嘗試驗證簽名的令牌並使用NodeJS從中提取信息。

我現在在瀏覽器中有一個名為userToken的令牌,登錄后已保存(我使用auth0登錄)。

我嘗試在此處手動驗證我的令牌: 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);
});

您無需執行任何操作。 由於您使用的是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

希望對您有所幫助,對我的英語感到抱歉。

該示例應該有所幫助,未經測試,但請確保它是正確的方法,請查看express-jwt來源,其在幕后的作用 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為您返回有效的數據結構(因為我不確定,否則)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM