Բլոգ
Ի՞նչ է JWT-ը և ինչպես է այն աշխատում․ ամբողջական ուղեցույց սկսնակների համար
Իմացեք, թե ինչ է JWT-ը (JSON Web Token), ինչպես են աշխատում թոքենները, ինչ մասերից են կազմված և ինչու են օգտագործվում ժամանակակից վեբ հավելվածներում նույնականացման համար։

Ի՞նչ է JWT-ը և ինչպես է այն աշխատում
Եթե երբևէ աշխատել եք ժամանակակից վեբ հավելվածների հետ, հավանաբար հանդիպել եք JWT կամ JSON Web Token հասկացությանը։ JWT-ն տվյալների անվտանգ փոխանցման ամենատարածված մեթոդներից մեկն է և լայնորեն օգտագործվում է օգտատերերի նույնականացման (Authentication), թույլտվությունների կառավարման (Authorization) և API-ների պաշտպանության համար։
Այս հոդվածում կիմանաք, թե ինչ է JWT-ը, ինչպես է այն աշխատում, ինչ կառուցվածք ունի և ինչու է այն դարձել ժամանակակից վեբ ծրագրավորման ստանդարտներից մեկը։
Ի՞նչ է JWT-ը
JWT (JSON Web Token)-ը բաց ստանդարտ է (RFC 7519), որը նախատեսված է երկու կողմերի միջև տվյալների անվտանգ փոխանցման համար՝ կոմպակտ JSON օբյեկտի տեսքով։
Յուրաքանչյուր JWT թվային ստորագրված է, ինչի շնորհիվ հնարավոր է համոզվել, որ այն չի փոփոխվել։
Սեսիաների վրա հիմնված նույնականացումից տարբեր՝ JWT-ն անհրաժեշտ տեղեկատվությունը պահում է հենց թոքենի ներսում, այլ ոչ թե սերվերում։
JWT-ի կառուցվածքը
JWT-ն բաղկացած է երեք մասից, որոնք բաժանված են կետերով։
xxxxx.yyyyy.zzzzz
1. Header (Վերնագիր)
Header-ը պարունակում է տեղեկատվություն թոքենի և օգտագործվող ստորագրման ալգորիթմի մասին։
Օրինակ՝
{
"alg": "HS256",
"typ": "JWT"
}
Այստեղ՝
- alg — ստորագրման ալգորիթմ
- typ — թոքենի տեսակ
Այնուհետև Header-ը կոդավորվում է Base64Url ձևաչափով։
2. Payload (Տվյալներ)
Payload-ը պարունակում է օգտատիրոջ մասին տեղեկություններ (claims)։
Օրինակ՝
{
"userId": 15,
"email": "john@example.com",
"role": "admin"
}
Այստեղ կարող են պահվել՝
- օգտատիրոջ ID
- անուն
- էլ․ հասցե
- դեր
- իրավունքներ
- ժամկետի ավարտ
Կարևոր է հասկանալ, որ Payload-ը չի գաղտնագրվում։ Յուրաքանչյուր մարդ կարող է այն վերծանել։
3. Signature (Ստորագրություն)
Signature-ը օգտագործվում է ստուգելու համար, որ թոքենը փոփոխված չէ։
Այն ստեղծվում է հետևյալ կերպ՝
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
Գաղտնի բանալին հայտնի է միայն սերվերին։
Ինչպե՞ս է աշխատում JWT-ը
Սովորական նույնականացման գործընթացը հետևյալն է․
- Օգտատերը մուտք է գործում համակարգ։
- Սերվերը ստուգում է տվյալները։
- Սերվերը ստեղծում է JWT։
- Թոքենը փոխանցվում է հաճախորդին։
- Հաճախորդը պահպանում է JWT-ն։
- Յուրաքանչյուր հարցման ժամանակ JWT-ն ուղարկվում է սերվերին։
- Սերվերը ստուգում է ստորագրությունը։
- Եթե ամեն ինչ ճիշտ է՝ մուտքը թույլատրվում է։
Այս մոտեցումը վերացնում է սերվերում սեսիաներ պահելու անհրաժեշտությունը։
Որտե՞ղ է օգտագործվում JWT-ը
JWT-ն լայնորեն օգտագործվում է՝
- օգտատերերի նույնականացման համար,
- REST API-ներում,
- React, Vue և Angular SPA նախագծերում,
- բջջային հավելվածներում,
- OAuth 2.0-ում,
- միկրոսերվիսային համակարգերում,
- API Gateway-ներում։
JWT-ի առավելությունները
JWT-ն ունի բազմաթիվ առավելություններ.
- Stateless նույնականացում
- Փոքր չափ
- Արագ ստուգում
- Հարմար է բազմաթիվ ծառայությունների միջև օգտագործելու համար
- Հարմար է բջջային հավելվածների համար
- Հեշտ է մասշտաբավորվում
JWT թե՞ Session
| JWT | Session |
|---|---|
| Պահվում է հաճախորդի մոտ | Պահվում է սերվերում |
| Stateless | Stateful |
| Լավ է API-ների համար | Լավ է դասական կայքերի համար |
| Հեշտ է մասշտաբավորվում | Պահանջում է session storage |
Երկու տարբերակներն էլ կիրառվում են՝ կախված նախագծի ճարտարապետությունից։
Արդյո՞ք JWT-ն անվտանգ է
JWT-ն անվտանգ է, եթե ճիշտ է օգտագործվում։
Լավագույն պրակտիկաներն են՝
- օգտագործել HTTPS,
- սահմանել թոքենի ժամկետ,
- Payload-ում չպահել գաղտնի տվյալներ,
- օգտագործել անվտանգ ստորագրման ալգորիթմներ,
- պարբերաբար փոխել գաղտնի բանալին,
- ստուգել յուրաքանչյուր թոքենի ստորագրությունը։
Ամենատարածված սխալները
Սկսնակները հաճախ՝
- պահում են գաղտնաբառերը JWT-ում,
- չեն սահմանում ժամկետի ավարտ,
- չեն ստուգում ստորագրությունը,
- օգտագործում են թույլ գաղտնի բանալիներ,
- փոխանցում են JWT-ն HTTP-ով։
Այս սխալներից խուսափելը զգալիորեն բարձրացնում է անվտանգության մակարդակը։
JWT-ի օրինակ
Սովորական JWT-ն ունի հետևյալ տեսքը․
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJ1c2VySWQiOjE1LCJyb2xlIjoiYWRtaW4ifQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Թեև այն կարծես պատահական տեքստ լինի, իրականում այն բաղկացած է Header, Payload և Signature հատվածներից։
Եզրակացություն
JWT-ն այսօր հանդիսանում է նույնականացման ամենատարածված տեխնոլոգիաներից մեկը։ Այն ապահովում է տվյալների անվտանգ և արագ փոխանցում հաճախորդի և սերվերի միջև՝ առանց սեսիաներ պահելու անհրաժեշտության։
Եթե ստեղծում եք REST API, SPA կամ բջջային հավելվածներ, ապա JWT-ի աշխատանքի սկզբունքների իմացությունը պարտադիր հմտություն է։ HTTPS-ի, ճիշտ ստորագրման և անվտանգության կանոնների պահպանման դեպքում JWT-ն դառնում է հուսալի և արդյունավետ լուծում։