Что такое JWT и Cookie, чем они отличаются?
Ответ от нейросети
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,
})