JWT, или JSON Web Token, — это компактное, безопасное для URL-адресов средство представления претензий, которые должны быть переданы между двумя сторонами. В контексте аутентификации JWT используются для безопасной передачи информации о личности пользователя от клиента к серверу. JWT состоит из трех частей: заголовка, полезной нагрузки и подписи.
Заголовок содержит информацию о типе токена и алгоритме его подписи.
Полезная нагрузка содержит утверждения или передаваемую информацию, такую как идентификатор пользователя, имя и адрес электронной почты.
Подпись создается путем подписания заголовка и полезных данных с помощью секретного ключа и помогает гарантировать, что информация в JWT не была изменена.
Сообщение в блоге Создание и проверка веб-токенов JSON (JWT) в Node.js описывает концепцию JWT более подробно.
Зачем использовать JWT для бессерверных приложений?
Есть несколько причин, по которым вы можете использовать JWT для своего бессерверного приложения:
- Масштабируемость. Поскольку токены JWT являются автономными, их можно легко передавать между серверами, что позволяет легко масштабировать ваше бессерверное приложение.
- Переносимость: JWT можно легко передавать между клиентом и сервером, что упрощает создание приложений, работающих на разных платформах.
- Безопасность: JWT подписаны, что означает, что они не могут быть изменены без обнаружения, что затрудняет взлом вашего приложения злоумышленниками.
Добавление аутентификации на основе токенов JWT в ваше бессерверное приложение
В этом разделе мы рассмотрим шаги по добавлению аутентификации на основе токенов JWT в ваше бессерверное приложение.
- Создайте веб-токен JSON
Первым шагом в добавлении аутентификации на основе токенов JWT является создание веб-токена JSON. Вы можете сделать это с помощью такой библиотеки, как jsonwebtoken в Node.js. В следующем коде показано, как создать токен JWT:
const jwt = require('jsonwebtoken')
const payload = {
id: user.id,
email: user.email
}
const secret = 'yourSecretKey'
const options = {
expiresIn: '1h'
}
const token = jwt.sign(payload, secret, options)
В приведенном выше коде мы определяем полезную нагрузку, содержащую идентификатор пользователя и адрес электронной почты. Затем мы подписываем полезную нагрузку с помощью секретного ключа и указываем срок действия токена.
- Отправить токен JWT клиенту
Создав токен JWT, вы можете отправить его клиенту как часть ответа на успешный запрос на вход. Например:
app.post('/login', (req, res) => {
// Verify user credentials
if (user) {
const token = jwt.sign({ id: user.id, email: user.email }, secret, options)
res.json({ token })
} else {
res.status(401).json({ message: 'Unauthorized' })
}
})
- Проверьте токен JWT на сервере
Как только клиент получил токен JWT, он должен передаваться обратно на сервер с каждым последующим запросом. Затем сервер должен проверить токен, чтобы убедиться, что пользователь авторизован для доступа к запрошенному ресурсу. Чтобы проверить токен JWT на сервере, вы можете использовать библиотеку jsonwebtoken в Node.js, как показано в следующем коде:
app.use((req, res, next) => {
const token = req.headers['x-access-token']
if (!token) {
return res.status(401).json({ message: 'Unauthorized' })
}
jwt.verify(token, secret, (err, decoded) => {
if (err) {
return res.status(401).json({ message: 'Unauthorized' })
}
req.user = decoded;
next()
})
})
В приведенном выше коде мы используем функцию промежуточного программного обеспечения для проверки токена JWT, прежде чем разрешить доступ к запрошенному ресурсу. Если токен отсутствует или недействителен, пользователю возвращается неавторизованная ошибка.
Завершение
Мы рассмотрели основы JWT и то, как добавить аутентификацию на основе токенов JWT в ваше бессерверное приложение с помощью JavaScript и бессерверной среды.
Следуя этим шагам, вы можете защитить свое приложение и убедиться, что только авторизованные пользователи могут получить доступ к вашему приложению. Как всегда, обязательно правильно обработайте и защитите свой секретный ключ, а также тщательно протестируйте свою реализацию перед развертыванием в рабочей среде.
Первоначально опубликовано в Brian Cline.