验证后验证JWT有效负载是否是最佳做法?

时间:2018-04-25 17:38:03

标签: jwt

我的问题是JWT的实施是合理的,而且更多的是关于你之后使用有效负载做的事情。

我正在发行JWT令牌,然后验证每个令牌以确认用户的身份。但是,一旦验证了令牌,是否还需要验证字段?

例如,这是一个示例令牌有效负载:

{
  “iss”: “example.com”,
  “exp”: 1426420800,
  “company”: “example”,
  “userid”: 123456789,
  "name": "Bob"
}

我是否需要验证'userid'是否为整数?验证'name'是一个特定长度的字符串?

2 个答案:

答案 0 :(得分:2)

  

我是否需要验证userid是否为整数?验证name是一个特定长度的字符串吗?

假设你的JWT实现 sound 正如你在问题中提到的那样,假设你信任发出令牌的服务器,那么在没有必要这样的验证级别之后检查签名。

在接受令牌之前,您必须确保令牌有效。以下是您必须考虑的一些验证:

  • 验证签名以确保令牌未被篡改。
  • 通过查看exp声明来确保令牌未过期。
  • 如果您使用nbf声明,请确保接受令牌不会太早。
  • 如果需要,请验证其他声明,例如iss

大多数声音 JWT实现都支持这些验证。

如Lutz Horn的answer所述,您应该仅依靠JWT进行身份验证(来电者)。对于授权(调用者可以执行的操作),从持久存储中查找调用者角色/权限以获取最新信息。

答案 1 :(得分:1)

这取决于您的服务器。如果它使用JWT声明做任何事情,例如存储一些数据,它应该验证执行用户是否存在并且授权来执行此操作。

JWT只处理身份验证:证明用户是他是谁,并且他提供了必要的信息(密码)来证明这一点。 JWT 处理授权:检查经过身份验证的用户可以执行的操作。