为了账号安全,请及时绑定邮箱和手机立即绑定

ItunesConnectApi JWT

ItunesConnectApi JWT

Go
繁星点点滴滴 2023-07-26 19:40:16
我正在尝试使用 App Store Connect API。根据文档,首先我尝试生成 JWT 令牌。golang 中的代码如下:  package main    import (        "fmt"        "io/ioutil"        "log"        "time"        "github.com/dgrijalva/jwt-go"    )var iss = "xxxxxxxxxxxxxxxxxxxxx"var kid = "xxxxx"func main() {        bytes, err := ioutil.ReadFile("AuthKey.p8")        if err!=nil {            fmt.Println(err)        }        token := jwt.NewWithClaims(jwt.SigningMethodES256, jwt.MapClaims{            "iss": iss,            "exp": time.Now().Unix()+6000,            "aud": "appstoreconnect-v1",        })        token.Header["kid"] = kid        tokenString, err := token.SignedString(bytes)        if err != nil {            log.Fatal(err)        }        fmt.Println(tokenString)    }AuthKey.p8 - 来自https://appstoreconnect.apple.com/access/api的 p8 私钥似乎 jwt lib 无法在签名密钥上使用此 p8,所以我收到错误: key is of invalid type也许有人已经遇到了同样的问题?或者有其他语言的例子吗?UPD: 在此建议之后,我将代码更新为:func main() {    bytes, err := ioutil.ReadFile("AuthKey.p8")    if err!=nil {        fmt.Println(err)    }    block, _ := pem.Decode(bytes)    key, err := x509.ParsePKCS8PrivateKey(block.Bytes)    if err != nil {        log.Fatal(err)    }    token := jwt.NewWithClaims(jwt.SigningMethodES256, jwt.MapClaims{        "iss": iss,        "exp": time.Now().Unix()+6000,        "aud": "appstoreconnect-v1",    })    token.Header["kid"] = kid    tokenString, err := token.SignedString(key)    if err != nil {        log.Fatal(err)    }    fmt.Println(tokenString)}并获取 JWT 令牌,但当我尝试使用它时,从 Apple api 获取了 401。 {        "errors": [{                "status": "401",                "code": "NOT_AUTHORIZED",                "title": "Authentication credentials are missing or invalid.",                "detail": "Provide a properly configured and signed bearer token, and make sure that it has not expired. Learn more about Generating Tokens for API Requests https://developer.apple.com/go/?id=api-generating-tokens"        }]}
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

似乎这个问题来自 jwt-go 库的问题。

作者说:

该库不会自动从字节片中解析您的密钥。对于 ES256,我相信您需要提供 *ecdsa.PrivateKey 类型的密钥。从 v4 开始,只要它为该签名方法生成有效签名,它也将接受 crypto.Signer。


查看完整回答
反对 回复 2023-07-26
?
catspeake

TA贡献1111条经验 获得超0个赞

发现问题,更换"exp": time.Now().Unix()+6000,"exp": time.Now().Add(time.Minute * 20).Unix(),



查看完整回答
反对 回复 2023-07-26
  • 2 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信