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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:32:47