JWT载荷中的nbf/exp声明应使用数值还是字符串类型?官方规范说明
JWT中
nbf和exp声明的类型规范 官方权威要求
JWT的核心标准RFC 7519明确规定:nbf(生效时间)和exp(过期时间)这两个声明的值必须是JSON数值类型,代表从UNIX纪元(1970-01-01T00:00:00Z UTC)开始计算的秒级时间戳,且需忽略闰秒。标准里对这类时间声明的定义是:
对应的JSON值必须是包含NumericDate的数字类型。
关于字符串类型的实用场景说明
虽然用强类型关联数组(如Map<string,string>)统一存储所有载荷字段有一定业务便利性,但这种做法不符合JWT标准。目前主流的JWT解析库都会严格校验这两个时间声明的类型,一旦检测到是字符串而非数值,会直接判定令牌无效,抛出类型不匹配的错误,进而引发跨系统、跨语言的兼容性问题。
如果业务场景确实需要统一的字符串类型结构,建议在JWT生成和解析的业务层做类型转换:生成时先将数值时间戳转为字符串存入业务结构,再转成JSON数值写入JWT载荷;解析时先读取标准数值格式的时间声明,再转为字符串存入业务结构,而非直接在JWT载荷中使用字符串类型的时间值。
内容的提问来源于stack exchange,提问作者Seva Alekseyev
相关产品推荐
相关产品推荐

