JWE解密不适用于jose jwt

时间:2019-11-19 06:26:27

标签: c# encryption jwe

我正在C#上使用Jose-Jwt许可证,并且具有以下代码:

private string DecodeJWT(string token)
{
    string privateKeyPath = ConfigurationManager.AppSettings["PrivateKey"];
    var privateRSA = RsaProviderFromPrivateKeyInPemFile(privateKeyPath);           
    string json = Jose.JWT.Decode(token,privateRSA, Jose.JweAlgorithm.RSA_OAEP, Jose.JweEncryption.A256GCM);
    return json;
}


private RSACryptoServiceProvider RsaProviderFromPrivateKeyInPemFile(string privateKeyPath)
{
     using (TextReader privateKeyTextReader = new StringReader(System.IO.File.ReadAllText(privateKeyPath)))
     {
         PemReader pr = new PemReader(privateKeyTextReader);
         RSAParameters rsaParams = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)pr.ReadObject());
         RSACryptoServiceProvider csp = new RSACryptoServiceProvider();
         csp.ImportParameters(rsaParams);
         return csp;
     }
}

但是我没有设法解密加密的字符串。解码后返回相同的加密字符串。谁能告诉我我做错了什么?实际上,我正在遵循此Q/A

的建议

它似乎对我不起作用。 :(

1 个答案:

答案 0 :(得分:0)

我发现解码确实有效。但是我需要使用公钥进一步解密数据。

RSACryptoServiceProvider publicRSA = RsaProviderFromPublicKeyInPemFile(publicKeyPath);

        var validationParameters = new TokenValidationParameters()
        {
            RequireExpirationTime = false,
            RequireSignedTokens = true,
            ValidateAudience = false,
            ValidateIssuer = false,
            IssuerSigningKey = new RsaSecurityKey(publicRSA)
        };

        IdentityModelEventSource.ShowPII = true;
        var result = handler.ValidateToken(decryptedresult, validationParameters, out var validatedToken);

但是系统抛出{“ IDX10501:签名验证失败。无法匹配密钥:\ nkid:'C6Q-0bsHc4qyNq6MBEtftpB-DsTHNth4ZnlrFPUQ8PI'。\ nExceptions catched:\ n”。\ ntoken:{” IDX10501:签名验证失败了无法匹配密钥:\ nkid:'C6Q-0bsHc4qyNq6MBEtftpB-DsTHNth4ZnlrFPUQ8PI'。\ n捕获到异常:\ n”。 \ ntoken:'{\“ alg \”:\“ RS256 \”,\“ kid \”:\“ C6Q-0bsHc4qyNq6MBEtftpB-DsTHNth4ZnlrFPUQ8PI \”}。{\“ uinfin \”:{\“ lastupdated \”:\“ 2019-11-13 \“,\”源\“:\” 1 \“,\”分类\“:\” C \“,\”值\“:\” S9812381D \“} ....

但是我可以在错误消息中看到解密的有效负载。我被困在如何处理无法匹配键错误的问题上。