Go:基于 HTTP Header 传输签名参数
Go语言精选
共 974字,需浏览 2分钟
·
2020-09-02 05:03
概述
调用方 向 接口提供方,申请调用 Key
和 Secret
,用于生成签名。
Key 为调用方身份标识 Secret 为加密盐值
加密盐值可以使用 1Password 在线生成,如下图。
签名参数传递
不建议在 URL 或 FORM 中新增参数,建议使用 HTTP Header 中的两个参数 Authorization
、Date
存储签名信息,其中 Authorization
存储签名,Date
存储签名信息。
Authorization
参数用来对传输的数据进行验证,防止篡改,由 3 部分组成:
Prefix 为前缀,用来识别调用方身份; Space 为空格分隔符; Digest 为摘要,一段加密串,加密方法建议使用 HMAC
算法。
Date
参数用来验证请求的时效性。
参数示例
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)
推荐阅读
站长 polarisxu
自己的原创文章
不限于 Go 技术
职场和创业经验
Go语言中文网
每天为你
分享 Go 知识
Go爱好者值得关注
评论