fbpx

Оршил

Орчин үеийн веб болон мобайл системүүд аюулгүй, өргөтгөх боломжтой authentication шийдэл шаардах болсон. Өмнө нь сервер дээр session хадгалдаг уламжлалт арга түгээмэл байсан бол өнөөдөр JWT (JSON Web Token) нь distributed system, microservice, API-д суурилсан архитектурт хамгийн их ашиглагддаг стандарт болсон.

Гэхдээ JWT-г буруу ашиглавал аюулгүй байдлын ноцтой асуудал үүсэх эрсдэлтэй. Тиймээс software engineer хүн JWT-г зүгээр нэг “token” гэж харах биш, дотоод бүтэц, зорилго, сул тал, зөв ашиглах аргачлалыг бүрэн ойлгох ёстой.

Энэ нийтлэлээр:

  • JWT гэж юу вэ
  • Яагаад хэрэгтэй болсон бэ
  • Яаж ажилладаг вэ
  • Хаана ашиглах нь зөв бэ
  • Шилдэг практикууд (best practices)

гэсэн сэдвүүдийг гүнзгий тайлбарлах гэж хичээх болноо.


JWT Token гэж юу вэ?

JWT (JSON Web Token) гэдэг нь хоёр талын хооронд мэдээллийг JSON хэлбэрээр аюулгүй дамжуулах зориулалттай, compact буюу богино token формат юм. JWT нь digital signature-аар хамгаалагдсан байдаг тул token доторх мэдээлэл өөрчлөгдөөгүй гэдгийг баталгаажуулах боломжтой.

JWT-г ихэвчлэн дараах зорилгоор ашигладаг:

  • Хэрэглэгчийг баталгаажуулах (Authentication)
  • Эрх шалгах (Authorization)
  • Service хооронд identity дамжуулах

JWT-ийн гол онцлог нь stateless буюу сервер дээр session хадгалах шаардлагагүй явдал юм.


JWT яагаад хэрэгтэй болсон бэ?

JWT гарч ирэхээс өмнө ихэнх системүүд session-based authentication ашигладаг байсан.

Тэр процесс нь:

  1. Хэрэглэгч login хийнэ
  2. Сервер session үүсгэнэ
  3. Session ID-г database эсвэл memory-д хадгална
  4. Client session ID-г request бүрт явуулна

Энэ арга нь дараах сул талтай:

  • Серверийг олон болгоход session хуваалцах асуудал үүснэ
  • Redis, DB зэрэг нэмэлт storage шаардлагатай
  • Microservice архитектурт тохиромжгүй
  • Performance болон scalability муу

JWT нь эдгээр асуудлыг дараах байдлаар шийддэг:

  • Session хадгалах шаардлагагүй
  • Request бүр өөрөө identity агуулдаг
  • Серверүүд хооронд state хуваалцах шаардлагагүй
  • Cloud болон microservice-д маш тохиромжтой

JWT-ийн бүтэц

JWT нь 3 хэсгээс бүрдэнэ. Эдгээр нь цэгээр тусгаарлагдана.

header.payload.signature

1. Header

Header хэсэгт token-ий мета мэдээлэл байна.

{
  "alg": "HS256",
  "typ": "JWT"
}
  • alg – гарын үсэг зурах алгоритм
  • typ – token-ийн төрөл

2. Payload

Payload хэсэгт claims буюу token-д агуулагдах мэдээлэл байна.

{
  "sub": "user_id_123",
  "email": "user@example.com",
  "role": "admin",
  "iat": 1710000000,
  "exp": 1710003600
}

Claim-үүд 3 төрөлтэй:

  • Registered claims (exp, iat, iss, aud)
  • Public claims
  • Private claims (таны системд зориулсан)

Чухал анхаарах зүйл:
Payload нь encryption хийгдээгүй, зөвхөн base64 encoding хийдэг. Тиймээс хэн ч decode хийж уншиж чадна.


3. Signature

Signature нь token өөрчлөгдөөгүй гэдгийг баталгаажуулна.

HMACSHA256(
  base64(header) + "." + base64(payload),
  secret
)

Хэрвээ payload эсвэл header өөрчлөгдвөл signature таарахгүй болно.


JWT Authentication хэрхэн ажилладаг вэ?

JWT ашигласан стандарт authentication урсгал:

  1. Хэрэглэгч login хийнэ
  2. Сервер хэрэглэгчийн мэдээллийг шалгана
  3. Сервер JWT token үүсгэнэ
  4. Token-ийг client-д илгээнэ
  5. Client request бүрт token явуулна
  6. Сервер token-ийг шалгана
  7. Эрх байвал хүсэлтийг зөвшөөрнө

Token ихэвчлэн дараах header-ээр дамждаг:

Authorization: Bearer <JWT>

Stateless Authentication гэж юу вэ?

JWT-ийн хамгийн том давуу тал нь stateless байдал юм.

