Skip to content

인터페이스 정의

TokenManager

go
type TokenManager interface {
    Create(claims CustomClaims) (string, error)
    Validate(tokenString string) (Claims, bool, error)
    CreateRefresh(claims CustomClaims) (string, error)
    Refresh(refreshTokenString string) (string, error)
    ValidateInto(tokenString string, claims CustomClaims) (CustomClaims, bool, error)
    RefreshInto(refreshTokenString string, claims CustomClaims) (string, error)
    Revoke(tokenString string) error
    IsRevoked(tokenString string) (bool, error)
    ParseUnverified(tokenString string, claims any) error
    Close() error
    IsClosed() bool
}

JWT 토큰 작업 핵심 인터페이스. 모든 구현은 동시성에 안전해야 합니다. 기본 구현은 *Processor입니다.

메서드는 세 그룹으로 나뉩니다:

  • 토큰 생성: Create, CreateRefresh
  • 검증 및 갱신: Validate, ValidateInto, Refresh, RefreshInto
  • 일반 작업: Revoke, IsRevoked, ParseUnverified, Close, IsClosed
interface

메서드

메서드시그니처설명
CreateCreate(claims CustomClaims) (string, error)액세스 토큰 생성
ValidateValidate(tokenString string) (Claims, bool, error)토큰 검증
CreateRefreshCreateRefresh(claims CustomClaims) (string, error)리프레시 토큰 생성
RefreshRefresh(refreshTokenString string) (string, error)토큰 갱신
ValidateIntoValidateInto(tokenString string, claims CustomClaims) (CustomClaims, bool, error)커스텀 Claims 로 검증
RefreshIntoRefreshInto(refreshTokenString string, claims CustomClaims) (string, error)커스텀 Claims 로 갱신
RevokeRevoke(tokenString string) error토큰 취소
IsRevokedIsRevoked(tokenString string) (bool, error)취소 여부 확인
ParseUnverifiedParseUnverified(tokenString string, claims any) error검증 없이 파싱
CloseClose() error리소스 해제
IsClosedIsClosed() bool종료 여부 확인

구현 타입

타입설명
*Processor기본 구현

CustomClaims

go
type CustomClaims interface {
    GetRegisteredClaims() *RegisteredClaims
    Validate() error
}

커스텀 Claims 인터페이스. Create, ValidateInto, RefreshInto 등의 메서드에서 사용됩니다.

interface

검증 계약

Processor 는 *Claims와 다른 타입에 대해 다른 검증 경로를 실행합니다:

타입검증 동작
*Claims심층 검증: 모든 필드 (길이 제한, 인젝션 패턴, 제어 문자)
기타 타입Validate() 호출 + 등록 선언 문자열 정제 (Issuer, Subject, ID, TokenType, Audience)

주의

*Claims가 아닌 타입의 경우, 커스텀 구조체 필드는 심층 검증되지 않습니다. 구현자는 Validate() 메서드에서 모든 비즈니스 필드를 직접 검증해야 합니다.

메서드

메서드시그니처설명
GetRegisteredClaimsGetRegisteredClaims() *RegisteredClaims표준 JWT 필드 반환
ValidateValidate() error커스텀 검증 로직

구현 타입

타입설명
*Claims내장 Claims 구현

BlacklistStore

go
type BlacklistStore interface {
    Add(tokenID string, expiresAt time.Time) error
    Contains(tokenID string) (bool, error)
    Close() error
}

블랙리스트 저장소 백엔드 인터페이스.

interface

메서드

메서드시그니처설명
AddAdd(tokenID string, expiresAt time.Time) error블랙리스트에 추가
ContainsContains(tokenID string) (bool, error)블랙리스트 포함 여부 확인
CloseClose() error리소스 해제

RateLimitProvider

go
type RateLimitProvider interface {
    Allow(key string) bool
    Reset(key string)
    Close()
}

속도 제한 인터페이스. Processor 는 토큰 생성 중 단일 검사를 위해 Allow(key)를 호출합니다.

AllowN 에 대하여

인터페이스 자체는 단일 요청 검사를 위한 Allow만 정의합니다. 배치 메서드 AllowN(key string, n int) bool은 구체 타입 *RateLimiter의 확장 메서드이며 이 인터페이스의 일부가 아닙니다.

interface

메서드

메서드시그니처설명
AllowAllow(key string) bool단일 요청 허용 여부 확인
ResetReset(key string)지정된 키의 속도 제한 상태 초기화
CloseClose()리소스 해제

구현 타입

타입설명
*RateLimiter내장 토큰 버킷 구현

ClockProvider

go
type ClockProvider interface {
    Now() time.Time
}

클럭 인터페이스, 시간 주입용 (테스트 시나리오).

interface

구현 타입

타입설명
SystemClock시스템 클럭
FixedClock고정 시간 클럭

RateLimitKeyer

go
type RateLimitKeyer interface {
    RateLimitKey() string
}

선택적 인터페이스, 커스텀 Claims 가 이 인터페이스를 구현하여 속도 제한 키를 제공할 수 있습니다. 속도 제한 키 조회 우선순위: Subject*Claims.UserIDRateLimitKey().

interface