Junior
JWT (JSON Web Token) эмне?
sobes.tech AI
AIден жооп
JSON Web Token (JWT) — бул компакттуу, URL-ге коопсуз маалыматтарды өткөрүү ыкмасы JSON форматында.
Иштөө принциптери:
-
Токен үч бөлүктөн турат, ноктолор менен бөлүнгөн (
.):header.payload.signature. -
Header (Баштама): Токен жөнүндө мета-маалыматтарды камтыйт, мисалы, токен түрү (JWT) жана кол коюу алгоритми (мисалы, HS256, RS256).
{ "alg": "HS256", "typ": "JWT" } -
Payload (Жүк): "claims" - билдирүүлөр же маалыматтар, биз өткөргүбүз келет. Бир нече түрү бар:
- Registered claims: Катталган, бирок опционалдуу claims, мисалы,
iss(чыгаруучу),exp(жарактуулук мөөнөтү),sub(тема). - Public claims: Ачык колдонуу үчүн аныкталган, IANA JSON Web Token Registry'ге катталуусу керек же URI болушу керек, ал домендик кеңейтүүнү камтыйт, ал кагаздардан корголгон.
- Private claims: Эркин билдирүүлөр, тараптар ортосунда макулдашылган.
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 } - Registered claims: Катталган, бирок опционалдуу claims, мисалы,
-
Signature (Кол коюу): Коддолгон баштама жана жүктүн бириктирилиши менен түзүлөт, сырткы ачкыч жана баштамада көрсөтүлгөн алгоритм колдонулат. Бул токендин бүтүндүгүн камсыздайт - эгер кимдир бирөө баштама же жүктү өзгөртсө, кол коюу жараксыз болот.
# HS256 колдонуп кол коюу түзүү мисалы import hmac, hashlib header_str = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' # Base64Url(Баштама) payload_str = 'eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ' # Base64Url(Жүк) secret = 'your_secret_key' # Кол коюу = HMACSHA256(Base64Url(Баштама) + "." + Base64Url(Жүк), сыр) signature = hmac.new( secret.encode('utf-8'), (header_str + '.' + payload_str).encode('utf-8'), hashlib.sha256 ).digest() # Кол коюуну Base64Url менен коддоо import base64 signature_b64url = base64.urlsafe_b64encode(signature).rstrip(b'=').decode('ascii') # Жыйынтыктык токен: header_str + '.' + payload_str + '.' + signature_b64url
Колдонуу:
- Аутентификация: Сервер колдонуучуга ийгиликтүү аутентификациядан кийин токен берет. Колдонуучу ар бир суроо менен бул токенди жиберет. Сервер токендин жарактуулугун текшерет жана ресурстарга кирүүгө уруксат берет.
- Маалымат алмашуу: Коопсуз кичинекей маалыматтарды өткөрүү ар кандай кызматтар арасында.
Артыкчылыктары:
- Компакттык: XMLге салыштырмалуу аз маалымат өткөрүү.
- Өзүн-өзү жетиштүү: Токенде керектүү маалыматтар бар, бул ар бир суроо үчүн базаны кайрылууну азайтат.
- Stateless: Серверге сессия маалыматтарын сактоо керек эмес.
- Криптографиялык кол коюу: Маалыматтын бүтүндүгүн камсыздайт.
Кемчиликтери:
- Токенди кайтаруу мүмкүн эмес: Берилгени менен, токен анын мөөнөтү бүтө турганга чейин иштейт, эгер кара тизмелер механизми ишке киргизилбесе.
- Сырткы ачкычты сактоо: Сырткы ачкыч коопсуз сакталуусу керек.
- Өлчөмү:
payloadичинде маалымат көбөйгөн сайын, токендин өлчөмү да өсөт.