我正在移动应用程序中实现 Apple 登录。登录成功后,我获得了ID token ,该ID token 的有效期为一天。
这是我登录后收到的示例 JWT token :
eyJraWQiOiJZdXlYb1kiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLmNsdWJiYWJsZSIsImV4cCI6MTYxODU4NTcyOCwiaWF0IjoxNjE4NDk5MzI4LCJzdWIiOiIwMDE4NTAuMzdkY2NmZGIxYzEyNDliY2E2NjE5YThkYjQ2MWFlNDkuMDQzMyIsImNfaGFzaCI6InVMTUV1eTRCaFozRVc1NXR1OXZtZGciLCJhdXRoX3RpbWUiOjE2MTg0OTkzMjgsIm5vbmNlX3N1cHBvcnRlZCI6dHJ1ZX0.e86uz4Qqu63mD0hHVdzBU3EfW0G-rDUprBiXkyPkvPIHIWPM1LyjpFs2GeoWAcdfUdmGww6C8SLLgk4iMKjK_yrpxiQBmbIzdCLBrwW4P8Y40llcrotyRuwyalfycyUJ8GP9yqjs5_R7yZlDd4oq0wrDNyXVjlbdGSfNUGqmXScBgXm3yCH0rD85GK0hX3XM-fA133Y5tj1DRALZhnw2GLy-6YEPBlqFE-cvu9aif9ajuDx3gPwp9AQ_nXP3pWjSg2G5eYx7UMpowXbAVoDSlhQVu_KJgxPsW61i50QnhykmeNA7LxA2iLQnlGk5VKzNlATub49SybUnmPSViO_Fbw
现在我想使用 System.IdentityModel.Tokens.Jwt
下提供的 JwtSecurityTokenHandler
验证此 token 。
我写了以下代码:
tokenHandler.ValidateToken(body.access_token, new TokenValidationParameters()
{
ValidateIssuer = true,
ValidIssuers = new List<string> { appleTokenIssuerName },
ValidateAudience = true,
ValidAudiences = new List<string> { appleAppClientId },
ValidateLifetime = false,
ValidateIssuerSigningKey = true,
IssuerSigningKey = // I want to pass signing key here but I'm not sure how can I do that.
}, out SecurityToken token);
Apple 签名 key 可作为 Json Web key 在此处设置 - https://appleid.apple.com/auth/keys
您能帮我找到将此 key 提供给 SecurityKey
参数的正确方法吗?
最佳答案
最简单的方法是使用 JsonWebKey
并将带有其中一个键的 JSON 传递给构造函数。一种更优雅的方法是创建一个解析器,它可以在需要时从 Apple 下载这些 key 。这还将使您能够在 Apple 旋转时创建后备和刷新键。
关于c# - Apple 登录 - 验证 ID token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67120225/