审核中~
溜忙之道
首页
溜忙手册
offer之道
项目Git
写文章
登录
·
注册
登录
没有账号,去注册
注册
已有账号,去登录
博客
go 的 AKSK 设计
南易_站长
阅读量:5508
关注
go 的 AKSK 设计
## 接口传递方式 在header中添加一下认证信息 **header :** | 参数名 | 必选 | 类型 | 说明 | | :-- | :-- | :-- | --- | | appkey | 是 | string | 下发授权信息 | | authorization | 是 | string | 加密信息 加密规则见文档 | ## authorization 生成规则 && 案例 - body/query中传递值,生成一个对象,key按首字母顺序排序,拼接一个字符串:`str` - `app_key:`+`app_secret`+`-`+`str` - 采用 sha256 计算 authorization 值 ``` var a = { a:1, b:2, c:3 } var encodeStr = "a:1,b:2,c:2" var c = appKey + ":" + appSecret + "-" + tools.TrimLastChar(encodeStr) Sha256(src string) string { m := sha256.New() m.Write([]byte(src)) res := hex.EncodeToString(m.Sum(nil)) return res } authorization = Sha256(c) ``` ## go 中间件设计 ``` package middleware import ( "ksotob/models" "ksotob/tools" "github.com/gin-gonic/gin" ) func KeyAuth(c *gin.Context) { appKey := c.GetHeader("appkey") authorization := c.GetHeader("authorization") method := c.Request.Method data := make(map[string][]string) if appKey == "" || authorization == "" { c.JSON(200, gin.H{ "code": 403, "msg": "header鉴权信息不全", }) c.Abort() return } appSecret := models.FindAppSecret(appKey) if appSecret == "" { c.JSON(200, gin.H{ "code": 403, "msg": "非法appkey", }) c.Abort() return } if method == "GET" { data = c.Request.URL.Query() } else { c.Request.ParseMultipartForm(128) data = c.Request.Form } encodeStr := "" for k, v := range data { encodeStr = encodeStr + k + v[0] + "," } encodeStr = appKey + ":" + appSecret + "-" + tools.TrimLastChar(encodeStr) myAuthorization := tools.Sha256(encodeStr) if myAuthorization != authorization { c.JSON(200, gin.H{ "code": 403, "msg": "鉴权失败", }) c.Abort() } } ```
评论
表情
发送
11
评论