Сила JSON Web Tokens и Express
Веб-токены JSON — это один из самых популярных способов шифрования токенов и проверки подлинности пользователей, особенно благодаря своей уникальной структуре, состоящей из заголовка, полезной нагрузки и подписи.
Когда происходит изменение в шифровании полезной нагрузки, подпись немедленно меняется, что не позволяет неавторизованным пользователям играть с предоставленным им токеном.
Он использует шифрование BASE64UrlEncode, но для подписи требуется закрытый ключ, который есть только у вашего администратора, обычно спрятанный в переменных .env или в другом месте, защищенном от атак.
Пример веб-токенов JSON
После декодирования трех частей токена мы должны увидеть что-то вроде этого:
Декодированный заголовок
{
"typ": "JWT",
"alg": "HS256"
}
Декодированная полезная нагрузка
{
"iss": "LM",
"iat": 1619470682,
"exp": 1619471886,
"aud": "logicmonitor.com",
"sub": "Ned"
}
Подпись
mqWsk4fUZ5WAPYoY9bJHI7gD8Zwdtg9DUoCll-jXCMg
Как реализовать веб-токены JSON
В приложении JS Express создайте промежуточное ПО. Преимущество промежуточного программного обеспечения будет заключаться в проверке каждого запроса, чтобы убедиться, что аутентификация запроса действительна. Если нет, мы должны справиться с этим.
app.use(verifyTokens);
Затем нам нужно установить npm-пакет JSON WEB TOKEN, написав
npm install jsonwebtoken
Затем мы требуем пакет и начинаем писать промежуточное ПО.
const jwt = require('jsonwebtoken'); const verifyTokens = (req, res, next) => { // We first check if there was a token cookie in the first place. if (req.cookies.token) { // If yes, we check it and provide our private key. jwt.verify(req.cookies.token, 'super-private-key-fetched-from-.env', (err, decoded) => { if (err) { // If there was some manipulation in the token, then clear the token or you can handle it the way you want. Maybe ban the user. res.clearCookie('token') next(); } else { // if there was no problem, continue with the code. next(); } }) } else { // if there was no token, continue with the code next(); } }
После написания промежуточного программного обеспечения нам понадобится способ расшифровать декодированную информацию, поэтому в каждом случае, когда мы хотим проверить аутентификацию пользователя и получить информацию в файлах cookie, мы можем снова вызвать JWT для проверки для декодирования.
Это пример кода процесса.
const createPost = (req, res) => { jwt.verify(req.cookies.token, 'super-private-key-fetched-from-.env', (err, decoded) => { if (err) { // Most likely, we won't need these two lines of code because the middle would have taken care of it already. res.clearCookie('token') res.json('Not Authorized'); } else { // Code For Creating A Post For an Authorized User } }) }
Заключение
Веб-токены JSON — отличный способ для начинающих проверить аутентификацию своих пользователей, и есть много способов еще больше усложнить этот процесс для повышения безопасности. Чтобы узнать больше о JWT, вы можете посетить их официальную документацию.