问题描述
我有一个 ASP.Net 应用程序,我在其中使用这个库:https://github.com/dvsekhvalnov/jose-jwt 来创建一个加密的 JWT,如下所示:
JWT.Encode("some_text_to_encrypt",publicKey,JweAlgorithm.RSA_OAEP_256,JweEncryption.A256CBC_HS512);
publicKey 只是我从公共 JWK 创建的 RSA 密钥。
我想知道是否有办法通过使用普通的 .Net Framework 而不是这个库来生成相同格式的加密 JWT。 我曾尝试使用 Microsoft.IdentityModel.Tokens 和 System.IdentityModel.Tokens 命名空间,例如:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
RSAParameters keyParams = new RSAParameters()
{
Modulus = FromBase64Url(jsonWebKey["n"].ToString()),Exponent = FromBase64Url(jsonWebKey["e"].ToString())
};
rsa.ImportParameters(keyParams);
var publicKey = new RsaSecurityKey(rsa);
var tokenDescriptor = new SecurityTokenDescriptor
{
Audience = "Audience",Expires = DateTime.UtcNow + TimeSpan.FromHours(1),Issuer = "Issuer",IssuedAt = DateTime.UtcNow,Claims = new Dictionary<string,object> { { "val","some_text_to_encrypt" } },EncryptingCredentials = new EncryptingCredentials(publicKey,SecurityAlgorithms.RsaOAEP,SecurityAlgorithms.Aes256CbcHmacSha512),};
var handler = new JwtSecurityTokenHandler();
jwt = handler.CreateEncodedJwt(tokenDescriptor);
但是我意识到这个方法的输出与jose-jwt库的Encode方法产生的输出格式不同。 我是不是遗漏了什么,或者这不是在 .Net 中创建相同的加密 JWT 的方法?
当我尝试使用相同的 jose-jwt 库来解密上面生成的 JWT 时,而不是获取解密的有效负载(“some_text_to_encrypt”),我得到了另一个 JWT,其有效负载中有该值:
解密后的结果: eyJhbGciOiJub25lIiwidhlwIjoiSldUIn0.eyJ2YWwiOiJzb21lX3RleHRfdG9fZW5jcnlwdCIsIm5iZiI6MTYxODkzNjk0NywiZXhwIjoxNjE4OTQwNTQyLCJpYXQiOjE2MTg5MzY5NdisImlzcyI6Iklzc3VlciIsImF1ZCI6IkF1ZGllbmNlIn0
然后我可以在 jwt.io 中解码以获得以下结果:
标题: { "alg": "无",“类型”:“JWT” } 有效载荷: { "val": "some_text_to_encrypt",“NBF”:1618936947, “exp”:1618940542, “iat”:1618936942, "iss": "发行人","aud": "观众" }
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)