exp表示jwt过期时间(unix时间戳),必须为数字且大于iat;iat表示签发时间,须为整数时间戳;nbf定义生效起始时间,不得小于iat;jti提供唯一标识防重放;sub标识主体,应为字符串且不包含敏感信息。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您在解析JWT时看到exp或iat字段,但不确定其具体含义,则可能是由于对JWT标准载荷中预定义声明的理解存在偏差。以下是针对这些字段的逐项解释与说明:
一、exp(Expiration Time)字段
exp字段用于标识该JWT的过期时间,是一个严格的时间戳数值,单位为秒,表示自Unix纪元(1970-01-01 00:00:00 UTC)起经过的秒数。该值必须大于iat字段所指定的签发时间,否则令牌将被判定为无效。
1、exp值必须为数字类型,不可为字符串或null。
2、验证逻辑中需将当前系统时间(UTC)转换为Unix时间戳后与exp值比较。
3、若当前时间戳大于或等于exp值,则该JWT已被视为过期,服务器必须拒绝处理。
二、iat(Issued At)字段
iat字段记录JWT的签发时间,同样以Unix时间戳格式表示。它提供了一个基准时间点,可用于计算令牌生命周期、判断是否早于系统当前时间、或配合nbf字段做时间窗口校验。
1、iat值必须为整数,代表精确到秒的时间戳。
2、服务端在生成JWT时应使用高精度系统时钟获取当前UTC时间并转为Unix时间戳。
3、若iat值大于服务器当前时间戳,则可能表明客户端时钟严重超前或存在伪造风险。
三、nbf(Not Before)字段
nbf字段定义JWT生效的最早时间,即在此时间之前,即使未过期也不得被接受。该字段同样采用Unix时间戳格式,常用于实现延迟生效策略或防御重放攻击。
1、nbf值必须为整数,且不得小于iat值。
2、验证流程中需确保当前时间戳不小于nbf值,否则拒绝使用该令牌。
3、若nbf缺失,则默认认为令牌在iat时刻即可生效;若存在但不满足条件,则即使未过期也视为不可用。
四、jti(JWT ID)字段
jti字段为JWT提供唯一性标识,是一个字符串,用于防止同一令牌被重复使用(即防范重放攻击)。每个jti值应在整个系统范围内全局唯一,且通常只使用一次。
1、jti值建议由安全随机生成器产生,长度不少于16字节编码后的字符串。
2、服务端可选择将已使用的jti值缓存至短期存储(如Redis),并在每次验证时检查是否已存在。
3、若检测到重复jti,则必须立即拒绝该请求并可触发安全告警。
五、sub(Subject)字段
sub字段标识该JWT所面向的主体,通常是用户ID、账户名或其他能明确指代用户的标识符。它不具备认证功能,仅作语义标识用途,不应作为权限判断的唯一依据。
1、sub值应为字符串,内容由业务系统自行定义,但须保证在上下文内具有唯一性。
2、不建议在sub中嵌入敏感信息(如手机号、身份证号),因其在Base64URL解码后可被明文读取。
3、若sub为空或缺失,某些严格模式验证器会直接拒绝该JWT。










