【问题标题】:JWT Token Validation using public key使用公钥的 JWT 令牌验证
【发布时间】:2019-07-23 16:48:57
【问题描述】:

我正在尝试使用公钥验证我的 JWT,但出现如下所示的异常;你能帮我解决这个问题吗?

在下面调用时出错;

var certificate = new X509Certificate2(Convert.FromBase64String(key));

代码片段是:

var publicKey = "-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiHpDUH0AtBRNvqEblOeVyviJZ 4UV2LwGiWrSIysK4sL3mToAgDz11MWvo+yycMmwjCiFAQgF4vspzTAexJ6+ZIvbi WRGdJiaqqja2xMRZkDJuJF2rN5CrbNhKrmyM1+weud2jhIHXdxkbJb89oRrbOvfh yWuY8J7pPFiTnzH9sQIDAQAB -----END PUBLIC KEY-----";

                var key =
                    "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiHpDUH0AtBRNvqEblOeVyviJZ 4UV2LwGiWrSIysK4sL3mToAgDz11MWvo+yycMmwjCiFAQgF4vspzTAexJ6+ZIvbi WRGdJiaqqja2xMRZkDJuJF2rN5CrbNhKrmyM1+weud2jhIHXdxkbJb89oRrbOvfh yWuY8J7pPFiTnzH9sQIDAQAB";

                var token = "eyJraWQiOiIwZTIwZjU0NC00ZmQzLTQ4YTYtOGUzMi01NWUwNTJiMDI2ODIiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJzdWJqZWN0IiwiYXVkIjoiYXVkaWVuY2UxIiwibWVtYmVySW5mbyI6eyJNZW1iZXJzaGlwTnVtYmVycyI6WyIwMzUzNzUzMjkwIiwiMDM4MTQxMDI1OCJdLCJMaWZldGltZUlkcyI6WyIzMzUzNzUzMjkwMDEiXSwiQm9zc0lkcyI6WyIxMjM0NTY3OCIsIjE2NTI0MTUyIiwiMTg5OTEyMzQiXSwiQ2hlZXJzSWRzIjpbIjU2NzgxMjM0Il0sIlVzZXJDb250ZXh0IjoiR0JCVVBBR1JPVVBcXFNWQ19zd2lmdHdlYnRlc3QiLCJSZXF1ZXN0UGFyYW1ldGVycyI6bnVsbH0sImlzcyI6Imh0dHBzOi8vYnVwYWRldi1xYS5hcGlnZWUubmV0IiwiZXhwIjoxNTMyMjA2NDc1LCJpYXQiOjE1MzIxNzc2NzUsImp0aSI6IjZlOThmOTU2LTdlZTUtNGQxYy1iN2M4LWUwNGNlNzlkZjZjZSJ9.jC7-bVSaxAGNLk2d--8fksH_9PKgo3TgIALynlwkUOC3AE79MrLaqCRGp0yT2wqfFJ5kRGJFyUu_EP3_3YE6d4XS5yhghaFrkewwUHt4eV56qYOFf4RIC_CiX_OcK8vXSEpeMt6jKN-f7iDP6fo2NqmYH07_ZJM0LXc7S5WAQDQ";

                var certificate = new X509Certificate2(Convert.FromBase64String(key));
                var validationParameters = new TokenValidationParameters
                {
                    IssuerSigningTokens = new[] { new X509SecurityToken(certificate) }
                };
                SecurityToken validatedSecurityToken = null;
                var handler = new JwtSecurityTokenHandler();
                try
                {
                    handler.ValidateToken(token, validationParameters, out validatedSecurityToken);
                }
                catch (Exception ex)
                {

                }

【问题讨论】:

  • 你得到什么错误?

标签: c# jwt x509certificate2


【解决方案1】:

我猜对你来说有点晚了,但对于其他处理这个问题的人来说:

我猜错误是:CryptographicException: Object not found

这是因为您尝试仅使用公钥初始化完整的 X509Certificate。这是其中的一部分,但缺少许多其他内容,例如到期日期和主题。

您必须使用以下行指示的完整证书初始化 X509Certificate2,但在将它们从 Base64 转换之前将其删除,以便仅对内容进行解码:

-----BEGIN CERTIFICATE-----
(content)
-----END CERTIFICATE----- 

【讨论】:

    猜你喜欢
    • 2019-08-25
    • 2018-11-11
    • 2018-01-06
    • 2020-01-25
    • 2020-01-18
    • 2018-09-15
    • 2020-12-27
    • 1970-01-01
    • 2019-06-23
    相关资源
    最近更新 更多