# Functions
AppendSign 计算请求的签名,并将其赋值到请求的 Authorization 头。 调用此方法后, [http.Request.Body] 会被读取并重新置换为新的 [bytes.Buffer] ,旧的 body 会被 Close 。 - r 需要计算签名的请求。 - accessKey 对应 Authorization 头中的 Key 字段的值。 - secret HMAC-SHA256 的密钥,使用 UTF-8 字符集。 - authScheme Authorization 头最前面的 Scheme 部分。为空时自动使用 [DefaultAuthScheme] 。 - timestamp UNIX 时间戳,对应 Authorization 头的 Timestamp 字段的值。.
BuildAuthorizationHeader 返回用于 HTTP 的 Authorization 头的值。 - 若 [Authorization.Version] 为 0 ,则 Version 部分被省略。 - 若 [Authorization.AuthScheme] 为空,则使用默认值 [DefaultAuthScheme] 。.
获取当前请求中缓存的 [Authorization] 。若值不存在,返回默认值及 ok=false 。 在 [webapi.ApiNameResolver.FillMethod] 发生后,被解析到的 [Authorization] 将被缓存。.
HmacSha256 计算 hmac-sha256 ,返回小写的 HEX 格式。.
MaxDeviationTimeChecker 返回一个 [TimeCheckerFunc] , 其校验给定的时间戳与当前时间的误差必须小于等于 maxDeviation ,单位为秒。 maxDeviation 应为非负数,否则校验总是通过。.
获取当前请求中缓存的 [Authorization] 。若值不存在, panic 。 在 [webapi.ApiNameResolver.FillMethod] 发生后,被解析到的 [Authorization] 将被缓存。.
NewSlimAuthApiDecoder 返回 SlimAuth 协议的 [webapi.ApiDecoder] 。.
NewSlimAuthApiHandler 创建 SlimAuth 协议的 [webapi.ApiHandler] 。.
NewSlimAuthApiLogger 返回用于 SlimAuth 协议的 [webapi.ApiLogger] 实现。.
NewSlimAuthApiNameResolver 返回 SlimAuth 协议的 [webapi.ApiNameResolver] 。 它增加了签名校验,其余都和 SlimAPI 一样。.
SlimAuthInvoker 创建一个 [SlimAuthInvoker] 实例。.
ParseAuthorizationHeader 解析 Authorization 头。当没有 Authorization 头时,尝试读取 URL 上的 ~auth 参数。
格式为:
Authorization: Scheme Key=value_of_key, Sign=value_of_sign, Timestamp=unix_timestamp, Version=1
说明: - 每个 Key 前的空格被忽略。 key-value 对的顺序不做要求。 - Scheme 必须是匹配给定的 @authScheme ,若给定值为空,则使用默认值“SLIM-AUTH”。 - Timestamp 签名时的 UNIX 时间戳,单位是秒。 - Version 可省略,省略时默认为 1 。.
缓存解析到的 [Authorization] 。.
Sign 计算给定的请求的签名。 - r 需要计算签名的请求。。 - rewindBody 指定是否需要重用 [http.Request.Body] 。 若为 true ,则读取完 body 后,它会被替换为新的、可重读的 [bytes.Buffer] ,旧的 body 会被 Close 。 - secret HMAC-SHA256 的密钥,使用 UTF-8 字符集。 - timestamp UNIX 时间戳,对应 Authorization 头的 Timestamp 字段的值。.
# Constants
SlimAuth 协议在 HTTP Authorization 头的 <scheme> 部分,固定值。.
默认的签名算法版本,当 Authorization 头没有写 Version 字段时,默认为此版本。.
HTTP 协议的 Authorization 头。.
请求的 body 部分缺失或格式错误。.
当 POST 请求缺少 Content-Type 头时给定此错误。.
签名成功。.
当有 POST 请求有 Content-Type 头,但类型不受支持时给定此错误。.
# Variables
默认的时间戳校验 [TimeCheckerFunc] :要求签名给定的时间戳与当前时间误差在 5 分钟内。.
LogAuthorization 实现 [webapi.LogSetup] ,用于记录请求的 Authorization 头的相关信息。
这是一个单例。.
不校验时间戳的 [TimeCheckerFunc] 。.
# Structs
Authorization 记录 SlimAuth 协议规定的 HTTP Authorization 头的内容。.
表示签名执行的结果和错误原因(当有错误时)。.
SlimAuthApiHandlerOption 用于初始化 SlimAuth 协议的 [webapi.ApiHandler] 。.
SlimAuthInvoker 用于调用一个 SlimAuth 协议的 API 。
TParam 是输入参数的类型; TData 对应输出的 [webapi.ApiResponse.Data] 。.
SlimAuthInvokerOp 用于初始化 [SlimAuthInvoker] 。.
# Type aliases
SecretFinderFunc 用于获取绑定到指定 accessKey 的 secret 。 若给定的 accessKey 没有绑定,返回空字符串。 若获取过程出错,直接 panic ,其错误处理方式与普通的 API 方法一致。.
签名结果。.
TimeCheckerFunc 用于校验签名信息中携带的时间戳的有效性。 若时间校验不通过,返回相关描述信息;否则返回 nil 表示校验通过。 若方法 panic ,其错误处理方式与普通的 API 方法一致。.