Skip to content

クイックスタート

インストール

bash
go get github.com/cybergodev/jwt

Go 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アルゴリズム署名アルゴリズム
カスタム ClaimsCustomClaims インターフェースでビジネスフィールドを定義カスタム Claims
トークンリフレッシュとローテーション2層トークン TTL 設計、再利用 vs 一回限りローテーション戦略トークンリフレッシュとローテーション
トークンブラックリスト失効、内蔵メモリストア、Redis カスタムバックエンドトークンブラックリスト
レート制限トークンバケットアルゴリズムで発行エンドポイントの悪用を防止レート制限
設定詳細発行者/オーディエンス検証、クロックスキュー、必須有効期限、入力バリデーション設定詳細
エラー処理19個のセンチネルエラー分類と errors.Is マッチングエラー処理
テストとクロック注入FixedClockで決定的かつ sleep 不要の時間制御テストとクロック注入

次のステップ