Отсутствует свойство администратора в express-jwt

У меня есть экспресс-служба nodejs с express-jwt с защищенным вызовом api.

app.get('/protected',
  jwtCheck, function(req, res) {
    console.log(JSON.stringify(req.user));
    if (!req.user.admin)
      return res.send("user");
    res.send("admin");
});

Проблема в том, что объект req.user не содержит поля «admin». Я добавил роли в правила Auth0, поэтому я могу заставить его работать на моем клиенте, но не на сервере nodejs.

Я следовал руководству отсюда: https://github.com/auth0/express-jwt

Я что-то здесь упустил? Есть ли правило, которое мне нужно установить в auth0, чтобы добавить поле администратора?

РЕДАКТИРОВАТЬ: Нашел это описание в проблеме git: «Ваш токен должен содержать информацию (например, роли). Чтобы сделать это с помощью Auth0, вы должны запросить соответствующую область действия, например: scope = openid роли электронной почты». Как теперь отредактировать область действия express-jwt?

Заранее спасибо!


person user2791411    schedule 28.10.2016    source источник
comment
Чтобы лучше понять проблему, можете ли вы включить образец токена доступа, который вы используете для вызова этого API? Это может быть токен с истекшим сроком действия или вы можете удалить часть подписи; кроме того, если в полезной нагрузке есть конфиденциальная информация, вы можете замаскировать значения (используйте jwt.io).   -  person João Angelo    schedule 31.10.2016


Ответы (1)


Ваш req.user содержит какие-либо данные?

В описании сказано:

«Промежуточное ПО, которое проверяет JsonWebTokens и устанавливает req.user».

Это означает, что когда вы делаете запрос к серверу с действующим токеном jwt в заголовке авторизации, библиотека "express-jwt" декодирует этот токен и сохраняет его полезную нагрузку в "req.user", чтобы следующие промежуточные программы могли использовать . Т.е. этот токен:

"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50aWQiOiIxIiwiaWQiOiIyMzQ0IiwidXNlcm5hbWUiOiInTWFjRyciLCJpYXQiOjE0NzgyNTI1MzIsImV4cCI6MTQ3ODI1NDUzMn0.T_vPE8_Y2JQF9Xq9L2jOdcDoZC7rdDJioFb0DaDe9Zk"

Это расшифровывается как:

{
  "accountid": "1",
  "id": "2344",
  "username": "'MacG'",
  "iat": 1478252532,
  "exp": 1478254532
}

Приведет к

req.user = {
  "accountid": "1",
  "id": "2344",
  "username": "'MacG'",
  "iat": 1478252532,
  "exp": 1478254532
}

Итак, если у вас нет параметра администратора в ваших данных токена, req.user.admin будет undefined. То есть «admin» в фрагменте кода, о котором вы говорите, - это просто вводящий в заблуждение пример того, как вы можете защитить маршрут, ЕСЛИ данные вашего токена содержат параметр «admin»

Если ваш req.user вообще не содержит данных, вы, вероятно, подключаете свои функции промежуточного программного обеспечения в неправильном порядке. Для этого вам нужно будет опубликовать больше кода для отладки.

person Out of Orbit    schedule 04.11.2016