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

使用A256GCM加密JWT遇IDX10617异常,求.NET 6.0适配方案

关于Microsoft.IdentityModel.JsonWebTokens 6.35.0中A256GCM加密JWT的问题解答

问题场景

使用Microsoft.IdentityModel.JsonWebTokens库6.35.0版本时,尝试用A256GCM算法加密JWT抛出异常,相关代码如下:

string token = handler.CreateToken(new SecurityTokenDescriptor
{
    Audience = "api1",
    Issuer = "https://test.com",
    Claims = new Dictionary<string, object> { { "sub", "811e790749a24d8a8f766e1a44dca28a" } },
    SigningCredentials = new SigningCredentials(privateSigningKey, SecurityAlgorithms.EcdsaSha256),
    EncryptingCredentials = new EncryptingCredentials(publicEncryptionKey, SecurityAlgorithms.RsaOAEP, SecurityAlgorithms.Aes256Gcm) // 引发异常的代码行
});

抛出的异常信息:

Microsoft.IdentityModel.Tokens.SecurityTokenEncryptionFailedException: 'IDX10617: Encryption failed. Keywrap is only supported for: 'A128CBC-HS256', 'A192CBC-HS384' and 'A256CBC-HS512'. The content encryption specified is: 'A256GCM'.'

问题解答

1. 解密使用该算法加密的JWE是否也会失败?

是的。当前6.35.0版本的库不支持A256GCM算法的密钥包装逻辑,首先加密环节就无法生成有效JWE;如果是其他合规工具生成的A256GCM格式JWE,用这个版本的库解密同样会失败,因为它没有实现该算法的解密逻辑。

2. .NET 6.0环境下,有没有可替代方案能使用A256GCM算法?

有两种可行方案:

  • 升级库版本:将Microsoft.IdentityModel.JsonWebTokens从6.35.0升级到6.40.0及以上版本,后续版本已经修复了这个限制,支持A256GCM等GCM类加密算法的密钥包装,升级后原代码即可正常运行。
  • 切换第三方JWT库:使用Jose-JWT库,它在.NET 6环境下原生支持A256GCM加密JWE,示例代码如下:
var payload = new Dictionary<string, object>
{
    { "sub", "811e790749a24d8a8f766e1a44dca28a" },
    { "iss", "https://test.com" },
    { "aud", "api1" }
};

// 生成A256GCM加密的JWE
string jwe = Jose.JWT.Encode(payload, publicEncryptionKey, Jose.JweAlgorithm.RSA_OAEP, Jose.JweEncryption.A256GCM);

// 解密JWE
var decodedPayload = Jose.JWT.Decode<Dictionary<string, object>>(jwe, privateEncryptionKey, Jose.JweAlgorithm.RSA_OAEP, Jose.JweEncryption.A256GCM);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:41:24