Сила 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, вы можете посетить их официальную документацию.