【问题标题】:How can I set the `sub` claim of a JWT in FeathersJS?如何在 FeathersJS 中设置 JWT 的“sub”声明?
【发布时间】:2018-02-08 23:26:29
【问题描述】:

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

我能够在hook 之前的authentication 中的有效负载中添加一个新值,但更改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 声明一个动态值。

【问题讨论】:

    标签: feathersjs feathers-authentication


    【解决方案1】:

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

    Looking at the code 你可以看到valid JWT option keys 可以通过params 进行设置(params.query 之外的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;
          }
        ],
    

    【讨论】:

    • 不工作 :( 仍然以anonymous 出现。我尝试了beforeafter 钩子;同样的结果。
    • 其实需要设置 hook.params.jwt.subject = hook.params.payload.userId
    • @SomethingOn 将死。我很难理解为什么它返回了我的 user.name 而不是 ID。 Shook:我的用户名被称为anonymous,令我惊讶的是,默认返回的是相同的
    猜你喜欢
    • 2020-12-05
    • 2017-09-11
    • 2018-08-27
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 2019-04-15
    • 2020-07-18
    • 2015-05-08
    相关资源
    最近更新 更多