仅尝试使用Express服务器进行签名和验证JSON Web令牌的基本实现,但“验证”功能始终返回“无效令牌”错误。
将通过“ /”路由生成的令牌粘贴到jwt.io调试器中时,它最初会显示“无效签名”,但是当我选中“秘密是base64编码的”复选框时,调试器会验证签名,因此在签名和验证端尝试了base64编码/解码我的秘密,但是没有任何效果。
我目前正在使用名为“ REST Client”的VS代码扩展来执行请求,该扩展名允许您使用“ .rest”或“ .http”文件进行请求,并且正在将“ Bearer [token]”传递给手动授权标头。我也在使用Postman进行测试,并收到了相同的错误。该应用程序正按预期通过两种方法获取标头。
const express = require('express')
const jwt = require('jsonwebtoken')
const app = express()
app.use(express.json())
app.get('/', (req, res) => {
const user = {
username: 'test1234',
email: 'test1234@gmail.com',
admin: false
}
const secret = 'secret'
jwt.sign(user, secret, (err, token) => {
req.token = token
res.send(token)
})
})
app.get('/verify', (req, res) => {
// Bearer <token>
const authHeader = req.headers.authorization
console.log(authHeader)
if(authHeader) {
const token = authHeader.split(' ')[1]
const secret = 'secret'
const userData = jwt.verify(token, secret)
res.send(userData)
} else {
return res.send('Please provide a token.')
}
})
app.listen(3000, () => console.log('Server listening on http://localhost:3000 ...'))
我希望有效载荷(userData)从'/ verify'路由返回,但会收到“无效令牌”错误。
更新: 问题是我将授权标头的值括在引号中,例如。授权:“ Bearer [token]”,当它不应该用引号引起来时,例如。授权:不记名[token]。
答案 0 :(得分:0)
问题是我将授权标头的值括在引号中,例如。授权:“ Bearer [token]”,当它不应该用引号引起来时,例如。授权:不记名[token]。