sso.go 1.4 KB

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