Как я могу установить `sub` утверждение JWT в FeathersJS?

Заявление sub для JWT не является обязательным, но проверка подлинности Feesjs не позволяет мне установить для него пустую строку или удалить ее.

Мне удалось добавить новое значение к полезной нагрузке в authentication перед hook, но изменение sub или попытка удалить это не сработает.

app.service('/api/auth').hooks({
  before: {
    create: [
      // You can chain multiple strategies
      auth.hooks.authenticate(['jwt', 'local']),

      hook => {
        // I can add a new `SUB` value but this method doesn't work for `sub`
        Object.assign(hook.params.payload, {SUB: hook.params.payload.userId})
      }
    ],
...

Я попытался добавить такое же изменение в ловушку after, но это тоже не сработало. Мне не кажется правильным иметь значение sub как anonymous. Их документы даже говорят:

subject: 'anonymous', // Typically the entity id associated with the JWT

И все же, кажется, нет прямого способа сделать sub JWT заявить динамическое значение.


person SomethingOn    schedule 31.08.2017    source источник


Ответы (1)


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

Глядя на код, вы можете увидеть, что допустимые ключи параметров JWT могут быть установлен через params (который, кроме params.query, находится вне досягаемости злонамеренного клиента, поэтому его нелегко подделать):

app.service('/api/auth').hooks({
  before: {
    create: [
      // You can chain multiple strategies
      auth.hooks.authenticate(['jwt', 'local']),

      hook => {
        hook.params.jwt.subject = hook.params.payload.userId;
      }
    ],
person Daff    schedule 31.08.2017
comment
Не работает :( Все еще выходит как anonymous. Я пробовал использовать хук before и after; результат тот же. - person SomethingOn; 01.09.2017
comment
На самом деле вам нужно установить hook.params.jwt.subject = hook.params.payload.userId - person Jonathon Hill; 20.05.2018