12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- package utils
- import (
- "fmt"
- "github.com/gin-gonic/gin"
- "go-micro.dev/v4/auth"
- "go-micro.dev/v4/metadata"
- "golang.org/x/net/context"
- "net/http"
- "sghgogs.com/sghblog/authorization-client/utils/authutil"
- "strconv"
- "strings"
- "time"
- )
- func ConvertTimeToInt64(t time.Time) int64 {
- return t.Unix()
- }
- func ConvertInt64ToTime(seconds int64) time.Time {
- return time.Unix(seconds, 0)
- }
- func CreateContextWithToken(c *gin.Context, service, endpoint string) (context.Context, string) {
- token := c.GetHeader("Authorization")
- userAgent := c.Request.Header.Get("User-Agent")
- fmt.Println(userAgent)
- return metadata.NewContext(context.Background(), map[string]string{
- "Authorization": token,
- "Micro-Service": service,
- "Micro-Endpoint": endpoint,
- "Agent": userAgent,
- }), token
- }
- func TokenAuthMiddleware() gin.HandlerFunc {
- return func(c *gin.Context) {
- token := strings.TrimPrefix(c.GetHeader("Authorization"), auth.BearerScheme)
- if len(token) > 0 {
- if inspect, err := authutil.JWTAuthService.Inspect(token); err == nil {
- fmt.Println("TokenAuthMiddleware", inspect.Metadata)
- if value, ok := inspect.Metadata["expiry"]; ok {
- expiry, _ := strconv.ParseInt(value, 10, 64)
- fmt.Println("expiry", expiry-time.Now().Unix())
- if (expiry - time.Now().Unix()) < 60*10 {
- fmt.Println("需要重新刷新了")
- refreshToken, err := authutil.JWTAuthService.RefreshToken(token)
- if err == nil {
- c.Header("Access-Control-Expose-Headers", "access-token")
- c.Header("access-token", fmt.Sprintf("%v", refreshToken.AccessToken))
- c.Request.Header.Set("Authorization", fmt.Sprintf("%v %v", auth.BearerScheme, refreshToken.AccessToken))
- fmt.Println(refreshToken.AccessToken)
- }
- }
- }
- }
- }
- if token == "" {
- c.JSON(http.StatusUnauthorized, gin.H{
- "code": http.StatusUnauthorized,
- "message": "已失效,请重新登录",
- })
- c.Abort() // 终止请求处理
- return
- }
- c.Next()
- }
- }
|