我在向 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 聲明的格式不同。
- 1 回答
- 0 關注
- 223 瀏覽
添加回答
舉報
0/150
提交
取消