filter.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package utils
  2. import (
  3. "fmt"
  4. "github.com/gin-gonic/gin"
  5. "go-micro.dev/v4/auth"
  6. "go-micro.dev/v4/metadata"
  7. "golang.org/x/net/context"
  8. "net/http"
  9. "sghgogs.com/micro/auth-client/utils/authutil"
  10. "strconv"
  11. "strings"
  12. "time"
  13. )
  14. func ConvertTimeToInt64(t time.Time) int64 {
  15. return t.Unix()
  16. }
  17. func ConvertInt64ToTime(seconds int64) time.Time {
  18. return time.Unix(seconds, 0)
  19. }
  20. func CreateContextWithToken(c *gin.Context, service, endpoint string) (context.Context, string) {
  21. token := c.GetHeader("Authorization")
  22. userAgent := c.Request.Header.Get("User-Agent")
  23. fmt.Println(userAgent)
  24. return metadata.NewContext(context.Background(), map[string]string{
  25. "Authorization": token,
  26. "Micro-Service": service,
  27. "Micro-Endpoint": endpoint,
  28. "Agent": userAgent,
  29. }), token
  30. }
  31. func TokenAuthMiddleware() gin.HandlerFunc {
  32. return func(c *gin.Context) {
  33. token := strings.TrimPrefix(c.GetHeader("Authorization"), auth.BearerScheme)
  34. if len(token) > 0 {
  35. if inspect, err := authutil.JWTAuthService.Inspect(token); err == nil {
  36. fmt.Println("TokenAuthMiddleware", inspect.Metadata)
  37. if value, ok := inspect.Metadata["expiry"]; ok {
  38. expiry, _ := strconv.ParseInt(value, 10, 64)
  39. fmt.Println("expiry", expiry-time.Now().Unix())
  40. if (expiry - time.Now().Unix()) < 60*10 {
  41. fmt.Println("需要重新刷新了")
  42. refreshToken, err := authutil.JWTAuthService.RefreshToken(token)
  43. if err == nil {
  44. c.Header("Access-Control-Expose-Headers", "access-token")
  45. c.Header("access-token", fmt.Sprintf("%v", refreshToken.AccessToken))
  46. c.Request.Header.Set("Authorization", fmt.Sprintf("%v %v", auth.BearerScheme, refreshToken.AccessToken))
  47. fmt.Println(refreshToken.AccessToken)
  48. }
  49. }
  50. }
  51. }
  52. }
  53. if token == "" {
  54. c.JSON(http.StatusUnauthorized, gin.H{
  55. "code": http.StatusUnauthorized,
  56. "message": "已失效,请重新登录",
  57. })
  58. c.Abort() // 终止请求处理
  59. return
  60. }
  61. c.Next()
  62. }
  63. }