appsign

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 11, 2024 License: MIT Imports: 16 Imported by: 0

Documentation

Index

Constants

View Source
const (
	HeaderAccept      = "Accept"
	HeaderContentMD5  = "Content-Md5"
	HeaderContentType = "Content-Type"
	HeaderDate        = "Date"

	HeaderCAKey              = "X-Ca-Key"
	HeaderCANonce            = "X-Ca-Nonce"
	HeaderCASignature        = "X-Ca-Signature"
	HeaderCASignatureHeaders = "X-Ca-Signature-Headers"
	HeaderCASignatureMethod  = "X-Ca-Signature-Method"
	HeaderCATimestamp        = "X-Ca-Timestamp"
)

请求头

View Source
const (
	SignatureMethodHmacSHA256 = "HmacSHA256"
	SignatureMethodHmacSHA1   = "HmacSHA1"
)

签名算法

View Source
const (
	MIMEForm                      = "application/x-www-form-urlencoded"
	MIMEMultipartForm             = "multipart/form-data"
	MIMEMultipartFormWithBoundary = MIMEMultipartForm + "; boundary="
)

MIME 类型

View Source
const (
	// ContextAppKey AppKey 上下文
	ContextAppKey = contextKey("X-AppKey")
)

Variables

View Source
var (
	// ErrInvalidSignParams 签名参数错误
	ErrInvalidSignParams = bizerr.ErrInvalidSignParams
	// ErrInvalidContentMD5 Content-MD5 错误
	ErrInvalidContentMD5 = bizerr.ErrInvalidContentMD5
	// ErrBodyTooLarge 请求体过大错误
	ErrBodyTooLarge = bizerr.ErrBodyTooLarge
)

Functions

func AppKeyFromCtx

func AppKeyFromCtx(ctx context.Context) string

AppKeyFromCtx 从 context 获取 AppKey

func CtxWithAppKey

func CtxWithAppKey(ctx context.Context, appkey string) context.Context

CtxWithAppKey 将指定 AppKey 关联到 context 中

Types

type AppSign

type AppSign struct {
	Method             string            // 请求方法,必填
	Accept             string            // "Accept" 请求头部的值,非必填
	ContentMD5         string            // "Content-MD5" 请求头部的值, 非必填
	ContentType        string            // "Content-Type" 请求头部的值,非必填
	Date               string            // "Data" 请求头部的值,非必填
	Key                string            // 应用 AppKey,必填
	Nonce              string            // 随机数,必填
	Signature          string            // 签名,必填
	SignatureHeaders   []string          // 所有签名请求头部的 slice,非必填
	SignatureHeaderMap map[string]string // 所有签名请求头部的 map,非必填
	SignatureMethod    string            // 签名算法,非必填,支持 HmacSHA256 和 HmacSHA1,默认为 HmacSHA256
	Timestamp          int64             // 毫秒级时间戳,必填
	Params             string            // 参数,计算得到
	StringToSign       string            // 待签名字符串,计算得到
}

AppSign 应用签名

签名规则参考:阿里云使用摘要签名认证方式调用 API https://help.aliyun.com/zh/api-gateway/user-guide/use-digest-authentication-to-call-an-api 的规则并实现

下列请求头部不参与请求头部签名计算:

"Accept"、"Content-MD5"、"Content-Type"、"Date"、"X-Ca-Signature" 和 "X-Ca-Signature-Headers"

下列请求头部是必填项:

"X-Ca-Key"、"X-Ca-Nonce"、"X-Ca-Signature" 和 "X-Ca-Timestamp"

func FromRequest

func FromRequest(r *http.Request) (*AppSign, error)

FromRequest 从请求中解析应用签名

func (*AppSign) CalcStringToSign

func (as *AppSign) CalcStringToSign() string

CalcStringToSign 计算待签名字符串

func (*AppSign) CheckSign

func (as *AppSign) CheckSign(secret string) (sign string, ok bool)

CheckSign 校验签名,并返回正确签名

建议:即使验签成功,也要根据 Timestamp 和 Nonce 字段进行再次校验,避免重放攻击

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL