JWT Token Utils
Dokumentasi utility functions untuk JWT token generation dan verification.
Overview
Package utils menyediakan functions untuk mengelola JWT (JSON Web Token) untuk autentikasi.
Constants
var jwtKey = []byte("your_secret_key")
warning
Ganti your_secret_key dengan secret key yang aman di production. Simpan di environment variable.
Claims Struct
type Claims struct {
UserID string
NoPegawai string
Nama string
Email string
TipePegawai string
HakAksesID string
jwt.StandardClaims
}
Fields
| Field | Type | Deskripsi |
|---|---|---|
UserID | string | UUID pengguna |
NoPegawai | string | Nomor pegawai (NRK/NPTT) |
Nama | string | Nama lengkap |
Email | string | Email pengguna |
TipePegawai | string | Tipe pegawai (pns/non-pns/unit-kerja) |
HakAksesID | string | ID hak akses |
StandardClaims | jwt.StandardClaims | Standard JWT claims (exp, iat, etc) |
Functions
GenerateToken
Membuat JWT token baru dengan claims.
func GenerateToken(userID string, noPegawai, nama, email, tipePegawai, hakAksesID string) (string, error)
Parameters
| Parameter | Type | Deskripsi |
|---|---|---|
userID | string | UUID pengguna |
noPegawai | string | Nomor pegawai |
nama | string | Nama lengkap |
email | string | |
tipePegawai | string | Tipe pegawai |
hakAksesID | string | ID hak akses |
Return
string- JWT tokenerror- Error jika gagal generate
Example
token, err := utils.GenerateToken(
user.ID,
user.NoPegawai,
user.Nama,
user.Email,
user.TipePegawai,
user.HakAksesID,
)
if err != nil {
return helpers.NewInternalError("Failed to generate token")
}
VerifyToken
Memverifikasi dan parse JWT token.
func VerifyToken(tokenString string) (*Claims, error)
Parameters
| Parameter | Type | Deskripsi |
|---|---|---|
tokenString | string | JWT token (tanpa prefix Bearer) |
Return
*Claims- Parsed claims jika validerror- Error jika token invalid/expired
Example
claims, err := utils.VerifyToken(tokenString)
if err != nil {
return helpers.NewUnauthorized("Invalid token")
}
// Access claims
userID := claims.UserID
nama := claims.Nama
Token Expiration
Default token expiration adalah 24 jam dari waktu pembuatan.
expirationTime := time.Now().Add(24 * time.Hour)
JWT Structure
Token yang di-generate memiliki format:
xxxxx.yyyyy.zzzzz
| Part | Deskripsi |
|---|---|
| Header (xxxxx) | Algorithm dan token type |
| Payload (yyyyy) | Claims data |
| Signature (zzzzz) | Verification signature |
Decoded Payload Example
{
"UserID": "550e8400-e29b-41d4-a716-446655440000",
"NoPegawai": "123456",
"Nama": "John Doe",
"Email": "john@example.com",
"TipePegawai": "pns",
"HakAksesID": "admin",
"exp": 1737590400
}
Security Best Practices
-
Secret Key Management
// ❌ Bad - hardcoded
var jwtKey = []byte("your_secret_key")
// ✅ Good - from environment
var jwtKey = []byte(os.Getenv("JWT_SECRET_KEY")) -
Token Rotation - Implementasikan refresh token
-
Short Expiration - Untuk high-security, gunakan expiration lebih pendek
-
HTTPS Only - Selalu kirim token melalui HTTPS
-
HttpOnly Cookie - Simpan token di httpOnly cookie, bukan localStorage
Error Handling
claims, err := utils.VerifyToken(tokenString)
if err != nil {
switch {
case errors.Is(err, jwt.ErrSignatureInvalid):
// Token signature invalid
case errors.Is(err, jwt.ErrTokenExpired):
// Token expired
default:
// Other error
}
}