如何在FeathersJS中设置JWT的“子”声明?

问题描述:

对于JWT的sub声明是可选的,但feathersjs-authentication不会让我将其设置为空白字符串或将其删除。如何在FeathersJS中设置JWT的“子”声明?

我能够hook但改变sub或试图删除它不工作之前,添加一个新值在authentication有效载荷。

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要求的动态值。

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.sub = hook.params.payload.userId; 
     } 
    ], 
+0

不工作:(仍然来了out'as'anonymous',我在'before'和'after' hook中试过,结果相同。 – SomethingOn