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

ASP.NET Core 3.1使用JWT生成Token时报IDX10653错误如何解决?

错误根因

IDX10653 错误的核心触发原因是JWT签名使用的对称密钥长度不满足所选加密算法的最低要求,.NET Identity组件会在校验密钥长度不匹配时直接抛出该异常,因此不会生成Token返回。你的用户注册逻辑和JWT生成逻辑解耦,所以用户数据可以正常入库。
具体可能的问题点:

  • 配置的JWT安全密钥长度过短:不同的HMAC签名算法对密钥长度有明确要求,低于要求就会触发报错
  • 密钥字符串转字节的实现错误:比如编码格式使用错误,导致实际生成的SymmetricSecurityKey长度不足
  • 签名算法配置不匹配:所选算法要求的密钥长度远高于你实际配置的密钥长度
解决步骤
  1. 确认你使用的签名算法,匹配对应最低密钥长度要求:
    • HS256(HmacSha256):密钥字节长度≥32位(对应纯英文/数字字符串最少32个字符)
    • HS384(HmacSha384):密钥字节长度≥48位
    • HS512(HmacSha512):密钥字节长度≥64位
      直接将配置文件中的SecurityKey值修改为满足长度要求的随机字符串即可,示例HS256可用密钥:a2V5Zm9yand0dXNlMjAyNGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6
  2. 修正SecurityKeyHelper.CreateSecurityKey方法的实现,确保使用UTF8编码转字节,参考正确实现:
using System.Text;
using Microsoft.IdentityModel.Tokens;

public static class SecurityKeyHelper
{
    public static SecurityKey CreateSecurityKey(string securityKey)
    {
        return new SymmetricSecurityKey(Encoding.UTF8.GetBytes(securityKey));
    }
}
  1. 检查创建JWT时传入的签名算法参数,确保和密钥长度匹配,示例CreateJwtSecurityToken方法的核心实现:
private JwtSecurityToken CreateJwtSecurityToken(TokenOptions tokenOptions, User user, 
    SigningCredentials signingCredentials, List<OperationClaim> operationClaims)
{
    var jwt = new JwtSecurityToken(
        issuer: tokenOptions.Issuer,
        audience: tokenOptions.Audience,
        expires: DateTime.Now.AddHours(1),
        claims: SetClaims(user, operationClaims),
        notBefore: DateTime.Now,
        // 确保此处算法和密钥长度匹配,比如用HS256就写下面的参数
        signingCredentials: new SigningCredentials(signingCredentials.Key, SecurityAlgorithms.HmacSha256)
    );
    return jwt;
}
  1. 调试验证:可以在生成密钥后加一行日志输出密钥长度,确认符合要求:
    Debug.WriteLine($"当前生成密钥的位数为:{securityKey.KeySize}");
    如果输出的数值大于等于你所选算法要求的最低位数,即可正常生成Token。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:45:03