Основы jwt.
JWT коротко для веб-токена JSON и является открытым стандартом (RFC 7519), который определяет компактный и автономный способ для надежной передачи информации между сторонами в качестве объекта JSON. Вы можете прочитать все о JWT в jwt.io.
Предпосылки
В этой записи я предполагаю, что вы уже знакомы с тем, как создать приложение Expressjs с помощью одного или нескольких маршрутов, обслуживающих запросы, и теперь вы хотите защитить все или некоторые из них с аутентификацией JWT.
Выбор JWT Transport
Чтобы сообщить токен JWT между клиентом и сервером, его естественным образом необходимо пройти вместе с любыми и всеми запросами клиента выполняет аутентифицированные ресурсы.
Есть несколько вариантов для этого, один использует файл cookie, другой использует Авторизация
Заголовок (с схемой предъявителя или JWT) или просто пройдя его в пост или получить параметр (обескуражен). Выберите метод, наиболее подходящий для вашего использования.
Проверка вашего токена JWT
Чтобы проверить токен, вы можете использовать отличные jwt-async Пакет NPM, сконфигурированный с помощью секретного или публичного подписания эмитента. После проверенного, у вас есть доступ к претензиям, установленным эмитентом токена.
В следующем примере экстрагирует токен JWT из Авторизация
Заголовок, если у него есть схема JWT, проверяет ее и передает ее как JWT_AUTH
Собственность req
Отказ
Во-первых, настройте приложение ExpressJS
var express = require('express'); var app = express();
Во-вторых, добавьте JWT инициализацию и промежуточное программное обеспечение:
var JWT = require('jwt-async'), jwt = new JWT(); jwt.setSecret('secret'); app.use(function(req,res,next) { req.jwt_auth = false; if(req.headers['authorization'] && req.headers['authorization'].startsWith('JWT')){ var jwt_token = req.headers['authorization'].substr(4); jwt.verify(jwt_token, function(err, jwt_data) { if(err) throw err; req.jwt_auth = jwt_data; next(); }); } else { next(); } });
В-третьих, добавьте некоторые защищенные маршрута:
app.get('/', function(req, res) { if(!req.jwt_auth) { return res.redirect('/login'); } res.send('hello', req.jwt_auth.name); });