美文网首页
C# 验证IdentityServer4返回token是否合法

C# 验证IdentityServer4返回token是否合法

作者: Messix_1102 | 来源:发表于2021-07-13 18:19 被阅读0次

    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);
            }
    

    相关文章

      网友评论

          本文标题:C# 验证IdentityServer4返回token是否合法

          本文链接:https://www.haomeiwen.com/subject/scpspltx.html