Go:基于 HTTP Header 傳輸簽名參數(shù)
概述
調(diào)用方 向 接口提供方,申請(qǐng)調(diào)用 Key 和 Secret,用于生成簽名。
Key 為調(diào)用方身份標(biāo)識(shí) Secret 為加密鹽值
加密鹽值可以使用 1Password 在線生成,如下圖。

簽名參數(shù)傳遞
不建議在 URL 或 FORM 中新增參數(shù),建議使用 HTTP Header 中的兩個(gè)參數(shù) Authorization、Date 存儲(chǔ)簽名信息,其中 Authorization 存儲(chǔ)簽名,Date 存儲(chǔ)簽名信息。

Authorization 參數(shù)用來對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行驗(yàn)證,防止篡改,由 3 部分組成:
Prefix 為前綴,用來識(shí)別調(diào)用方身份; Space 為空格分隔符; Digest 為摘要,一段加密串,加密方法建議使用 HMAC算法。
Date 參數(shù)用來驗(yàn)證請(qǐng)求的時(shí)效性。
參數(shù)示例
Authorization: blog /Rg4zjqqWUpVfLh3uGRwkfEEV5o=Date: Sat, 22 Aug 2020 09:15:41 GMT
Digest 參考示例
secret := "U1joiH8yDr8rzj28CMYT"rfc1123Date := time.Now().Format(http.TimeFormat)buffer := bytes.NewBuffer(nil)buffer.WriteString("?id=1")buffer.WriteString(rfc1123Date)hash := hmac.New(sha1.New, []byte(secret))hash.Write(buffer.Bytes())digest := base64.StdEncoding.EncodeToString(hash.Sum(nil))fmt.Println(digest)
推薦閱讀
站長(zhǎng) polarisxu
自己的原創(chuàng)文章
不限于 Go 技術(shù)
職場(chǎng)和創(chuàng)業(yè)經(jīng)驗(yàn)
Go語(yǔ)言中文網(wǎng)
每天為你
分享 Go 知識(shí)
Go愛好者值得關(guān)注
評(píng)論
圖片
表情
