jwt

package
v0.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 29, 2026 License: MIT Imports: 6 Imported by: 0

README

JWT - Security Module (gokit)

Módulo JWT de gokit diseñado para aplicaciones Go modernas.
Provee generación y validación de access tokens y refresh tokens con seguridad de nivel profesional.


✨ Características

  • 🔐 Access tokens y refresh tokens
  • ⏱️ Expiración configurable
  • 🧩 Claims extendidos (user_id, role, extra)
  • 🛡️ Validación estricta (issuer, algoritmo, expiración)
  • 🔄 Refresh tokens
  • ⚙️ Configuración global segura (thread-safe)
  • 🧠 Helpers útiles (claims, expiración, user_id)
  • 🚀 API simple y profesional

📦 Instalación

go get github.com/AndresGT/gokit/security/jwt

⚙️ Configuración

Debes configurar JWT antes de usarlo:

import "github.com/AndresGT/gokit/security/jwt"

func init() {
	jwt.Configure(jwt.Config{
		Secret:        "mi-secreto-super-seguro-32-caracteres-min",
		RefreshSecret: "mi-refresh-secreto",
		Issuer:        "mi-app",
	})
}

🚀 Generar Tokens

Access Token
token, err := jwt.Generate(userID, "admin")
Access Token con datos extra
token, err := jwt.GenerateWithExtra(userID, "admin", map[string]interface{}{
	"email": "user@example.com",
})
Access + Refresh Token
pair, err := jwt.GeneratePair(userID, "admin")

fmt.Println(pair.AccessToken)
fmt.Println(pair.RefreshToken)
fmt.Println(pair.ExpiresAt)

🔍 Validar Tokens

Validar Access Token
claims, err := jwt.Validate(tokenString)
if err != nil {
	panic(err)
}

fmt.Println(claims.UserID)
fmt.Println(claims.Role)
Validar Refresh Token
claims, err := jwt.ValidateRefreshToken(refreshToken)

🔄 Refresh Token

newPair, err := jwt.Refresh(refreshToken)

🧩 Claims

type Claims struct {
	UserID uuid.UUID              `json:"user_id"`
	Role   string                 `json:"role"`
	Extra  map[string]interface{} `json:"extra,omitempty"`
	jwt.RegisteredClaims
}

Ejemplo de payload:

{
  "user_id": "uuid",
  "role": "admin",
  "extra": {
    "email": "user@example.com"
  },
  "iss": "gokit",
  "exp": 1700000000
}

🧠 Helpers

Verificar expiración
expired := jwt.IsExpired(tokenString)
Obtener user_id
userID, err := jwt.GetUserID(tokenString)
Obtener claims sin validar (debug)
claims, err := jwt.GetClaims(tokenString)

⚙️ Configuración Avanzada

jwt.Configure(jwt.Config{
	Secret:               "secret",
	RefreshSecret:        "refresh-secret",
	AccessTokenDuration:  15 * time.Minute,
	RefreshTokenDuration: 7 * 24 * time.Hour,
	Issuer:               "gokit",
	SigningMethod:        jwt.SigningMethodHS256,
})
Campo Descripción
Secret clave para access tokens
RefreshSecret clave para refresh tokens
AccessTokenDuration duración del access token
RefreshTokenDuration duración del refresh token
Issuer emisor del token
SigningMethod algoritmo de firma

🔐 Buenas Prácticas

  • Usa secrets largos y seguros (mínimo 32 caracteres).
  • Usa secrets diferentes para access y refresh tokens.
  • Configura expiraciones cortas para access tokens.
  • Nunca expongas tokens en logs o frontend.
  • Usa HTTPS siempre.

🧪 Ejemplo Completo

func main() {
	jwt.Configure(jwt.Config{
		Secret: "super-secret-32-chars-min",
	})

	userID := uuid.New()

	pair, _ := jwt.GeneratePair(userID, "user")

	claims, _ := jwt.Validate(pair.AccessToken)

	fmt.Println("User:", claims.UserID)
}

📄 Licencia

MIT



Parte de gokit — módulo JWT listo para producción.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Configure

func Configure(cfg Config)

Configure establece la configuración global del JWT

func Generate

func Generate(userID uuid.UUID, role string) (string, error)

func GenerateCustomClaims

func GenerateCustomClaims(claims jwt.Claims) (string, error)

GenerateCustomClaims permite generar tokens con claims personalizados

func GenerateRefreshToken

func GenerateRefreshToken(userID uuid.UUID, role string) (string, error)

func GenerateWithExtra

func GenerateWithExtra(userID uuid.UUID, role string, extra map[string]interface{}) (string, error)

func GetUserID

func GetUserID(tokenString string) (uuid.UUID, error)

func IsExpired

func IsExpired(tokenString string) bool

func MustGenerate

func MustGenerate(userID uuid.UUID, role string) string

MustGenerate genera un token o hace panic (útil en init/tests)

Types

type Claims

type Claims struct {
	UserID uuid.UUID              `json:"user_id"`
	Role   string                 `json:"role"`
	Extra  map[string]interface{} `json:"extra,omitempty"`
	jwt.RegisteredClaims
}

func GetClaims

func GetClaims(tokenString string) (*Claims, error)

GetClaims obtiene claims sin validar (⚠️ solo debugging)

func Validate

func Validate(tokenString string) (*Claims, error)

func ValidateRefreshToken

func ValidateRefreshToken(tokenString string) (*Claims, error)

type Config

type Config struct {
	Secret               string
	RefreshSecret        string
	AccessTokenDuration  time.Duration
	RefreshTokenDuration time.Duration
	Issuer               string
	SigningMethod        jwt.SigningMethod
}

type TokenPair

type TokenPair struct {
	AccessToken  string    `json:"access_token"`
	RefreshToken string    `json:"refresh_token"`
	ExpiresAt    time.Time `json:"expires_at"`
}

func GeneratePair

func GeneratePair(userID uuid.UUID, role string) (*TokenPair, error)

func Refresh

func Refresh(refreshToken string) (*TokenPair, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL