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

如何使用Ruby生成App Store API访问所需JWT令牌

Ruby 生成 App Store Server API 可用 JWT 令牌

苹果文档里提到的JWT结构遵循标准JWT规范,组合逻辑是通用的:将Base64URL编码后的header、Base64URL编码后的payload用.拼接,再用ES256算法对拼接后的字符串做签名,签名结果做Base64URL编码后,和前两部分再用.拼接,就是最终可用的访问令牌。实际开发不需要手动实现这个流程,直接用Ruby生态成熟的JWT库即可。

前置准备

先从App Store Connect拿到以下必填参数:

  • 10位长度的Issuer ID(在「用户与访问-密钥」页面获取)
  • App Store Connect API密钥对应的10位Key ID
  • 创建API密钥时下载的.p8格式私钥文件
  • 目标App的Bundle ID

实现步骤

  1. 先安装JWT依赖库
gem install jwt
  1. 替换代码中对应配置参数,运行即可生成符合要求的令牌:
require 'jwt'
require 'time'

# ========== 替换为你自己的配置 ==========
ISSUER_ID = "你的Issuer ID"
KEY_ID = "你的API密钥Key ID"
BUNDLE_ID = "你的App Bundle ID"
PRIVATE_KEY_PATH = "./AuthKey_#{KEY_ID}.p8" # p8私钥文件本地路径
# ======================================

# 加载EC格式私钥
private_key = OpenSSL::PKey::EC.new(File.read(PRIVATE_KEY_PATH))

# 构造JWT头
jwt_header = {
  alg: "ES256",
  kid: KEY_ID,
  typ: "JWT"
}

# 构造JWT载荷
jwt_payload = {
  iss: ISSUER_ID,
  iat: Time.now.to_i, # 令牌签发时间
  exp: Time.now.to_i + 3500, # 过期时间最多可设3600秒,这里留100秒冗余规避时间偏移问题
  aud: "appstoreconnect-v1",
  bid: BUNDLE_ID
}

# 生成最终可用令牌
app_store_server_token = JWT.encode(jwt_payload, private_key, "ES256", jwt_header)

puts "生成的有效访问令牌:\n#{app_store_server_token}"

踩坑提示

  • 不要自己手写编码、签名逻辑,ES256签名的DER格式转换很容易出错,成熟库已经处理了所有兼容问题
  • 令牌有效期绝对不能超过3600秒,否则接口会直接返回401鉴权失败,建议设为3500秒以内,避免本地服务器和苹果服务器时间不同步导致的令牌提前失效
  • .p8私钥文件请妥善存储,不要硬编码在代码里、不要提交到公共代码仓库,生产环境建议通过环境变量或者密钥管理服务加载
  • 生成的令牌同时适用于沙箱和正式环境的App Store Server API接口,不需要为不同环境单独生成

内容的提问来源于stack exchange,提问作者Peter Van de Put

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:12:31