![](/img/trans.png)
[英]Using ES256 algorithm with jwt-dotnet for Apple AppStore
[英]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);
}
我不知道 C# 但今天我也偶然發現了這個問題。 似乎在驗證 jwt 令牌之后,您必須驗證證書鏈。 您需要從 Apple 下載證書(根證書和中級證書)。 您可以在蘋果網站上找到這些證書: https://www.apple.com/certificateauthority/ 。
您需要下載它們並根據 x5c 標頭中的內容驗證它們。 您可以在蘋果開發者論壇上找到更多信息: https://developer.apple.com/forums/thread/691464
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.