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

使用 Go 向 APNS 发出推送请求时出现 403 Forbidden 错误。

使用 Go 向 APNS 发出推送请求时出现 403 Forbidden 错误。

Go
慕容3067478 2023-07-26 20:00:51
我在向 APNS 发出推送通知请求时收到以下错误:&{403 Forbidden 403 HTTP/2.0 2 0 map[Apns-Id:[7BF53274-A04B-7C1B-8312-DB01DA48A519]] {0xc0000c88c0} -1 [ ] 假假地图[] 0xc000132000 0xc0000ba370}我怀疑我生成身份验证标头的代码不正确这是相关代码:func generateAuthenticationHeader() string {    b, _ := json.Marshal(Header{ ALG: "ES256", KID: authKeyId })    header := b64.StdEncoding.EncodeToString(b)    b, _ = json.Marshal(Claims{ ISS: teamId, IAT: time.Now().String() })    claims := b64.StdEncoding.EncodeToString(b)    pkey := getPrivateKey()    indata := fmt.Sprintf("%s.%s", header, claims)    h := sha256.New()    h.Write([]byte(indata))    digest := h.Sum(nil)    r, s, err := ecdsa.Sign(rand.Reader, pkey, digest)    if err != nil {        log.Fatal(err)    }    signature := r.Bytes()    signature = append(signature, s.Bytes()...)    signed := b64.StdEncoding.EncodeToString(signature)    return fmt.Sprintf("%s.%s.%s", header, claims, signed)}func getPrivateKey() *ecdsa.PrivateKey {    r, _ := ioutil.ReadFile(authKeyPath)    block, _ := pem.Decode(r)    key, err := x509.ParsePKCS8PrivateKey(block.Bytes)    if err != nil {        log.Fatal(err)    }    pkey := key.(*ecdsa.PrivateKey)    return pkey}
查看完整描述

1 回答

?
RISEBY

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

问题是 IAT 索赔类型不正确。它应该是 int64 而不是字符串,并且时间应该以秒为单位。按 time.Now() 调用 String() 返回的格式与 Apple 期望的 IAT 声明的格式不同。



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

添加回答

举报

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