gpt4 book ai didi

go - 使用 Go 向 APNS 发出推送请求时出现 403 禁止错误。我是否正确创建了 JWT?

转载 作者:行者123 更新时间:2023-12-01 22:28:29 25 4
gpt4 key购买 nike

向 APNS 发出推送通知请求时出现以下错误:&{403 Forbidden 403 HTTP/2.0 2 0 map[Apns-Id:[7BF53274-A04B-7C1B-8312-DB01DA48A519]] {0xc0000c88c0} -1 [ ]假假 map [] 0xc000132000 0xc0000ba370}

我怀疑我生成身份验证 header 的代码不正确

以下是相关代码:

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
}

最佳答案

问题是不正确的 IAT 声明类型。它应该是 int64 而不是字符串,时间应该以秒为单位。根据他们的文档,在 time.Now() 上调用 String() 返回的格式与 Apple 期望的 IAT 声明的格式不同:https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_token-based_connection_to_apns .

关于go - 使用 Go 向 APNS 发出推送请求时出现 403 禁止错误。我是否正确创建了 JWT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58308470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com