Өөрөөр хэлбэл:

  • Сервер session хадгалахгүй
  • Request бүр өөрөө identity агуулна
  • Сервер зөвхөн token шалгана

Энэ нь:

  • Microservice
  • API Gateway
  • Cloud-native систем
  • Mobile application

зэрэг орчинд маш тохиромжтой.


JWT болон Session-ийн харьцуулалт

ШинжJWTSession
Сервер storageБайхгүйБайна
ScalabilityМаш сайнХязгаарлагдмал
LogoutХэцүүАмар
Token sizeТомЖижиг
Аюулгүй байдалБуруу ашиглавал эрсдэлтэйТогтвортой

JWT бол session-ийг бүрэн орлох зүйл биш, зөвхөн зөв тохиолдолд ашиглах хэрэгсэл юм.


JWT ашиглах түгээмэл тохиолдлууд

  • REST API
  • Single Page Application
  • Mobile app
  • Microservice хоорондын authentication
  • OAuth access token

JWT ашиглах шилдэг практикууд

Энэ хэсэг хамгийн чухал.


1. JWT дотор нууц мэдээлэл бүү хадгал

JWT payload нь уншигдах боломжтой.

Хадгалж болохгүй зүйлс:

  • Password
  • Card number
  • Private key
  • Sensitive personal data

Зөвхөн ID, role, permission зэрэг мэдээлэл хадгал.


2. Заавал HTTPS ашигла

JWT-г HTTP-ээр дамжуулах нь маш аюултай.

HTTPS байхгүй бол:

  • Token хулгайлагдана
  • User impersonation боломжтой

HTTPS бол заавал байх ёстой шаардлага.


3. Token-ийн хугацааг богино байлга

Санал болгож буй хугацаа:

  • Access token: 5–15 минут
  • Refresh token: 7–30 хоног

exp claim-ийг заавал ашигла.


4. Refresh Token зөв ашигла

Урт хугацаатай access token ашиглаж болохгүй.

Зөв загвар:

  • Богино access token
  • Урт refresh token
  • Refresh token revoke хийх боломжтой байх

5. Зөв signing algorithm сонго

Зөвлөмж:

  • RS256
  • ES256

HS256 ашиглах бол secret маш сайн хамгаалагдсан байх ёстой.


6. Claim шалгалтыг бүрэн хий

Заавал шалгах:

  • Signature
  • Expiration (exp)
  • Issuer (iss)
  • Audience (aud)
  • Not before (nbf)

7. Client дээр token-ийг аюулгүй хадгал

Сайн сонголт:

  • HttpOnly cookie
  • Secure cookie

Муу сонголт:

  • LocalStorage (XSS эрсдэлтэй)

8. Token revoke стратеги төлөвлө

JWT stateless тул revoke хийх хэцүү.

Шийдлүүд:

  • Богино expiration
  • Token blacklist
  • Refresh token rotation
  • jti ашиглах

9. JWT-г session орлуулах гэж сохроор бүү ашигла

JWT тохиромжгүй нөхцөл:

  • Admin panel
  • Banking систем
  • Шууд logout шаардлагатай систем

10. Monitoring болон logging хий

Анзаарах зүйлс:

  • Token reuse
  • Suspicious refresh
  • Replay attack

Security гэдэг бол зөвхөн код биш, хяналт юм.


JWT ашиглах үед гардаг нийтлэг алдаа

  • JWT-г encryption гэж ойлгох
  • Урт хугацаатай access token ашиглах
  • LocalStorage-д token хадгалах
  • Expiration шалгахгүй байх
  • JWT-г бүх асуудлын шийдэл гэж бодох

JWT ашиглах ёсгүй нөхцөлүүд

JWT ашиглахгүй байсан нь дээр:

  • Энгийн монолит систем
  • Шууд logout чухал үед
  • Compliance өндөр шаардлагатай систем
  • Session storage асуудал биш үед

Орчин үеийн Software Engineering дахь JWT

JWT нь дараах архитектурт төгс тохирно:

  • Zero-trust system
  • API Gateway
  • Microservice
  • Cloud deployment
  • Mobile-first application

JWT-г сайн ойлгодог инженер бол authentication дизайныг зөв хийдэг.


Дүгнэлт

JWT бол орчин үеийн программ хангамжийн салбарт маш хүчирхэг хэрэгсэл юм. Гэхдээ хүчтэй зэвсэг буруу гарт орвол аюултайтай адил, JWT-г буруу ашиглавал системийн аюулгүй байдалд том эрсдэл үүсгэнэ.

Жинхэнэ software engineer хүн:

  • JWT хэрхэн ажилладгийг ойлгодог
  • Хэзээ ашиглах, хэзээ ашиглахгүйг мэддэг
  • Best practice-уудыг мөрддөг
  • Security-г нэгдүгээрт тавьдаг

JWT-г зөв ашиглавал scalable, найдвартай системийн суурь болж чадна.

Leave a Reply