调用Apple Sign In REST API持续返回400错误,Node.js实现问题求助
Apple Sign In 调用鉴权令牌接口400错误排查方案
以下是你的代码里最容易触发该错误的几个问题点,按出现概率从高到低排列:
- JWT audience参数配置错误
Apple官方要求生成client_secret的JWT payload里audience字段必须固定为https://appleid.apple.com,请检查你的APPLE_DOMAIN变量是否是该值,大部分开发者会在这里误填自己的业务域名导致签名无效。 - 苹果私钥格式错误
ES256算法对私钥格式要求非常严格,请确认signWithApplePrivateKey变量完整保留了私钥的全部内容,包括开头的-----BEGIN PRIVATE KEY-----和结尾的-----END PRIVATE KEY-----,还有内部的换行符也不能缺失,不要删除或修改任何私钥自带的格式字符。 - authorization_code无效
Apple返回的授权码有效期只有5分钟,且只能使用一次,如果你的code是缓存复用的、或者前端传到后端的过程中被截断、或者超过有效期调用接口,都会返回400。 - redirect_uri不匹配
你传的APPLE_REDIRECT_URI必须和前端发起Apple登录请求时携带的redirect_uri完全一致,包括协议头(http/https)、路径、末尾斜杠、查询参数,同时该地址必须已经在苹果开发者后台对应Service ID的「已许可重定向URI」列表中完成配置。 - Service ID配置错误
请确认APPLE_SERVICE_ID是你在苹果开发者后台创建的Sign In With Apple服务对应的Service ID标识符,不要误填为Team ID、Bundle ID或者Key ID。
建议你先添加错误响应打印逻辑,拿到Apple返回的具体错误码再精准定位,示例代码如下:
export const getAppleToken = async (code: string) => { try { return await axios.post( 'https://appleid.apple.com/auth/token', qs.stringify({ grant_type: 'authorization_code', code, client_secret: createSignWithAppleSecret(), client_id: APPLE_SERVICE_ID, redirect_uri: APPLE_REDIRECT_URI, }), { headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, } ) } catch (e) { // 打印Apple返回的具体错误信息,常见错误有invalid_client、invalid_grant等 console.log('Apple接口错误详情:', e.response?.data) throw e } }
内容的提问来源于stack exchange,提问作者Wookiecookie
相关产品推荐
相关产品推荐

