从客户端向JWT添加数据

lbp*_*ers 0 api-design token jwt

我是使用JWT的新手。我有一个API,该API会生成JWT,以便对客户端进行身份验证以进行进一步的请求。我的JWT具有返回用户ID的属性:

{
  jwt: {
    exp: "2017-12-12 00:00:00",
    data: {
      user_id: 491
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是客户端是否可以解码API生成的JWT并将新属性添加到数据字段中,如下所示:

{
  jwt: {
    exp: "2017-12-12 00:00:00",
    data: {
      user_id: 491,
      status: 1
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

或者,如果我可以通过将状态字段设置为默认值的API身份验证系统生成JWT,然后客户端可以对其进行更改。

谢谢。

Mik*_*kaS 5

客户端可以这样做,但是会使令牌无效。当您更改有效负载的内容(例如,添加另一个字段或更改其内容)时,令牌的签名不再匹配。当API收到带有无效签名的令牌时,它应拒绝该令牌。想象一下,如果您有一个名为的字段isAdmin,客户可以将其从更改falsetrue。这会使您的身份验证毫无意义;客户端不决定是不是管理员,后端则决定。

当令牌的有效负载更改时,必须重新制作签名。为了对令牌进行签名,客户端必须知道密钥(对于H256)。但是客户端不应该知道密钥。

因此答案是否定的,客户端无法更改令牌。

你可以在这里阅读更多有关它的内容。