Просто пытаюсь выполнить базовую реализацию подписи и проверки веб-токена JSON на сервере Express, но функция «verify» продолжает выдавать ошибку «Invalid token».
При вставке сгенерированного токена измаршрут «/» в отладчик jwt.io изначально говорит «недопустимая подпись», но когда я проверяю флажок «секретно закодировано в base64», отладчик проверяет подпись, поэтому я попытался кодировать / декодировать base64 свой секрет наПодписание и проверка завершились, но ничего не получалось.
В настоящее время я выполняю запросы, используя расширение кода VS с именем «REST Client», которое позволяет вам делать запросы, используя файл «.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', но вместо этого получит ошибку "неверный токен".
Обновление : проблема заключалась в том, что я заключил значение моего заголовка авторизации в кавычки, напр. Авторизация: «Носитель [токен]», когда его не должно быть в кавычках, напр. Авторизация: Носитель [токен].