c# - Apple 登录 - 验证 ID token

标签 c# jwt openid-connect apple-sign-in

我正在移动应用程序中实现 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/

相关文章:

security - 将 jwt token 作为 url 的一部分传递是否不好?

security - HTTPS header 或帖子正文更安全吗?

azure-ad-b2c - 在 Azure AD B2C 中,我们如何在注册和登录时自动链接帐户?用户应该永远只有一个帐户

c# - 缺少必需的属性 : The og:url property is required, 但不存在

c# - 在运行时自定义菜单项快捷键

java - 如何使用公钥在本地验证 keycloak 访问 token

encoding - 编码JWT的原因是什么?

oauth-2.0 - 使用 ORY Hydra 进行 OpenID session 管理

用于在 BlogSpot 上写博客的 C# 语法荧光笔

c# - 用于显示大图像的 native WPF 与自定义 DirectX