빠른 시작
설치
bash
go get github.com/cybergodev/jwtGo 1.25+ 필요.
기본 사용법
1. Processor 생성
go
package main
import (
"fmt"
"time"
"github.com/cybergodev/jwt"
)
func main() {
cfg := jwt.DefaultConfig()
cfg.SecretKey = "hmac-key-that-has-at-least-32-bytes!" // HMAC 최소 32 바이트
cfg.AccessTokenTTL = 15 * time.Minute
cfg.RefreshTokenTTL = 7 * 24 * time.Hour
processor, err := jwt.New(cfg)
if err != nil {
panic(err)
}
defer processor.Close() // 키 안전 삭제
}2. 토큰 발급
go
claims := &jwt.Claims{
UserID: "user123",
Username: "alice",
Role: "admin",
Permissions: []string{"read", "write"},
}
// 액세스 토큰 (단기)
accessToken, err := processor.Create(claims)
if err != nil {
panic(err)
}
// 리프레시 토큰 (장기)
refreshToken, err := processor.CreateRefresh(claims)
if err != nil {
panic(err)
}3. 토큰 검증
go
parsed, valid, err := processor.Validate(accessToken)
if err != nil {
// 오류 처리: 만료, 서명 무효 등
panic(err)
}
if valid {
fmt.Println("UserID:", parsed.UserID)
fmt.Println("Role:", parsed.Role)
fmt.Println("ExpiresAt:", parsed.ExpiresAt.Time)
}4. 토큰 갱신
go
newAccessToken, err := processor.Refresh(refreshToken)
if err != nil {
panic(err)
}
fmt.Println("New Access Token:", newAccessToken)5. 토큰 취소
go
// 토큰을 블랙리스트에 추가
err := processor.Revoke(accessToken)
if err != nil {
panic(err)
}
// 취소 여부 확인
revoked, err := processor.IsRevoked(accessToken)
if err != nil {
panic(err)
}
fmt.Println("Revoked:", revoked) // true추가 기능
위 단계는 토큰 생명주기의 핵심 작업을 다룹니다. CyberGo JWT는 다음 기능도 제공합니다 — 각 가이드를 클릭하여 상세 사용법을 확인하세요:
| 기능 | 설명 | 가이드 |
|---|---|---|
| 서명 알고리즘 | HMAC, RSA, RSA-PSS, ECDSA — 4종 12개 알고리즘 | 서명 알고리즘 |
| 커스텀 Claims | CustomClaims 인터페이스로 비즈니스 필드 정의 | 커스텀 Claims |
| 토큰 갱신 및 교체 | 2계층 토큰 TTL 설계, 재사용 vs 일회성 교체 전략 | 토큰 갱신 및 교체 |
| 토큰 블랙리스트 | 취소, 내장 메모리 저장소, Redis 커스텀 백엔드 | 토큰 블랙리스트 |
| 속도 제한 | 토큰 버킷 알고리즘으로 발급 엔드포인트 남용 방지 | 속도 제한 |
| 설정 상세 | 발급자/수신자 검증, 클록 스큐, 필수 만료, 입력 검증 | 설정 상세 |
| 오류 처리 | 19개 센티널 오류 분류와 errors.Is 매칭 | 오류 처리 |
| 테스트와 클록 주입 | FixedClock으로 결정적이고 sleep 없는 시간 제어 | 테스트와 클록 주입 |