You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core集成Sign In With Apple多应用invalid_client错误

ASP.NET Core 多应用集成Sign In With Apple返回invalid_client解决方案

问题本质

苹果不存在“同一时间仅允许一个应用/一个密钥生效”的平台限制,你遇到的问题来自两个SIWA的隐性规则和配置偏差:

  • Sign In With Apple的签名私钥是开发者账号(Team)维度的全局资源,不是绑定到单个Service ID的独立资源。你之前撤销旧密钥后新应用才正常工作的现象,本质是撤销操作强制刷新了苹果端的公钥缓存,不是密钥之间互斥。正常新创建的密钥最多等待10分钟就会在全节点同步生效,不需要删除旧密钥。
  • 苹果校验client_secret时会严格匹配JWT内的iss、sub字段和签名密钥的归属关系,任何一项不匹配都会直接返回无详情的invalid_client错误,不会返回具体的错误原因。

具体修复步骤

  • 不需要为每个Service ID单独创建签名私钥。单个Team下最多可以创建3个启用SIWA权限的私钥,所有同Team下的App ID、Service ID都可以共用这组私钥完成签名,完全符合苹果官方的密钥轮换要求。
  • 逐个核对两个应用的配置参数,三个核心值不能串用:
    • JWT的iss字段:固定填写开发者账号的10位Team ID,同账号下所有应用该值完全一致
    • JWT的sub字段/OpenIdConnect配置的ClientId:填写当前应用对应的Service ID,两个应用分别使用自己的Service ID,不能混用
    • 签名私钥:两个应用可以使用同一组私钥生成client_secret,不需要单独创建
  • 修正现有client_secret生成逻辑的时钟偏移问题:苹果对JWT的nbf(生效时间)字段仅允许最多5分钟的时钟容错,你当前代码设置的NotBefore = now.AddMinutes(-60)偏移过大,会直接被判定为无效token,将该行修改为NotBefore = now即可。修正后的代码如下:
public static string CreateNewToken(string teamId, string serviceId, string privateKey)
{
    const string aud = "https://appleid.apple.com";
    var now = DateTime.UtcNow;

    var ecdsa = ECDsa.Create();
    ecdsa?.ImportPkcs8PrivateKey(Convert.FromBase64String(privateKey), out _);

    var handler = new JsonWebTokenHandler();
    return handler.CreateToken(new SecurityTokenDescriptor
    {
        Issuer = teamId,
        Audience = aud,
        Claims = new Dictionary<string, object> { { "sub", serviceId } },
        Expires = now.AddMinutes(60),
        IssuedAt = now,
        NotBefore = now,
        SigningCredentials = new SigningCredentials(new ECDsaSecurityKey(ecdsa), SecurityAlgorithms.EcdsaSha256)
    });
}
  • 额外校验项:每个Service ID的配置页中,必须将当前应用对应的完整回调地址(包含/signin-apple路径)添加到Return URLs列表中,苹果会严格校验回调地址和Service ID的绑定关系,地址不匹配也会返回invalid_client错误。

验证说明

配置修正后不需要撤销任何已创建的有效私钥,等待最多10分钟让苹果端缓存同步完成,两个应用就可以同时正常走通SIWA授权流程,支持独立做密钥轮换,不会出现互斥问题。

内容的提问来源于stack exchange,提问作者Anton Koposov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 02:45:51