sso.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package middleware
  2. import (
  3. "gitee.com/xuyiping_admin/pkg/logger/zaplog"
  4. "go.uber.org/zap"
  5. "kpt-tmr-group/config"
  6. commonPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/common"
  7. "gitee.com/xuyiping_admin/pkg/apierr"
  8. "gitee.com/xuyiping_admin/pkg/jwt"
  9. "net/http"
  10. "strings"
  11. "github.com/gin-gonic/gin"
  12. )
  13. const (
  14. Authorization = "Authorization"
  15. ToKenPrefix = "Bearer "
  16. UserName = "userName"
  17. XRequestId = "X-Request-Id"
  18. )
  19. func GetToken(c *gin.Context) string {
  20. value := c.Request.Header.Get(Authorization)
  21. if value != "" && strings.HasPrefix(value, ToKenPrefix) {
  22. return strings.TrimPrefix(value, ToKenPrefix)
  23. }
  24. return ""
  25. }
  26. func GetXRequestId(c *gin.Context) string {
  27. item := c.Request.Header.Get(XRequestId)
  28. return item
  29. }
  30. func unauthorized(c *gin.Context) {
  31. c.AbortWithStatusJSON(http.StatusBadRequest, apierr.WithContext(c, commonPb.Error_UNAUTHORIZED))
  32. }
  33. // RequireAdmin ...
  34. func RequireAdmin() gin.HandlerFunc {
  35. return func(c *gin.Context) {
  36. token := GetToken(c)
  37. if token == "" {
  38. unauthorized(c)
  39. return
  40. }
  41. tokenVerifier := jwt.JWTTokenVerifier{PublicKey: config.Options().JwtTokenKeyConfig.PublicKey}
  42. userName, err := tokenVerifier.ParseToken(token)
  43. if err != nil {
  44. zaplog.Error("unauthorized", zap.Any("err", err))
  45. unauthorized(c)
  46. return
  47. }
  48. c.Set(UserName, userName)
  49. c.Set(XRequestId, GetXRequestId(c))
  50. c.Next()
  51. }
  52. }