如何在FeathersJS中设置JWT的`sub`声明?

时间:2017-08-31 05:49:22

标签: feathersjs feathers-authentication

JWT的sub声明是可选的,但featherjs-authentication不允许我将其设置为空字符串或删除它。

我能够在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声称具有动态价值。

1 个答案:

答案 0 :(得分:2)

subjectsubauthentication options中设置,并且 - 与任何其他JWT特定选项一样 - 无法通过有效负载进行设置。

Looking at the code您可以看到valid JWT option keys可以通过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;
      }
    ],