package service import ( "time" "github.com/golang-jwt/jwt/v5" ) // TokenConfig holds the configuration for the token service type TokenConfig struct { AppID string AppKey string SigExp int } // TokenService handles JWT token generation type TokenService struct { config TokenConfig } // NewTokenService creates a new instance of TokenService func NewTokenService(config TokenConfig) *TokenService { return &TokenService{ config: config, } } // CreateSignature generates a JWT token func (s *TokenService) CreateSignature() (string, error) { // Get current time now := time.Now().UTC() // Calculate expiration time expiresAt := now.Add(time.Duration(s.config.SigExp) * time.Second) // Create claims claims := jwt.MapClaims{ "iss": "your-issuer", // Optional: Issuer "iat": now.Unix(), // Issued at time "exp": expiresAt.Unix(), // Expiration time "appId": s.config.AppID, // Custom claim } // Create token token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) // Sign and get the complete encoded token as a string tokenString, err := token.SignedString([]byte(s.config.AppKey)) if err != nil { return "", err } return tokenString, nil }