如何解决有没有办法使用 .Net 框架创建加密的 JWT 作为使用 jose-jwt 之类的库的替代方法?
我有一个 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 举报,一经查实,本站将立刻删除。