Sobes.tech
Back to questions
Senior
3

Что такое JWT и Cookie, чем они отличаются?

Companies where asked
X5 techX5 tech

Answer from AI

sobes.tech AI

JWT (JSON Web Token) — это компактный, URL-безопасный токен, который используется для передачи информации между сторонами в виде JSON-объекта. Обычно применяется для аутентификации и авторизации: сервер выдает JWT клиенту после успешного входа, и клиент отправляет этот токен с каждым запросом для подтверждения своей личности. JWT содержит три части: заголовок, полезную нагрузку (payload) и подпись, что обеспечивает целостность и проверку подлинности.

Cookie — это механизм хранения данных на стороне клиента, который браузер автоматически отправляет на сервер при каждом запросе к соответствующему домену. Cookie часто используются для хранения сессионных идентификаторов, настроек пользователя и других данных.

Основные отличия:

  • Место хранения: JWT обычно хранится в localStorage или sessionStorage, а Cookie — в браузере и автоматически отправляется с запросами.
  • Автоматическая отправка: Cookie отправляются браузером автоматически, JWT нужно вручную добавлять в заголовки запросов (например, Authorization).
  • Безопасность: Cookie могут быть защищены флагами HttpOnly и Secure, что снижает риск XSS-атак. JWT, если хранится в localStorage, уязвим к XSS.
  • Использование: JWT — это формат токена для передачи информации, Cookie — способ хранения и передачи данных между клиентом и сервером.

Пример использования JWT в Go:

// Создание JWT токена
import (
    "github.com/dgrijalva/jwt-go"
    "time"
)

token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
    "user_id": 123,
    "exp": time.Now().Add(time.Hour * 72).Unix(),
})
signedToken, err := token.SignedString([]byte("secret"))

Cookie устанавливается в HTTP ответе:

http.SetCookie(w, &http.Cookie{
    Name:  "session_id",
    Value: "abc123",
    Path:  "/",
    HttpOnly: true,
})