c# 如何将 JWK 转换为 RsaSecurityKey

c# how to convert a JWK to a RsaSecurityKey

我正在尝试根据 public 密钥验证签名,并且我使用 RSACryptoproviders 等进行了验证。 我设置了 public 密钥(以 PEM 格式导入密钥,读取 rsa 参数,然后创建 RsaSecurityKey) 一切正常,但是现在客户要我不仅支持PEM格式,还要支持de JWK格式。

当我 google 时,我发现有 100 个网站将 PEM 转换为 JWK(甚至还有一个 JwkConvert class),但它只有一种方式。

我如何在 C# 中反过来做?这样我就可以将 JWK 转换为 RsaSecurityKey?

我发现了这个 post: 但我希望我不必自己写所有这些..

此外,我已经准备好使用 BouncyCastle 加密库(我用它来导入 PEM 格式)

我希望我可以从 JWK 中检索 RsaParameters,但我只是一个加密用户,这些字母什么也没有告诉我。

提供更多信息,这是我的 JWK:

{"keys":[{"kid":"OEbwVQck6qGhsCWiYenQowD9wHic7BtS-LALJEna-og","kty":"RSA","alg":"RS256","use":"sig","n":"w1Y2AZWK8k0gWPQv5Q_GnNHna8kD_TcZhB0_qM8cQ8ABJUiynLjS52tVLeo9NQnIBiiGDDby_bmAkJnxUtzanpGo4wnsvckjHFiThZSNnMpU_GIRFvhjyfPcnvzLhuvmd_gX9iDQmpJk2nbBoatkKwnaiAl0VQ8jP85DxQYsjlxwrKhhVqIe4EYEazq3zTpKOKWu4QSQYE74lvWbyqEmSPG32V2Te7L7BDVAgqsQhAqx0mRpMHcJPtgX0AsM5iQrxUow51Y22shd6pgLkgvbc8LfXKWHAUgeg20JBBQc_gReek1h0qToDY-hWdxLpGBOLeWUKoUVAzAj2gXgTER2TQ","e":"AQAB","x5c":["MIIClTCCAX0CBgFz4hEUBTANBgkqhkiG9w0BAQsFADAOMQwwCgYDVQQDDANJUkQwHhcNMjAwODEyMDk0NTM2WhcNMzAwODEyMDk0NzE2WjAOMQwwCgYDVQQDDANJUkQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDVjYBlYryTSBY9C/lD8ac0edryQP9NxmEHT+ozxxDwAElSLKcuNLna1Ut6j01CcgGKIYMNvL9uYCQmfFS3NqekajjCey9ySMcWJOFlI2cylT8YhEW+GPJ89ye/MuG6+Z3+Bf2INCakmTadsGhq2QrCdqICXRVDyM/zkPFBiyOXHCsqGFWoh7gRgRrOrfNOko4pa7hBJBgTviW9ZvKoSZI8bfZXZN7svsENUCCqxCECrHSZGkwdwk+2BfQCwzmJCvFSjDnVjbayF3qmAuSC9tzwt9cpYcBSB6DbQkEFBz+BF56TWHSpOgNj6FZ3EukYE4t5ZQqhRUDMCPaBeBMRHZNAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAHrHDQWMgXLiumpq3JAKDjH+8bf6VRvG40xNRz6H0Xg3pdC+ME8Jqtl49z2oXLJPCDKqyX2Lv9YRn0tFP6VYkBLQp1BBg7j2y8frkMrhzoRt28dhMfyMtdFgOhykwaPl6V0ASmd/iMyjK52XYjyUj+kVFhBNe1dA9F5Ftw1tyfwY5EFWbLyoBLzH+oZxbZzWIdFdSE9hhxOsioIaOOfrpBkincvQOYf/0RJS9jrVM2bRNah0HmxrdkiZNwvszm2uHPVNzgNxiK1iNqTHztbNKm9uO7diziJ4I4f2fesSMEdZG8AZ52NwP1ZVcTE+ZXcOE/+NhyAVf+4SP4abpqzi8+Q="],"x5t":"oNVqosVxKIQ8TW3MGZzM8_2AIJQ","x5t#S256":"_VULg4UAhXE8V7vJFJDTUYeoH0FL2pbbK0Lc8-3CK3k"}]}

当我从中创建 Microsoft JsonWebKey 对象时,'N' 和 'E' 参数为空('D'、'DP'、'DQ'、'P'、'Q'、'QI'、'X' 和 'Y')

因此我无法创建 RsaParameters...

事实证明这是我这边的一个 oopsie.. 我发布的字符串是一个 jsonWebKeySET 而不仅仅是一个 jsonwebkey。我把它放在 JsonWebKey 的构造函数中 class 并且没有得到任何解析错误(grrr microsoft)所以假设它是正确的。

原来我不得不使用 JsonWebKeySet() class。 @jps 评论在那之后帮助了很多。 (不知道如何评价你)