You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6升级到.NET 8后出现IDX12723与IDX11020 JWT解析错误求助

解决.NET 6升级到.NET 8后的JWT解析错误

错误原因

升级后触发的IDX11020异常明确说明:JWT payload中的iat字段是字符串类型,但JWT标准要求该字段必须为数字格式的Unix时间戳。.NET 8版本的JwtSecurityTokenHandler对标准遵循更严格,而.NET 6的解析逻辑允许兼容字符串形式的数字,这是报错的核心原因。

解决步骤

1. 确认问题细节(可选但推荐)

开启PII显示,查看完整的token payload,验证iat字段的具体格式:

// 在Program.cs的服务配置代码前添加
IdentityModelEventSource.ShowPII = true;

运行后即可看到未隐藏的payload内容,确认iat是否为字符串类型。

2. 根据token生成方选择解决方案

情况1:token由自身系统生成

检查JWT生成代码,确保iat字段被设置为数字类型:

// 正确示例:使用Unix时间戳数字
var claims = new List<Claim>
{
    new Claim(JwtRegisteredClaimNames.Iat, DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(), ClaimValueTypes.Integer64)
};

// 或者通过TokenDescriptor设置IssuedAt
var tokenDescriptor = new SecurityTokenDescriptor
{
    IssuedAt = DateTime.UtcNow,
    // 其他配置项...
};

避免将iat值转为普通字符串,必须确保其类型为数字(或声明为Integer64类型)。

情况2:token由第三方系统生成(无法修改生成逻辑)

自定义JsonConverter兼容字符串类型的iat,并配置到JwtSecurityTokenHandler中:

首先创建转换器:

public class NumericStringConverter : JsonConverter<long>
{
    public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        // 若为字符串则尝试转为long,否则直接读取数字
        if (reader.TokenType == JsonTokenType.String && long.TryParse(reader.GetString(), out long value))
        {
            return value;
        }
        return reader.GetInt64();
    }

    public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
    {
        writer.WriteNumberValue(value);
    }
}

然后修改解析代码:

var token = filterContext.HttpContext.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ")[1];
var tokenHandler = new JwtSecurityTokenHandler();
// 添加自定义转换器
tokenHandler.JsonSerializerOptions.Converters.Add(new NumericStringConverter());
var authToken = tokenHandler.ReadToken(token) as JwtSecurityToken;

此配置可让解析器自动将字符串类型的iat转为数字,兼容第三方生成的非严格标准token。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 07:14:51