Ինչ իրականում է անում JWT վերծանիչը
JSON Web Token-ը (JWT) նման է թվում է թափանցիկ, պատահական նիշերից բաղկացած երկար տողի, բայց այն գաղտնագրված չէ և գաղտնի ցիֆր չէ։ Դա կոմպակտ, URL-անվտանգ տարա է, որը կառուցվածքային տվյալներ է կրում երկու կողմերի միջև։ Տեղադրեք տոկենը վերևի վերծանիչում, և այն բաժանում է այդ տողը և ցույց տալիս իրական JSON-ը ներսում, մետատվյալները, պահանջները, թե ում համար է տոկենը, և երբ է ավարտվում։ Ամեն ինչ տեղի է ունենում հենց ձեր բրաուզերում։ Տոկենը երբեք չի վերբեռնվում, գրանցվում կամ ուղարկվում ցանկացած տեղ, ինչը կարևոր է, երբ ուսումնասիրում եք ողջ սեսիայի հավաստագիր։

Երեք մաս, երկու կետ
Յուրաքանչյուր ճիշտ ձևավորված JWT-ն երեք Base64url-կոդավորված տողեր են՝ միացած կետերով. header.payload.signature։ Հենց այդ մեկ կետային նիշն է, որով վերլուծիչները գիտեն, թե որտեղ է ավարտվում մեկ հատվածը և սկսվում հաջորդը, և հենց դա է պատճառը, թե ինչու սխալ քանակությամբ կետեր ունեցող տոկենը մերժվում է, նախքան որևէ բան էլ կարդացվի։
Վերնագիրը փոքրիկ JSON օբյեկտ է, որը նկարագրում է հենց տոկենը։ Այն համարյա միշտ պարունակում է typ (տեսակը, սովորաբար JWT) և alg, ստորագրման ալգորիթմը, ինչպիսին են HS256-ը (HMAC՝ SHA-256-ով) կամ RS256-ը (RSA՝ SHA-256-ով)։ Վերնագիրը ստուգողին ասում է ճշգրիտ, թե ինչպես է ստորագրությունը ստեղծվել։
Բեռը մասն է, որի մասին մեծամասնությունը հոգում է։ Այն ևս մեկ JSON օբյեկտ է, որը պահում է պահանջները, պնդումներ օգտատիրոջ և տոկենի մասին։ Սպեցիֆիկացիան պահանջները դասակարգում է որպես գրանցված (ստանդարտ, պահված անուններ), հրապարակային և մասնավոր (ձեր սեփական հավելվածի համար հորինված ընտրովի անուններ)։ Բեռի վերծանումն է, որ բացահայտում է, թե ով է մուտք գործել, ինչ դեր ունի, և երբ է ավարտվում իր սեսիան։
Ստորագրությունը կրիպտոգրաֆիկ կնիքն է։ Այն հաշվարկվում է կոդավորված վերնագրի և բեռի վրա՝ օգտագործելով վերնագրից ալգորիթմը՝ գումարած գաղտնի կամ մասնավոր բանալի։ Քանի որ այն ընդգրկում է մյուս երկու հատվածները, ցանկացած փոփոխություն վերնագրում կամ բեռում, նույնիսկ մեկ նիշ, անվավեր է դարձնում այն։
Ամենահաճախ հանդիպող պահանջները
Գրանցված պահանջները կարճ, եռատառ անուններ են, սահմանված RFC 7519-ով, որպեսզի տարբեր համակարգեր կարողանան փոխգործակցել։ Մի քանիսը հանդիպում են համարյա ամեն տեղ.
iss— issuer (թողարկող). ով է ստեղծել տոկենը (ձեր նույնականացման սերվերը կամ ինքնության մատակարարը)։sub— subject (առարկա). գործող անձը, որի մասին է տոկենը, սովորաբար կայուն օգտատիրոջ ID։aud— audience (հասցեատեր). ստացողը, որի համար է նախատեսված տոկենը։ API-ն պետք է մերժի տոկեններ, որոնց հասցեատերը ինքն իրեն չէ։exp— expiration time (ավարտի ժամանակ). Unix ժամանակադրոշմ, որից հետո տոկենը չպետք է ընդունվի։iat— issued at (թողարկման ժամանակ). Unix ժամանակադրոշմը, երբ ստեղծվել է տոկենը։
Կարող եք հանդիպել նաև nbf-ին (not before) և jti-ին (եզակի տոկենի ID)։ Ժամանակադրոշմները վայրկյաններ են 1970 թվականից UTC-ով, ինչն էլ պատճառն է, թե ինչու վերծանիչը, որը դրանք ցուցադրում է որպես մարդու ընկալման ամսաթվեր, ձեզ խնայում է մտավոր հաշվարկը, թե արդյոք տոկենն արդեն ավարտվել է։
Վերծանումը ստուգում չէ, հենց սա է այն մասը, որ մարդկանց խայթում է
Այս տարբերությունը JWT-ների մասին ամենակարևոր հասկանալի բանն է։ Վերծանումը նշանակում է կարդալ բովանդակությունը. այն բանալի չի պահանջում, և ցանկացած ոք, ով ունի տոկենը, կարող է դա անել, քանի որ Base64url-ը կոդավորում է, ոչ թե գաղտնագրում։ Ստուգումը նշանակում է ապացուցել, որ տոկենն իսկական է և չմիջամտված. կրկին հաշվարկելով ստորագրությունը ճիշտ գաղտնի կամ հրապարակային բանալիով և հաստատելով, որ դա համընկնում է։
Այս գործիքը վերծանում է։ Այն ցույց է տալիս, թե ինչ ասում է տոկենը, ոչ թե, թե արդյոք տոկենն արժանահավատ է։ Տոկենը կարող է կեղծված, ավարտված կամ կրկնված լինել և միևնույն ժամանակ վերծանվել կատարելապես մաքուր տեսքով JSON-ի։ Երբեք թույլատրման որոշում մի կայացրեք միայն վերծանված պահանջների հիման վրա։ Արտադրական միջավայրում ստորագրությունը ստուգում եք սերվերի կողմից, ստուգում exp-ը և հաստատում, որ iss-ը և aud-ը համընկնում են ձեր սպասածի հետ, օգտագործելով ստուգված գրադարան, երբեք ձեռքով գրված տողերի համեմատում։

