Skip to content

JWT

Thin helpers over golang-jwt v5 for HS256 sign/verify with typed claims.

Claims

Embed jwt.RegisteredClaims for the standard time-based fields:

go
import "github.com/golang-jwt/jwt/v5"

type AppClaims struct {
    UserID string `json:"user_id"`
    Role   string `json:"role"`
    jwt.RegisteredClaims
}

Sign

go
token, err := core.JWTSign(&AppClaims{
    UserID: "u-1",
    Role:   "admin",
    RegisteredClaims: jwt.RegisteredClaims{
        ExpiresAt: jwt.NewNumericDate(time.Now().Add(24 * time.Hour)),
        IssuedAt:  jwt.NewNumericDate(time.Now()),
    },
}, secret)

Verify

Pass a pointer to a claims value; it is populated on success. Verification checks the HMAC signature and the standard time claims (exp/nbf/iat):

go
var claims AppClaims
if err := core.JWTVerify(token, secret, &claims); err != nil {
    return err // IError, code INVALID_JWT (401)
}
useUserID(claims.UserID)

API

go
func JWTSign(claims jwt.Claims, secret string) (string, IError)
func JWTVerify(tokenString string, secret string, dest jwt.Claims) IError
  • Only HMAC signing methods are accepted (mismatched algorithms are rejected).
  • A wrong secret, expired token, or tampered payload returns a 401 INVALID_JWT.

Maintained by Passakon Puttasuwan & Dev Core Team.