Vol 1.0: JWT -ն կարելի է հասկանալ

Kristine Armiyants
4 min readAug 22, 2022

--

Hey !
Այս անգամ փորձենք հասկանալ՝ jwt-ն ինչ է, ինչպես տարբերել authentication-ը և authorization-ը, ինչու հայտնվեց JWT-ն և ինչ հարց է լուծում։
Իսկ հետագա հոդվածում կդիտարկենք ավելի գործնական և անվտանգությանը վերաբերող հարցեր։

Ի՞ՆՉ Է JWT -ն
Սկսենք հապավումը բացելուց, միգուցե մի բան պարզ դառնա. JSON Web Token (JWT)

Ըմմմ, տոկե՞ն, JSO՞N

Հիմա հերթով քննարկենք. Դրա համար ենք հավաքվել ))

JSON-ը նշանակում է JavaScript Object Notation (օբյեկտների նշանագրություն): JSON-ը թեթև ֆորմատ է՝ տվյալների պահպանման և փոխանցման համար:

Ամենապարզ ձևով տոկենը կարող ենք հասկանալ որպես որոշակի ինֆորմացիա, որը, մեր դեպքում, գաղտնագրված է և ներկայացնում է մեկ այլ օբյեկտի։ Մեր դեպքում այդ տոկենը string type-ի է. այսինքն այն ուղղակի string է՝ կազմված տառերից, թվերից և մի քանի կետերից:

Այսպիսով, JWT -ը JSON-ի վրա հիմնված, տվյալների կոմպակտ և անվտանգ եղանակով փոխանցման մեթոդ է: Այն ստանդարտ է (RFC 7519), որն օգտագործվում է հատկապես վեբ բրաուզերներում մուտքի/նույնականացման համատեքստում: JSON օբյեկտում պարունակվող ինֆորմացիան կարելի է ստուգել, քանի որ այն թվային ստորագրված է (digitally signed). հիշու՞մ եք, մենք խոսել ենք էս մասին։

Authentication (նույնականացում) VS Authorization (լիազորում)

Պարզ ասած, authentication-ը անվտանգության ցանկացած գործընթացի առաջին քայլն է։ Դրան ընթացքում ստուգվում են credentials (օրինակ՝ գաղտնաբառ) և հաստատում է, որ օգտվողի ինքնությունը: Authorization-ը (որտեղ JWT-ն մտնում է խաղի մեջ) օգտվողին հնարավորություն է տալիս հասանելիություն ունենալ որոշակի գործառույթներ կամ ռեսուրսներ:

Այլ կերպ ասած, authentication-ը ակումբում ստուգում է ձեր ID-ն՝ համոզվելու համար, որ դուք 18+ տարեկան եք: Authorization-ը այն կնիքն է կամ ձեռքի ժապավենները, որը նա տալիս է ձեզ՝ թույլ տալու մուտք գործել դեպի ակումբ կամ հաստատելով, որ դուք թույլատրվում եք մուտք գործել VIP տարածք օրինակ:

Որտեղի՞ց հայտնվեց այս JWT -ն

Առաջին անգամ JWT -ի մասին խոսվել է 2010-ին, իսկ որն էր այն հարցը, որը լուծելու համար ստեղծվեց JWT — ն, չէ որ, ցանկացած նոր բան ստեղծվում է ըստ պահանջի։

Եթե հասել եք այս հոդվածը կարդալուն, ուրեմն, թույլ տվեք ենթադրել, որ գոնե լսել եք session cookies-ի (քուքիներ. կներեք, բայց հայերենթխուկներ պետք ա լինի, օկ -_- )

Եկեք օրինակի վրա հասկանանք քուքիները, ոնց են օգտագործվում authorization-ի համար.

  • user-ը մուտք է գործում կայք (authentication անցնելուց հետո) իր բրաուզերից (client):
  • Սերվերը պահպանում է իր session-ը սերվերի հիշողության մեջ (backend-ում՝ Database-ում) և հատկացնում է եզակի session ID, որը համապատասխանում է հիշողության այդ մասին:
  • Այնուհետև սերվերը այս session ID-ն ուղարկում է client-ին` որպես թխուկ…. էէէ ասում եմ թխուկ, cookies :))
  • Հետագայում, երբ user-ը փորձում է մուտք գործել կայքի այլ հատվածներ կամ անել որևէ ֆունկցիա, client-ը սերվերին հարցում է ուղարկում session ID-ի քուքի հետ:
  • Սերվերը ստանում է այս ID-ն և ստուգում է՝ արդյոք այն գոյություն ունի հիշողության մեջ: Երբ սերվերը տեսնում է, որ ID-ն գոյություն ունի հիշողության մեջ, այն ստուգում է՝ արդյոք այդ ID-ով օգտվողը լիազորված է մուտք գործել տվյալ էջ, անել այս ֆունկցիան և այլն:

Իսկ ինչը էն չէր մեր այս session cookies-ի հետ ?

Նորից հասկանանք օրինակով.

  • user-ը մուտք է գործում կայք (authentication անցնելուց հետո) իր բրաուզերից (client):
  • Այժմ սակայն, backend-ը ստեղծում է JWT, կոդավորում է այն, սերիականացնում և ստորագրում է եզակի գաղտնի բանալիով: Այս գաղտնի բանալին backend-ին թույլ է տալիս իմանալ, թե արդյոք նշանը կեղծվել է:
  • backend-ը JWT-ն ուղարկում է client-ին: Հիմնական տարբերությունն այստեղ՝ ոչինչ չի պահվում սերվերում: JWT-ն պարունակում է user-ի մասին անհրաժեշտ տեղեկությունները:
  • Այնուհետև client-ը պահում է JWT-ն:
  • Ինչպես արվել է վերևի օրինակում session ID cookies-ի հետ, client-ը սերվերին դիմում է jwt-ով։
  • Հաստատելով, որ JWT-ը վավեր է՝ սերվերն այնուհետև պատասխան է ուղարկում հաճախորդին՝ ասելով, թե արդյոք նա իրավասու է կատարել պահանջվող գործողությունը, թե ոչ (ինչպես վերևի օրինակում):

Այստեղ նկատելու հիմնական տարբերությունն այն է, որ cookies-ի դեպքում տեղեկատվությունը պահվում է սերվերում, մինչդեռ JWT-ի դեպքում՝ client-ի կողմից: Քանի որ սերվերը կարիք չունի database գրանցելու, ամեն անգամ հիշողության մեջ փնտրելու, սա շատ է պարզեցնում ամեն ինչ, հատկապես մի քանի սերվերների հետ աշխատելիս(microservices) և տարբեր session-ներ ունենալիս:

Հուսամ հավանեցիք, մի օգուտ քաղեցիք ու կսպասեք ավելի կիրառական հետագա մասին։ Եթե ունեք որևէ բան ավելացնելու, նկատածը շտկելու ցանկություն, let me know մեկնաբանություններով, իսկ ինձ օգնեք հոդվածը տարածելով, clap անելով (sharing is caring).

Take care and stay safe :)))

--

--

Kristine Armiyants

Software Engineer | AWS UG Armenia Lead ☁️ | AWS Community Builder