JWT және Cookie дегеніміз не және олар қалай ерекшеленеді?
sobes.tech AI
AI-дан жауап
JWT (JSON Web Token) — бұл JSON-объект түрінде ақпаратты екі тарап арасында тасымалдау үшін қолданылатын ықшам, URL-қауіпсіз токен. Әдетте, аутентификация және авторизация үшін пайдаланылады: сервер JWT-ны клиентке сәтті кіргеннен кейін береді, ал клиент әр сұрауда осы токенді жіберіп, өз тұлғасын растайды. JWT үш бөліктен тұрады: тақырып, жүктеме (payload) және қолтаңба, бұл тұтастық пен түпнұсқалықты тексеруге мүмкіндік береді.
Cookie — бұл клиент жағында деректерді сақтау механизмі, оны браузер автоматты түрде тиісті доменге сұрау кезінде жібереді. Cookie жиі сессия идентификаторларын, пайдаланушы параметрлерін және басқа деректерді сақтау үшін пайдаланылады.
Негізгі айырмашылықтар:
- Сақтау орны: JWT әдетте localStorage немесе sessionStorage-да сақталады, ал Cookie браузерде сақталып, автоматты түрде сұраулармен жіберіледі.
- Автоматты жіберу: Cookie браузер арқылы автоматты түрде жіберіледі, ал JWT-ді сұраулардың тақырыптарына (мысалы, Authorization) қолмен қосу керек.
- Қауіпсіздік: Cookie HttpOnly және Secure флагтерімен қорғалған болуы мүмкін, бұл XSS шабуылдарының қаупін азайтады. JWT, егер localStorage-да сақталса, XSS-ке осал.
- Қолданылуы: JWT — ақпаратты тасымалдау үшін қолданылатын токен форматы, Cookie — клиент пен сервер арасында деректерді сақтау және тасымалдау тәсілі.
Go тілінде JWT қолдану мысалы:
// 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,
})