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

Apple内购签名验证失败:SHA256withECDSA算法验证令牌签名无效

解决Apple内购签名验证异常:SignatureVerificationException (SHA256withECDSA无效)

当使用Apple的app-store-server-library-java验证内购交易时,遇到SignatureVerificationException: The Token's Signature resulted invalid when verified using the Algorithm: SHA256withECDSA异常,可按以下步骤排查解决:

1. 确认根证书配置正确

  • 优先使用库的默认证书加载逻辑:SignedDataVerifier的构造方法若不传入rootCAs参数,会自动加载Apple官方的根证书链,避免手动导入时出现证书遗漏、损坏或不匹配的问题。
  • 若必须手动导入,确保包含所有Apple官方根证书(Apple Root CA - G3、Apple Root CA - G2、Apple Intermediate Certificate等),且证书文件无损坏、读取路径正确。

2. 环境与Token必须匹配

  • 沙箱环境生成的交易Token,必须对应Environment.SANDBOX;生产环境Token对应Environment.PRODUCTION,二者不能混用。
  • 可解码JWT Token查看payload中的environment字段,确认和代码配置一致。

3. Bundle ID完全匹配

  • 代码中配置的bundleId必须与App Store Connect中注册的Bundle ID完全一致,包括大小写、特殊字符,任何差异都会导致验证失败。

4. 确保Token完整有效

  • 检查signedTransaction是完整的JWT字符串,无截断、篡改情况。可使用本地JWT库解析Token,查看payload中的bundleId、transactionId等字段是否符合预期。

5. 升级库到最新版本

  • 旧版本的app-store-server-library-java可能存在证书兼容或签名逻辑的bug,确保使用官方最新版本。

修改后的示例代码(使用默认根证书)

fun verifyCertificate() {
    val bundleId = "my bundle id"
    val environment = Environment.SANDBOX

    // 依赖库自动加载官方根证书,无需手动传入
    val signedDataVerifier = SignedDataVerifier(bundleId, null, environment, false)

    val signedTransaction = "eyJhbGci..."
    try {
        val transaction = signedDataVerifier.verifyAndDecodeTransaction(signedTransaction)
        println(transaction)
    } catch (e: VerificationException) {
        e.printStackTrace()
    }
}

内容的提问来源于stack exchange,提问作者nayan dhabarde

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:13:28