【问题标题】:Is it a best practice to validate the JWT payload after verifying?验证后验证 JWT 有效负载是最佳实践吗?
【发布时间】:2018-10-06 06:52:48
【问题描述】:

我的问题是假设 JWT 的实现是合理的,并且更多的是关于您之后使用有效负载执行的操作。

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

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

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

我需要验证 'userid' 是一个整数吗?并且验证'name'是一定长度的字符串?

【问题讨论】:

    标签: jwt


    【解决方案1】:

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

    假设您的 JWT 实现是健全,正如您在问题中提到的那样并且假设您信任颁发令牌的服务器,之后不需要这种级别的验证检查签名。


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

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

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


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

    【讨论】:

    • 这很棒。感谢您的来信!
    【解决方案2】:

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

    JWT 仅处理身份验证:证明用户就是他,并且他提供了必要的信息(密码)来证明这一点。 JWT处理授权:检查经过身份验证的用户可以做什么。

    【讨论】:

    • 感谢@lutz-horn,非常有帮助!
    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 2015-10-20
    • 1970-01-01
    • 2018-01-27
    • 2011-09-24
    • 1970-01-01
    • 2020-06-14
    • 2018-08-08
    相关资源
    最近更新 更多