Skip to content

エラー

センチネルエラー

すべてのエラーは errors.Is() で判定します:

go
var (
    ErrInvalidConfig        = errors.New("invalid configuration")
    ErrInvalidSecretKey     = errors.New("invalid secret key")
    ErrInvalidSigningMethod = errors.New("invalid signing method")

    ErrInvalidToken          = errors.New("invalid token")
    ErrEmptyToken            = errors.New("empty token")
    ErrAlgorithmMismatch     = errors.New("token algorithm does not match configured signing method")
    ErrTokenRevoked          = errors.New("token revoked")
    ErrTokenMissingID        = errors.New("token missing ID")
    ErrTokenTypeMismatch     = errors.New("token type mismatch")
    ErrTokenExpired          = errors.New("token expired")
    ErrTokenNotValidYet      = errors.New("token not valid yet")
    ErrTokenInvalidIssuer    = errors.New("token invalid issuer")
    ErrTokenInvalidAudience  = errors.New("token invalid audience")
    ErrExpirationRequired    = errors.New("token missing expiration claim")

    ErrInvalidClaims = errors.New("invalid claims")

    ErrRateLimitExceeded = errors.New("rate limit exceeded")

    ErrBlacklistNotConfigured = errors.New("blacklist not configured")

    ErrProcessorClosed = errors.New("processor closed")
    ErrStoreClosed     = errors.New("blacklist store is closed")
)

エラー一覧

エラー説明errors.Is() での確認
ErrInvalidConfig設定が無効New()Config.Validate()
ErrInvalidSecretKey秘密鍵が無効New()
ErrInvalidSigningMethod署名メソッドが無効New()
ErrInvalidTokenトークンが無効(署名エラーなど)Validate()Refresh()ValidateInto()RefreshInto()Revoke()IsRevoked()
ErrEmptyTokenトークンが空すべてのトークン操作メソッド
ErrAlgorithmMismatchトークンのアルゴリズムが設定と一致しないValidate()Refresh()ValidateInto()RefreshInto()
ErrTokenRevokedトークンが失効済みValidate()Refresh()ValidateInto()RefreshInto()
ErrTokenMissingIDトークンに ID がないRevoke()IsRevoked()
ErrTokenTypeMismatchトークンタイプの不一致(アクセストークンでリフレッシュを試行)Refresh()RefreshInto()
ErrTokenExpiredトークンの有効期限切れValidate()Refresh()ValidateInto()RefreshInto()
ErrTokenNotValidYetトークンがまだ有効ではないValidate()Refresh()ValidateInto()RefreshInto()
ErrTokenInvalidIssuer発行者が一致しないValidate()Refresh()ValidateInto()RefreshInto()Revoke()IsRevoked()
ErrTokenInvalidAudienceオーディエンスが一致しないValidate()Refresh()ValidateInto()RefreshInto()Revoke()IsRevoked()
ErrExpirationRequiredRequireExpiration が有効だがトークンに exp クレームがないValidate()Refresh()ValidateInto()RefreshInto()
ErrInvalidClaimsClaims の検証に失敗Create()CreateRefresh()Validate()Refresh()ValidateInto()RefreshInto()
ErrRateLimitExceededレート制限を超過Create()CreateRefresh()Refresh()RefreshInto()
ErrBlacklistNotConfiguredブラックリストが未設定Revoke()
ErrProcessorClosedProcessor がクローズ済みすべてのメソッド
ErrStoreClosedストアがクローズ済みRevoke() など

シーン別分類

設定段階

エラー発生メソッド典型的な原因
ErrInvalidConfigNew()複数の設定項目が不正
ErrInvalidSecretKeyNew()HMAC 秘密鍵が 32 バイト未満または弱鍵
ErrInvalidSigningMethodNew()12 種の内蔵アルゴリズムにない

トークン検証

エラー発生メソッド典型的な原因
ErrEmptyTokenすべてのトークン操作メソッド空文字列の渡し
ErrInvalidTokenValidate()Refresh()ValidateInto()RefreshInto()Revoke()IsRevoked()署名の不一致またはフォーマットエラー
ErrAlgorithmMismatchValidate()Refresh()ValidateInto()RefreshInto()トークンヘッダーのアルゴリズムが設定と一致しない
ErrExpirationRequiredValidate()Refresh()ValidateInto()RefreshInto()RequireExpiration が有効だがトークンに exp クレームがない
ErrTokenExpiredValidate()Refresh()ValidateInto()RefreshInto()exp 時刻を超過
ErrTokenNotValidYetValidate()Refresh()ValidateInto()RefreshInto()nbf 時刻にまだ達していない
ErrTokenInvalidIssuerValidate()Refresh()ValidateInto()RefreshInto()Revoke()IsRevoked()issConfig.Issuer と一致しない
ErrTokenInvalidAudienceValidate()Refresh()ValidateInto()RefreshInto()Revoke()IsRevoked()audConfig.ExpectedAudience と一致しない
ErrTokenRevokedValidate()Refresh()ValidateInto()RefreshInto()トークンがブラックリストにある
ErrTokenTypeMismatchRefresh()RefreshInto()アクセストークン(token_type=access)でリフレッシュを試行
ErrInvalidClaimsCreate()CreateRefresh()Validate()Refresh()ValidateInto()RefreshInto()ビジネス検証の失敗
ErrTokenMissingIDRevoke()IsRevoked()トークンに jti フィールドがない

レート制限とブラックリスト

エラー発生メソッド典型的な原因
ErrRateLimitExceededCreate()CreateRefresh()Refresh()RefreshInto()ウィンドウ内のリクエスト上限を超過
ErrBlacklistNotConfiguredRevoke()ブラックリストストアが未設定
ErrTokenMissingIDRevoke()IsRevoked()トークンに jti フィールドがない

ライフサイクル

エラー発生メソッド典型的な原因
ErrProcessorClosedすべてのメソッドClose() 呼び出し後に操作を継続
ErrStoreClosedRevoke() などブラックリストストアがクローズ済み

エラー処理パターン

go
import "errors"

claims, valid, err := processor.Validate(tokenString)
if err != nil {
    switch {
    case errors.Is(err, jwt.ErrTokenExpired):
        // トークン有効期限切れ - ユーザーにリフレッシュを案内
    case errors.Is(err, jwt.ErrTokenRevoked):
        // トークンが失効済み - アクセスを拒否
    case errors.Is(err, jwt.ErrInvalidToken):
        // 署名が無効 - アクセスを拒否
    case errors.Is(err, jwt.ErrProcessorClosed):
        // システムエラー - Processor がクローズ済み
    default:
        // 不明なエラー
    }
}

エラー型

ValidationError

go
type ValidationError struct {
    Field   string
    Message string
    Err     error
}

フィールドレベルの検証失敗エラー。詳細は型と定数 → ValidationErrorを参照。