Go:基于 HTTP Header 传输签名参数

Go语言精选

共 974字,需浏览 2分钟

 ·

2020-09-02 05:03

概述

调用方 向 接口提供方,申请调用 KeySecret,用于生成签名。

  • Key 为调用方身份标识
  • Secret 为加密盐值

加密盐值可以使用 1Password 在线生成,如下图。

签名参数传递

不建议在 URL 或 FORM 中新增参数,建议使用 HTTP Header 中的两个参数 AuthorizationDate 存储签名信息,其中 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)




推荐阅读



学习交流 Go 语言,扫码回复「进群」即可


站长 polarisxu

自己的原创文章

不限于 Go 技术

职场和创业经验


Go语言中文网

每天为你

分享 Go 知识

Go爱好者值得关注



浏览 44
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报