1. 通过请求IdentityServer4认证服务接口 /.well-known/openid-configuration/jwks 获取公钥

获取公钥结果
2. 获取token

获取token结果
3. 验证代码如下
static void Main(string[] args)
{
RSAParameters param = new RSAParameters()
{
// 参数为获取公钥返回结果的 e 自动
Exponent = FromBase64Url("AQAB"),
// 参数为获取公钥返回结果的 n 自动
Modulus = FromBase64Url("09DoMe-wZd3F_qR_zR7ahSFKWL2gHChuCe2FL4u-YL5nh_f29VICy7v1yDdVS8NJbTRJDQEK--iwfHaNqqutXTPmSxxs-Jrk6JEKImo1EN_xbR8pgsB5_jpfba0lbJEkTgjYn58x2uOSFl9vpuUCSkTMORevuX3bcjNO-tLYSbFYdPIf7NwysfxzHMmetJEkghYhcCafaH8mxdK7Z9W2apkBkh3_diBQw2hudWrkCb3x4JOBSSLSFOYTLHIkBjE4IJPomINAhUCSdarUkyd7kYianFy29CBGHIrPC2zpx5hQv5IiP31lyofXw2GJAQCEvEXsrd_gcE6wLxVqmCd5pQ"),
};
RSA rSA = RSA.Create(param);
// 第一个参数为返回token用 '.' 截取的第一段和第二段,即jwt token 头和数据部分
// 第二个参数为返回token用 '.' 截取的第三段,即jwt token签名
var ispass = rSA.VerifyData(UTF8Encoding.UTF8.GetBytes("eyJhbGciOiJSUzI1NiIsImtpZCI6IjZERUE3QzU4ODA0OTJFMDczRDA3OUY2NjUwMkNBNjI4IiwidHlwIjoiYXQrand0In0.eyJuYmYiOjE2MjYxNjk5MTAsImV4cCI6MTYyNjE3MzUxMCwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwIiwiYXVkIjoiYXBpMSIsImNsaWVudF9pZCI6InJvLmNsaWVudCIsInN1YiI6IjEiLCJhdXRoX3RpbWUiOjE2MjYxNjk5MTAsImlkcCI6ImxvY2FsIiwibmFtZSI6IkFsaWNlIiwid2Vic2l0ZSI6Imh0dHBzOi8vYWxpY2UuY29tIiwianRpIjoiMzlBMTI1MzdCMzlCN0Y3REMxMURERDlFRTM1NjZCMzUiLCJpYXQiOjE2MjYxNjk5MTAsInNjb3BlIjpbInNjb3BlMSJdLCJhbXIiOlsicHdkIl19"),
FromBase64Url("gl0kuBuiYukVizESG3XhUVnu-pZ-Ipru0brcJp1_8r6-6d3piuwpyfx1YXPdsuCvwcNvzwNpIV_JPeW_4gvExmi7siEyyuazH1gP1phuQryNT2j1aC_z5KvYtMAjQx0nOU2OtLDluw32UgCOejtD4kTPaxD0Kn39HXx-9g14OhdcRWtm5qTwEESCvQ3bOs9V_GnZlGkCvEX9NO-_KGNPrYQeRT84AO9h1lWJenBIsl7GGNrsgqiXQMIJzoo4m1jRylM-VNS0wID1tplx88L_1JvmYtBFZjWg51U6d1c22-a4CLWHwuRLlZkr26FXyELu6PtSQuOedFvsI54ZpAdpNw"),
HashAlgorithmName.SHA256,
RSASignaturePadding.Pkcs1);
Console.WriteLine(ispass);
Console.ReadLine();
}
public static byte[] FromBase64Url(string base64Url)
{
string padded = base64Url.Length % 4 == 0
? base64Url : base64Url + "====".Substring(base64Url.Length % 4);
string base64 = padded.Replace("_", "/").Replace("-", "+");
return Convert.FromBase64String(base64);
}
网友评论