【问题标题】:Verify JWT ES256 by Apple Notification C# [Sandbox]通过 Apple Notification C# [Sandbox] 验证 JWT ES256
【发布时间】:2022-11-30 12:46:32
【问题描述】:

我只想从 Apple Pay 服务器通知中验证 JWT。 您可以在 jwt.io 网站的屏幕截图上看到 JWT 结构。

因此,我从标头中的 x5c 集合中获取了第一个证书,并将其转换为对象 X509Certificate2,然后我获得了 ECDsa 格式的公钥并尝试验证令牌。

我是否在安全方面正确实施了这一点? 我应该在验证令牌后验证三个证书链吗?

我将不胜感激任何信息。

    private static Dictionary<string, string> GetClaimsByToken(string jwtToken)
    {
        var tokenHandler = new JwtSecurityTokenHandler();
        var token = tokenHandler.ReadJwtToken(jwtToken);
        token.Header.TryGetValue("x5c", out object x5c)
        var certeficatesItems = JsonConvert.DeserializeObject<IEnumerable<string>>(x5c.ToString());

        ValidateJWS(tokenHandler, jwtToken, certeficatesItems.First());

        return token.Claims.ToDictionary(c => c.Type, v => v.Value);
    }

    private static void ValidateJWS(JwtSecurityTokenHandler tokenHandler, string jwtToken, string publicKey)
    {
        var certificateBytes = Base64UrlEncoder.DecodeBytes(publicKey);
        var certificate = new X509Certificate2(certificateBytes);
        var eCDsa = certificate.GetECDsaPublicKey();

        TokenValidationParameters tokenValidationParameters = new TokenValidationParameters
        {
            ValidateAudience = false,
            ValidateLifetime = false,
            ValidateIssuer = false,
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new ECDsaSecurityKey(eCDsa),
        };

        tokenHandler.ValidateToken(jwtToken, tokenValidationParameters, out var securityToken);
    }

【问题讨论】:

    标签: c# jwt


    【解决方案1】:

    我不懂 C#,但今天我也遇到了这个问题。 似乎在验证 jwt 令牌之后,您必须验证证书链。您需要从 Apple 下载证书(根证书和中级证书)。您可以在苹果网站上找到这些证书:https://www.apple.com/certificateauthority/

    您需要下载它们并根据 x5c 标头中的内容验证它们。您可以在苹果开发者论坛上找到更多信息:https://developer.apple.com/forums/thread/691464

    【讨论】:

      【解决方案2】:

      我有同样的问题无法验证令牌。你解决这个问题了吗?

      【讨论】:

        猜你喜欢
        • 2019-10-30
        • 1970-01-01
        • 2020-03-31
        • 2020-11-27
        • 2017-01-15
        • 1970-01-01
        • 2022-07-24
        • 2018-06-01
        • 2017-01-27
        相关资源
        最近更新 更多