首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ItunesConnectApi JWT

ItunesConnectApi JWT
EN

Stack Overflow用户
提问于 2019-10-06 12:55:32
回答 2查看 239关注 0票数 2

我正在尝试使用App连接API。根据文档,首先我试图生成JWT令牌。这是戈朗的代码:

代码语言:javascript
运行
复制
    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不能在一个符号键上使用这个p8,所以我得到了错误:key is of invalid type

也许有人已经有同样的问题了?或者在其他语言里有个例子?

UPD: 在这个建议之后我已将代码更新为:

代码语言:javascript
运行
复制
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。

代码语言:javascript
运行
复制
 {
        "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"
        }]
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-06 15:07:21

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

票数 1
EN

Stack Overflow用户

发布于 2019-10-06 13:27:58

似乎这个问题来自jwt库的问题

作者说:

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

你可以试试此代码示例

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58257445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档