[英]JWE Decryption does not work for me with jose jwt
我在 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 的建議
它似乎對我不起作用。 :(
我發現解碼確實有效。 但我需要使用公鑰進一步解密數據。
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'。\n捕獲的異常:\n ''。\ntoken: {"IDX10501: 簽名驗證失敗。 無法匹配鍵:\nkid: 'C6Q-0bsHc4qyNq6MBEtftpB-DsTHNth4ZnlrFPUQ8PI'。\n捕獲的異常:\n ''。 \ntoken: '{\"alg\":\"RS256\",\"kid\":\"C6Q-0bsHc4qyNq6MBEtftpB-DsTHNth4ZnlrFPUQ8PI\"}.{\"uinfin\":{\"lastupdated\":\" 2019-11-13\",\"來源\":\"1\",\"分類\":\"C\",\"值\":\"S9812381D\"}....
但是,我可以在錯誤消息中看到已解密的有效負載。 我被困在如何處理這個 Unable to match key 錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.