2015-04-25 3 views
1

Я хочу реализовать аутентификацию с помощью JWT в приложении expressJS.
Я узнал концепцию JWT после того, как поработал на некоторых веб-сайтах, но я не могу реализовать JWT с помощью expressJS.
Я не получаю никакого точного примера для JWT в expressJS.
Я прочитал записку read-me для узла узла express-jwt, но моя проблема заключается в том, как создавать JWT и как проверять полученный JWT для каждого запроса.
Что точный процесс:Аутентификация в приложении expressJS

  1. Сформировать JWT
  2. Decode JWT
  3. Проверьте JWT

    Кроме того, что подразумевается под секретном в следующем примере:
var jwt = require('express-jwt'); 

app.get('/protected', 
    jwt({ 
     secret: 'shhhhhhared-secret' 
    }), 
    function(req, res) { 
     if (!req.user.admin) return res.send(401); 
     res.send(200); 
    }); 
+0

'express-jwt' только декодирует/проверяет токены, генерация остается таких как ['jsonwebtoken'] (https://github.com/auth0/node-jsonwebtoken). Секрет должен соответствовать тайне, с которой были созданы токены. – robertklep

ответ

0

Вам необходимо использовать пакет jsonwebtoken. Пакет express-jwt помогает защитить часть вашего API при использовании инфраструктуры ExpressJS.

секрет много как пароль. Он кодирует полезную нагрузку, чтобы конфиденциальная информация могла быть передана в JWT без манипулирования. Это дает уверенность в том, что механизм аутентификации не был изменен, и поэтому сервер может доверять этому пользователю.

Примечание: В некоторых случаях вы увидите, что JWT закодирован с помощью алгоритма RS256. Это потребует наличия пары открытого/закрытого ключа для проверки и декодирования JWT.

Сформировать

sign() функция делает это в jsonwebtoken. Если вы используете пакет jwt-simple, вы будете использовать encode().

Вы можете подписать JWT с любым секретом, но вам придется использовать тот же секрет для использования verify().

Предположим, у вас есть следующий объект JSON, который вы хотите сделать JWT:

var json = { user: 'jdoe', 
    firstName: 'John', 
    lastName: 'Doe', 
    id: 1 
}; 

var token = jwt.sign(json, 'superSecretSquirrel'); 

Подписанное/кодированный маркер теперь будет выглядеть так:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiamRvZSIsImZpcnN0TmFtZSI6IkpvaG4iLCJsYXN0TmFtZSI6IkRvZSIsImlkIjoxLCJpYXQiOjE0MzI3NjU3NzJ9.4mowMfRKIENnAKtRdDkj-BZZqAS8_b0eS3nj5qvEu9Q 

Вы можете проверить это на jwt.io (убедитесь, что вы предоставили секрет, указанный здесь).

Проверка и Decode

verify() функция делает это асинхронно. Объект, который он возвращает в обратном вызове, является декодированным JWT. Чтобы проверить JWT, вам нужно передать секрет функции.

Предполагая, что секрет «superSecretSquirrel», как показано выше:

var jwt = require('jsonwebtoken'); 

jwt.verify(token, 'superSecretSquirrel', function (err, decoded) { 
    if (err) 
     console.error(err); 

    // Show the decoded JWT 
    console.log(decoded); 
}); 

Декодированный маркер будет отображаться как:

{ user: 'jdoe', firstName: 'John', lastName: 'Doe', id: 1, iat: 1432765772 } 

Где iat в маркере является registered claim, что означает «Выдано в ».

Теперь давайте обратимся к вашему примеру (я оставил свою функцию и заменить секрет):

var expressJWT = require('express-jwt'); 
// Assume app = express(); 

app.get('/protected', 
    expressJWT({ 
     secret: 'superSecretSquirrel' 
    }), 
    ... 
); 

Что это делает только разрешить доступ к пути /protected, если у вас есть JSON веб-токен, подписанный с секретным «superSecretSquirrel». Если у вас есть токен с тайной, которая не соответствует, вы получите UnauthorizedError, и вы захотите выбросить HTTP 401.

Смежные вопросы