Skip to main content

JWT Auth

JWT authentication using RS256, HS256, or any asymmetric algorithm. Validates the Authorization: Bearer <token> header.

Basic Usage

import "github.com/Pavan-Silva/go-zen/auth"

jwtAuth := &auth.JWTAuth{
Secret: []byte("your-secret-key"),
SigningMethod: jwt.SigningMethodHS256,
}

r.Use(auth.RequireAuth(jwtAuth))
jwtAuth := &auth.JWTAuth{
Secret: publicKeyPEM,
SigningMethod: jwt.SigningMethodRS256,
}

Custom Claims

type CustomClaims struct {
Role string `json:"role"`
}

jwtAuth := &auth.JWTAuth{
Secret: []byte("secret"),
SigningMethod: jwt.SigningMethodHS256,
ClaimsFunc: func(claims jwt.MapClaims) *auth.User {
return &auth.User{
ID: claims["sub"].(string),
Username: claims["preferred_username"].(string),
Authorities: auth.Authorities("ROLE_USER"),
Claims: claims,
}
},
}

User from JWT

The Authenticate method extracts claims and populates the User struct:

user := auth.GetUser(c)
user.ID // "sub" claim
user.Username // "preferred_username" claim
user.Authorities // claim-derived authorities
user.Claims // full claim map