Sobes.tech
Senior

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,
})