You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Identity Server 4生成的JWK转换为PEM格式公钥

如何将Identity Server4发布的RSA JWKS转换为jwt.io可识别的PEM格式公钥

我有一组Identity Server 4发布的RSA512算法JWKS,用于客户端校验Token签名。现在我想在jwt.io站点上也完成签名校验,但不知道如何将JWK参数转换为对应格式的公钥:
JWKS参数示例
目标公钥格式示例:

-----BEGIN PUBLIC KEY-----
MIIBCgKCAQEA+xGZ/wcz9ugFpP07Nspo6U17l0YhFiFpxxU4pTk3Lifz9R3zsIsu
ERwta7+fWIfxOo208ett/jhskiVodSEt3QBGh4XBipyWopKwZ93HHaDVZAALi/2A
+xTBtWdEo7XGUujKDvC2/aZKukfjpOiUI8AhLAfjmlcD/UZ1QPh0mHsglRNCmpCw mwSXA9VNmhz+PiB+Dml4WWnKW/VHo2ujTXxq7+efMU4H2fny3Se3KYOsFPFGZ1TN
QSYlFuShWrHPtiLmUdPoP6CV2mML1tk+l7DIIqXrQhLUKDACeM5roMx0kLhUWB8P
+0uj1CNlNN4JRZlC7xFfqiMbFRU9Z4N6YwIDAQAB
-----END PUBLIC KEY-----
转换后的公钥需要可在jwt.io站点用于Token校验。我起初找到的相关实现库是付费的,因此想找免费的实现方案。


踩坑记录

我尝试了如下代码片段:

using var httpClient = new HttpClient();
var json = httpClient.GetStringAsync(
                    "http://..../.well-known/openid-configuration/jwks").GetAwaiter()
                .GetResult();

var jsonWebKeySet = new JsonWebKeySet(json);

var jsonWebKey = jsonWebKeySet.Keys.First();

var rsaProvider = new RSACryptoServiceProvider();
rsaProvider.ImportParameters(new RSAParameters
{
     Modulus = Base64Url.Decode(jsonWebKey.N),
     Exponent = Base64Url.Decode(jsonWebKey.E)
});
                
var publicKey = Base64Url.Encode(rsaProvider.ExportRSAPublicKey());

我使用了Jose库的Base64Url类,但得到的是Base64Url格式的公钥,包含_和-字符。我尝试将这两个字符分别替换为/和+,但校验时还是返回Invalid Signature,使用付费库时则校验正常,不清楚哪里操作有误。


最终解决方案

我将代码最后一行修改为:

var publicKey = Convert.ToBase64String(rsaProvider.ExportSubjectPublicKeyInfo());

之后对生成的公钥内容按64字符一行的规则做换行处理,再添加-----BEGIN PUBLIC KEY-----头部和-----END PUBLIC KEY-----尾部,就可以在jwt.io站点上正常完成JWT校验了。

内容的提问来源于stack exchange,提问作者pampua84

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:39:04