Расшифровка токена не дает профиль пользователя

Я пытался решить эту проблему в течение нескольких дней. Я следовал инструкциям в документации Auth0.

После декодирования токена с помощью express-jwt:

export let headerJWTCheck = expressJwt({
    secret: '*************************',
    audience: '******************************'
});

содержимое req.user не имеет профиля и ролей, которые мне нужны для ограничений ролей в API.

Вместо этого содержимое находится в форме:

{ iss: 'https://******.eu.auth0.com/',
  sub: 'google-oauth2|***********************',
  aud: '********************',
  exp: **************,
  iat: **************}

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

Я использую функцию для ограничения ролей:

export function requireRole(role: string) {
return function (req, res, next) {
    console.log(req.user);
    var appMetadata = req.user.profile._json.app_metadata || {};
    var roles = appMetadata.roles || [];

    if (roles.indexOf(role) != -1) {
        next();
    } else {
        res.redirect('/unauthorized');
    }
}

но req.user.profile всегда не определен.

В определении основного экспресс-приложения у меня есть:

app.use(cookieParser());
app.use(session({
    .................
}));
configurePassport();

app.use(passport.initialize());
app.use(passport.session());

person Omri Luzon    schedule 23.01.2017    source источник


Ответы (2)


Библиотека express-jwt инициализирует req.user на основе содержимого токена, включенного в запрос.

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

person João Angelo    schedule 31.01.2017

Решение состояло в том, чтобы добавить следующий код в конфигурацию auth0-lock:

auth: {
    params: {
        scope: 'openid app_metadata roles'
    }
}

Что добавило app_metadata и массив ролей в req.user после декодирования токена.

person Omri Luzon    schedule 01.02.2017