添加文件: xy_sh/internal/middleware/middleware.go

This commit is contained in:
renzhiyuan 2026-07-24 18:13:54 +08:00
parent 0ef0a0b8cc
commit f8a5e274ee
1 changed files with 54 additions and 0 deletions

View File

@ -0,0 +1,54 @@
package middleware
import (
"log"
"github.com/gofiber/fiber/v2"
"xy_sh/pkg/crypto"
)
// SM3Salt 全局SM3盐值由config初始化时注入
var SM3Salt []byte
// SM4Key 全局SM4密钥由config初始化时注入
var SM4Key []byte
// AuthMiddleware 签名验证中间件
// 验证请求头中的 timestamp 和 sign
func AuthMiddleware() fiber.Handler {
return func(c *fiber.Ctx) error {
timestamp := c.Get("timestamp")
sign := c.Get("sign")
if timestamp == "" || sign == "" {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"code": -1,
"msg": "缺少timestamp或sign请求头",
})
}
// 读取请求体中的 encryptedData
var body struct {
EncryptedData string `json:"encryptedData"`
}
if err := c.BodyParser(&body); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"code": -1,
"msg": "请求体解析失败",
})
}
// 验证签名
if !crypto.VerifySign(timestamp, body.EncryptedData, sign, SM3Salt) {
log.Printf("[中间件] 签名验证失败: timestamp=%s, sign=%s", timestamp, sign)
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"code": -1,
"msg": "签名验证失败",
})
}
log.Printf("[中间件] 签名验证通过: timestamp=%s", timestamp)
return c.Next()
}
}