> Что такое JWT и как он работает (Go)

Уровень: junior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Wildberries

Стек: Go

> Пример ответа

JWT (JSON Web Token) - это компактный, URL-безопасный способ передачи утверждений (claims) между сторонами в виде JSON-объекта. Он состоит из трех частей, разделенных точками: заголовок (header), полезная нагрузка (payload) и подпись (signature). Заголовок обычно содержит тип токена и алгоритм подписи (например, HS256 или RS256). Полезная нагрузка содержит утверждения - данные о пользователе (например, user_id, роль, срок действия). Подпись создается путем кодирования заголовка и полезной нагрузки в Base64URL, объединения их через точку и хеширования с секретным ключом (для HMAC) или приватным ключом (для RSA/ECDSA).

В Go работа с JWT часто ведется через библиотеку github.com/golang-jwt/jwt/v5. Пример создания токена:

GO
import "github.com/golang-jwt/jwt/v5"
claims := jwt.MapClaims{
"user_id": 123,
"role": "admin",
"exp": time.Now().Add(24 * time.Hour).Unix(),
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
tokenString, err := token.SignedString([]byte("secret-key"))

Верификация происходит так:

GO
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("unexpected signing method")
}
return []byte("secret-key"), nil
})
if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
// используем claims["user_id"] и т.д.
}

Ключевые моменты: JWT не шифрует данные (они только закодированы в Base64), поэтому не храните в payload чувствительную информацию. Подпись гарантирует целостность, но не конфиденциальность. Для защиты от подделки всегда проверяйте алгоритм подписи на стороне сервера.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью