C#使用JOSE库将JSON加密为A256KW+A256GCM的JWE Token报错如何解决
C# JOSE库JWE加密报错修复方案
错误原因
- 你选择的A256KW密钥加密算法,在JOSE库的
JweRecipient构造逻辑中要求密钥参数为byte[]类型,你直接传入了字符串类型的密钥,触发类型校验失败。 - 附加要求:A256KW算法要求密钥长度必须为256位(即32字节),你示例中的
"Some Key"长度不符合要求,实际使用时需要替换为符合长度的密钥,否则会触发后续的长度校验错误。 - 错误提示
AesKeyWrap management algorithm expects key to be byte[] array.的中文翻译为:AesKeyWrap密钥管理算法要求传入的密钥为字节数组类型。
修复代码
using System.Text; using Jose; using Newtonsoft.Json; // 注意:A256KW要求密钥长度为32字节,实际使用请替换为你自己的安全密钥 string keyStr = "你需要使用长度为32个字符的安全密钥xxxxxxxxxxxx"; // 把字符串密钥转为字节数组 byte[] keyBytes = Encoding.UTF8.GetBytes(keyStr); // 你的业务payload对象,这里替换为你自己的anyPayJson var anyPayJson = new { page = "2", sc = "http://dummy.com/" }; // 序列化payload为JSON字符串 string payloadJson = JsonConvert.SerializeObject(anyPayJson); // 加密时传入字节数组类型的密钥 string token = JWE.Encrypt( payloadJson, new[] { new JweRecipient(JweAlgorithm.A256KW, keyBytes, null) }, JweEncryption.A256GCM );
冗余代码说明
你原有代码中定义的securityKey和JwtPayload类型的payload变量没有被实际使用,可以直接删除,JOSE库的JWE.Encrypt方法不需要依赖Microsoft.IdentityModel下的安全密钥对象。
内容的提问来源于stack exchange,提问作者Kryp2 Gemini
相关产品推荐
相关产品推荐

