如何获取Apple SignIn正确公钥?jwks-client无返回问题咨询
解决Apple Sign In获取JWKS公钥为空的问题
我之前集成Apple Sign In验证令牌的时候也踩过这个坑!你需要使用Apple官方指定的JWKS端点才能正确获取到公钥,具体的URI是:https://appleid.apple.com/auth/keys
为什么之前获取不到公钥?
Apple的ID验证服务会通过这个官方端点发布用于验证令牌的所有公钥,每个公钥对应唯一的kid(密钥ID)。如果填错了URI,自然拿不到有效的JWKS集合,也就返回空了。
修改后的完整代码示例
const kid = JSON.parse(header).kid; const jwksClient = require('jwks-client'); // 填入正确的Apple JWKS URI const client = jwksClient({ jwksUri: 'https://appleid.apple.com/auth/keys' }); client.getSigningKey(kid, (err, key) => { if (err) { console.error('获取签名密钥失败:', err); return; } // 提取PEM格式的公钥 const signingKey = key.getPublicKey(); console.log('获取到的公钥:', signingKey); // 这里可以用signingKey来验证Apple ID令牌的签名 });
额外提示
- 记得确保你的
kid是从Apple返回的ID令牌的header中正确解析出来的,格式错误的kid也会导致找不到对应公钥。 - 可以缓存这些公钥,不用每次验证都请求Apple的端点,提升性能同时避免触发限流。
内容的提问来源于stack exchange,提问作者user14412785
相关产品推荐
相关产品推荐

