微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法使用 .Net 框架创建加密的 JWT 作为使用 jose-jwt 之类的库的替代方法?

如何解决有没有办法使用 .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.TokensSystem.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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?