utils.go 846B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package main
  2. import (
  3. "crypto/md5"
  4. "errors"
  5. "fmt"
  6. "net/http"
  7. "strconv"
  8. "time"
  9. )
  10. func md5Str(plain, salt string) string {
  11. data := plain + salt
  12. return fmt.Sprintf("%x", md5.Sum([]byte(data)))
  13. }
  14. func authHeader(r *http.Request) error {
  15. appid := r.Header.Get("x-appid")
  16. timestamp := r.Header.Get("x-timestamp")
  17. sign := r.Header.Get("x-sign")
  18. if appid == "" || timestamp == "" || sign == "" {
  19. return errors.New("没有找到校验头信息")
  20. }
  21. millisec, err := strconv.ParseInt(timestamp, 10, 64)
  22. if err != nil {
  23. return errors.New("校验日期格式不正确")
  24. }
  25. tm := time.UnixMilli(millisec)
  26. if time.Since(tm) > time.Minute*5 {
  27. return errors.New("请求超时")
  28. }
  29. secret := appid + timestamp
  30. checkStr := md5Str(appid+secret, timestamp)
  31. if sign != checkStr {
  32. return errors.New("非法请求")
  33. }
  34. return nil
  35. }