Рубрики
Без рубрики

Express.js Быстрый совет: добавление поддержки для аутентификации JWT

JWT коротко для веб-токена JSON и является открытым стандартом (RFC 7519), который определяет компактный и автономный способ для надежной передачи информации между сторонами в качестве объекта JSON. Вот как добавить защищенную поддержку аутентификации JWT для Express.js

Автор оригинала: Mattias.

Основы 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);
});