Node.js:带有Express的JWT-验证

时间:2019-11-03 02:48:33

标签: node.js express jwt

仅尝试使用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]。

1 个答案:

答案 0 :(得分:0)

问题是我将授权标头的值括在引号中,例如。授权:“ Bearer [token]”,当它不应该用引号引起来时,例如。授权:不记名[token]。