0

我有一个 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,其有效负载中的值:

Result after decrypting: eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJ2YWwiOiJzb21lX3RleHRfdG9fZW5jcnlwdCIsIm5iZiI6MTYxODkzNjk0NywiZXhwIjoxNjE4OTQwNTQyLCJpYXQiOjE2MTg5MzY5NDIsImlzcyI6Iklzc3VlciIsImF1ZCI6IkF1ZGllbmNlIn0.

然后我可以在jwt.io中解码以获得以下结果:

标题:{“alg”:“none”,“typ”:“JWT”}有效负载:{“val”:“some_text_to_encrypt”,“nbf”:1618936947,“exp”:1618940542,“iat”:1618936942,“iss ": "发行者", "aud": "受众" }

4

0 回答 0