如何使用Go语言生成Apple App Store Connect API所需的JWT?
使用Go语言生成Apple App Store Connect API的JWT授权令牌
前置准备
你需要先从App Store Connect获取以下核心信息:
- Issuer ID:在「用户和访问权限」→「密钥」页面顶部可获取
- Key ID:创建API密钥时生成的10字符标识
- P8格式私钥文件:创建API密钥后下载的
.p8文件,需妥善保管,禁止泄露
实现步骤
我们使用Go生态中常用的JWT处理库github.com/golang-jwt/jwt/v4来生成令牌,以下是完整可运行的示例代码:
package main import ( "fmt" "io/ioutil" "time" "github.com/golang-jwt/jwt/v4" ) func main() { // 替换为你的实际参数 issuerID := "你的Issuer ID" keyID := "你的Key ID" privateKeyPath := "./AuthKey_XXXXXX.p8" // 读取P8私钥文件 privateKeyBytes, err := ioutil.ReadFile(privateKeyPath) if err != nil { panic(fmt.Errorf("读取私钥文件失败: %v", err)) } // 解析ECDSA私钥 privateKey, err := jwt.ParseECPrivateKeyFromPEM(privateKeyBytes) if err != nil { panic(fmt.Errorf("解析私钥失败: %v", err)) } // 构造JWT声明 now := time.Now() claims := &jwt.RegisteredClaims{ Issuer: issuerID, IssuedAt: jwt.NewNumericDate(now), ExpiresAt: jwt.NewNumericDate(now.Add(20 * time.Minute)), // Apple要求过期时间不超过20分钟 Audience: []string{"appstoreconnect-v1"}, } // 创建并签名JWT token := jwt.NewWithClaims(jwt.SigningMethodES256, claims) token.Header["kid"] = keyID // 必须将Key ID加入Header tokenString, err := token.SignedString(privateKey) if err != nil { panic(fmt.Errorf("生成JWT失败: %v", err)) } fmt.Println("生成的JWT令牌:", tokenString) }
关键注意事项
- 过期时间限制:Apple要求JWT的
exp字段必须在签发时间的20分钟以内,超时令牌会被直接拒绝 - 签名算法强制:必须使用
ES256(ECDSA with SHA-256)算法,其他算法无法通过验证 - 私钥安全:绝对不要将私钥硬编码到代码中,也不要提交到版本控制系统,建议通过环境变量或安全配置中心加载
- Header必填项:Key ID必须放在JWT的Header中,否则App Store Connect无法匹配对应的密钥
内容的提问来源于stack exchange,提问作者Rahul Sinha
相关产品推荐
相关产品推荐

