1 Star 0 Fork 0

carlmax_my/console-core-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
signature_verify.go 1.63 KB
一键复制 编辑 原始数据 按行查看 历史
carlmax_my 提交于 2024-12-02 21:32 . init project
package signature
import (
"bytes"
"crypto/hmac"
"crypto/sha256"
"fmt"
"net/url"
"strings"
"time"
"gitee.com/carlmax_my/console-core-go/pkg/crypto/base64"
"gitee.com/carlmax_my/console-core-go/pkg/errors"
"gitee.com/carlmax_my/console-core-go/pkg/timeutil"
)
func (s *signature) Verify(authorization, date string, path string, method string, params url.Values) (ok bool, err error) {
if date == "" {
err = errors.New("date required")
return
}
if path == "" {
err = errors.New("path required")
return
}
if method == "" {
err = errors.New("method required")
return
}
methodName := strings.ToUpper(method)
if !methods[methodName] {
err = errors.New("method param error")
return
}
ts, err := timeutil.ParseCSTInLocation(date)
if err != nil {
err = errors.New("date must follow '2006-01-02 15:04:05'")
return
}
if timeutil.SubInLocation(ts) > float64(s.ttl/time.Second) {
err = errors.Errorf("date exceeds limit %v", s.ttl)
return
}
// Encode() 方法中自带 sorted by key
sortParamsEncode, err := url.QueryUnescape(params.Encode())
if err != nil {
err = errors.Errorf("url QueryUnescape error %v", err)
return
}
buffer := bytes.NewBuffer(nil)
buffer.WriteString(path)
buffer.WriteString(delimiter)
buffer.WriteString(methodName)
buffer.WriteString(delimiter)
buffer.WriteString(sortParamsEncode)
buffer.WriteString(delimiter)
buffer.WriteString(date)
// 对数据进行 hmac 加密,并进行 base64 encode
hash := hmac.New(sha256.New, []byte(s.secret))
hash.Write(buffer.Bytes())
digest := base64.Base64Encode(hash.Sum(nil))
ok = authorization == fmt.Sprintf("%s %s", s.key, digest)
return
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/carlmax_my/console-core-go.git
git@gitee.com:carlmax_my/console-core-go.git
carlmax_my
console-core-go
console-core-go
v0.0.12

搜索帮助