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 — 12 алгоритмов в 4 семействахАлгоритмы подписи
Пользовательские ClaimsОпределение бизнес-полей через интерфейс CustomClaimsПользовательские Claims
Обновление и ротация токеновДвухуровневый TTL, стратегии повторного использования и одноразовой ротацииОбновление и ротация токенов
Чёрный список токеновОтзыв, встроенное хранилище в памяти, пользовательские бэкенды RedisЧёрный список токенов
Ограничение скоростиАлгоритм token bucket для защиты конечных точек выпускаОграничение скорости
Подробная конфигурацияПроверка издателя/аудитории, допуск часов, обязательный срок, проверка вводаПодробная конфигурация
Обработка ошибок19 категорий ошибок-сигналов и сопоставление errors.IsОбработка ошибок
Тестирование и внедрение часовFixedClock для детерминированного управления временем без sleepТестирование и внедрение часов

Дальнейшие шаги