美文网首页
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