При авторизации узла не обнаружен токен авторизации

Я использую JWT для аутентификации запросов к внутреннему API, и это приводит к неожиданной ошибке.

const generateJwt = function(rows) {
var expiry = new Date();
expiry.setDate(expiry.getDate() + 7);

return jwt.sign({
    _id: 1,
    email: rows.email,
    name: rows.username,
    exp: parseInt(expiry.getTime() / 1000),
}, "MY_SECRET"); // DO NOT KEEP YOUR SECRET IN THE CODE!

};

Я использую приведенный выше код для создания jwt, и он успешно сгенерирован.

var jwt = require('express-jwt');
var auth = jwt({
secret: 'MY_SECRET',
userProperty: 'payload'
});

var router = express.Router();

router.get('/list',auth, controller.getMerchantList);

после того, как пользователь вошел в систему, я возвращаю токен jwt и отправляю токен, когда клиент звонит в серверную часть.

$http.get('/api/merchant/list',{
  headers: {
    Authorization: 'Bearer '+ authentication.getToken()
  }
});

Генерируется маркер: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOjEsImVtYWlsIjoia2FzaGlmcm9zaGVuN0BnbWFpbC5jb20iLCJuYW1lIjoiQXJ5YSBTdGFyayIsImV4cCI6MTQ5OTg0NjEzOSwiaWF0IjoxNDk5MjQxMzM5fQ.-CCQwiadozSOuuIk9fil4aJh8D38NwgKYP3HpvClyKw

Но я все еще получаю 401. Токен jwt находится во внешнем интерфейсе. Я проверил через console.log. Может кто-нибудь, пожалуйста, помогите мне решить эту проблему.


person kashif roshen    schedule 05.07.2017    source источник
comment
Можете ли вы, пожалуйста. покажите нам сгенерированный токен (пожалуйста, отредактируйте свой вопрос и добавьте его туда вместо ответа с комментарием)   -  person jps    schedule 05.07.2017
comment
Добавил токен :) заранее спасибо :)   -  person kashif roshen    schedule 05.07.2017
comment
Я не знаком с express-jwt, но недавно был похожий случай, похожий на ваш (токен присутствует, но все еще 401), и это оказалось проблемой с заявлением aud (аудитория). (- ›stackoverflow.com/questions/44398177/) У вашего токена нет требования aud. Может в этом проблема. см. также tools.ietf.org/html/rfc7519#section-4.1.3 < / а>   -  person jps    schedule 05.07.2017
comment
Спасибо :) Я следил за инструкцией и сделал именно то, что там было сказано: / все остальное работает, кроме этого: / Я проверю, как настроить аудиторию в express-jwt :)   -  person kashif roshen    schedule 05.07.2017


Ответы (1)


const Jwt=require('jsonwebtoken');

function generateToken(rows,callback){
    let tokenData={ _id: 1,
    email: rows.email,
    name: rows.username
    }
    return Jwt.sign(tokenData,"YOUR-SECRET-KEY",{ expiresIn: 60 * 60 },function(err,token){
        if(err) callback(err);
        else callback(null,token);
})
}

Отправьте этот токен клиенту. При получении токена в заголовках от клиента. Вам необходимо проверить этот токен с помощью метода проверки Jwt. Ваше промежуточное ПО для аутентификации должно взять токен из заголовков и проверить его.

function auth(req,res,callback){
    let token=req.headers.authorization;
    Jwt.verify(token,"YOUR-SECRET-KEY",function(err,decodedData){
        if(err)
            callback(err); // you can send your custom error too
        else
            callback(null,decodedData); 
        }
    )

}
person Mukul Dev    schedule 05.07.2017