Բեռը թմբուկ չէ
Քանի որ բեռը միայն Base64url-կոդավորված է, այն ընթեռնելի է ցանկացածի կողմից, ով խափանում է տոկենը։ Վերաբերվեք դրա մեջ եղած ամեն ինչին որպես հրապարակային։ Մի տեղադրեք գաղտնաբառեր, ամբողջական բանկային քարտերի համարներ, գաղտնի բանալիներ կամ ցանկացած զգայուն անձնական տվյալ JWT պահանջներում, եթե դուք կարող եք վերծանել այն այստեղ մեկ սեղմումով, ապա կարող է նաև ցանկացած ուրիշ ոք, ով ստանում է դրա պատճենը։ Ստորագրությունը պաշտպանում է փոփոխությունից, բայց երբեք ընթերցումից։ Եթե ձեզ իսկապես պետք է թաքցնել բեռի բովանդակությունը, դա JWE-ի գործն է (գաղտնագրված տոկեններ), բոլորովին այլ սպեցիֆիկացիա։
Գաղտնիություն և կապակցված գործիքներ
Տոկենի ուսումնասիրումը զգայուն գործողություն է, ուստի այս վերծանիչն ամբողջովին աշխատում է հաճախորդի կողմում, վերլուծությունը հասարակ JavaScript է ձեր ներդիրում, և ոչինչ չի հեռանում ձեր սարքից։ Սեսիայի տոկեն տեղադրելը սերվերի վրա հիմնված գործիքում նշանակում է կենդանի հավաստագիր հանձնել երրորդ կողմի, ինչից հենց պետք է խուսափել։ Ամբողջ դրա հիմքում ընկած կոդավորման համար տես մեր Base64 գործիքը, և ուսումնասիրեք մեր ծրագրավորողի գործիքների մնացած մասը՝ ավելի շատ սարքի վրա աշխատող օգտակար ծրագրերի համար։
Հաճախակի տրվող հարցեր
JWT-ն գաղտնագրվա՞ծ է
Ոչ։ Ստանդարտ JWT-ն Base64url-կոդավորված է, ոչ թե գաղտնագրված։ Ցանկացած ոք, ով ունի տոկենը, կարող է կարդալ վերնագիրն ու բեռը։ Օգտագործեք JWE, եթե ձեզ պետք է թաքցնել բովանդակությունը։
Այս գործիքը ստուգու՞մ է ստորագրությունը
Ոչ։ Այն միայն վերծանում և ցուցադրում է վերնագիրն ու բեռը։ Ստորագրության ստուգումը պահանջում է թողարկողի գաղտնի կամ հրապարակային բանալին և պետք է կատարվի ձեր սերվերում։
Անվտա՞նգ է իմ տոկենն այստեղ տեղադրելը
Այո։ Վերծանումն ամբողջովին տեղի է ունենում ձեր բրաուզերում՝ տեղական JavaScript-ի միջոցով։ Տոկենը երբեք չի վերբեռնվում, պահվում կամ ուղարկվում ցանկացած սերվեր։
Ի՞նչ են նշանակում iss, sub, aud, exp և iat
Դրանք գրանցված պահանջներ են՝ թողարկող, առարկա, հասցեատեր, ավարտի ժամանակ և թողարկման ժամանակ։ Երեք ժամանակային պահանջներն օգտագործում են Unix ժամանակադրոշմեր՝ վայրկյաններով։
Կարո՞ղ եմ վստահել վերծանումից հետո ցուցադրված պահանջներին
Ոչ ինքնուրույն։ Վերծանված պահանջները կարող են գալ կեղծված կամ ավարտված տոկենից։ Միշտ ստուգեք ստորագրությունը և ավարտի ժամանակը սերվերի կողմից, նախքան դրանց վստահելը։
Ինչու՞ է իմ տոկենն ունենում երեք մաս, բաժանված կետերով
Դրանք վերնագիրն են, բեռը և ստորագրությունը, յուրաքանչյուրը Base64url-կոդավորված և միացած կետերով։ Կետերն ասում են վերլուծիչներին, թե որտեղ է սկսվում և ավարտվում յուրաքանչյուր հատված։
