簡體   English   中英

通過 Apple 通知 C# [沙盒] 驗證 JWT ES256

[英]Verify JWT ES256 by Apple Notification C# [Sandbox]

我只想從 Apple Pay 服務器通知中驗證 JWT。 您可以在jwt.io網站的屏幕截圖上看到JWT結構。

因此,我從 header 中的 x5c 集合中獲取了第一個證書,並將其轉換為 object 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);
    }

來自 Apple 的智威湯遜

我不知道 C# 但今天我也偶然發現了這個問題。 似乎在驗證 jwt 令牌之后,您必須驗證證書鏈。 您需要從 Apple 下載證書(根證書和中級證書)。 您可以在蘋果網站上找到這些證書: https://www.apple.com/certificateauthority/

您需要下載它們並根據 x5c 標頭中的內容驗證它們。 您可以在蘋果開發者論壇上找到更多信息: https://developer.apple.com/forums/thread/691464

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM