有没有办法使用 .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.JdbcOdbc...