Рамзкушои JWT воқеан чӣ кор мекунад
JSON Web Token (JWT) ба сатри дарози тира ва номафҳуми аломатҳо монанд аст, аммо он рамзгузории махфӣ нест ва шифри сирри нест. Ин як зарфи фушурда ва барои URL бехатар аст, ки маълумоти сохториро байни ду тараф мебарад. Токенеро ба рамзкушои боло гузоред ва он ин сатрро мешиканад ва JSON-и воқеии дарунро нишон медиҳад — метамаълумот, даъвоҳо, барои кӣ токен аст ва кай мунқазӣ мешавад. Ҳама чиз бевосита дар браузери шумо рух медиҳад. Токен ҳеҷ гоҳ бор карда, сабт ё ба ягон ҷо фиристода намешавад, ки ин вақте муҳим аст, ки чизе, ки шумо тафтиш мекунед, аслнома(credential)-и сессияи зинда бошад.

Се қисм, ду нуқта
Ҳар JWT-и хубсохт се сатри рамзгузошта бо Base64url аст, ки бо нуқта пайваст шудаанд: сарлавҳа.бор.имзо. Маҳз ҳамон аломати нуқта аст, ки тавассути он таҳлилгарон медонанд, ки як бахш дар куҷо тамом мешавад ва навбатӣ аз куҷо оғоз меёбад, ва маҳз барои ҳамин токене, ки шумораи нодурусти нуқта дорад, пеш аз хондани чизи дигар рад карда мешавад.
Сарлавҳа объекти хурди JSON аст, ки худи токенро тасвир мекунад. Он тақрибан ҳамеша typ (навъ, одатан JWT) ва alg — алгоритми имзогузорӣ, ба монанди HS256 (HMAC бо SHA-256) ё RS256 (RSA бо SHA-256) дар бар мегирад. Сарлавҳа ба тафтишгар дақиқ мегӯяд, ки имзо чӣ гуна тавлид шудааст.
Бор қисматест, ки аксарияти мардум ба он аҳамият медиҳанд. Он объекти дигари JSON аст, ки даъвоҳо — изҳоротро дар бораи корбар ва токен нигоҳ медорад. Спецификатсия даъвоҳоро ба сабтшуда (номҳои стандартӣ, захирашуда), умумӣ ва хусусӣ (номҳои сифоришие, ки шумо барои барномаи худ ихтироъ мекунед) тақсим мекунад. Рамзкушоии бор он чизест, ки нишон медиҳад кӣ ворид шудааст, кадом нақшро дорад ва сессияи вай кай тамом мешавад.
Имзо мӯҳри криптографист. Он аз рӯи сарлавҳа ва бори рамзгузошта бо алгоритми аз сарлавҳа ба ғайр аз калиди махфӣ ё хусусӣ ҳисоб карда мешавад. Азбаски он ҳарду қисми дигарро дар бар мегирад, ҳар тағйирот дар сарлавҳа ё бор — ҳатто як аломат — онро беэътибор мекунад.
Даъвоҳое, ки шумо бештар мебинед
Даъвоҳои сабтшуда номҳои кӯтоҳи сеҳарфианд, ки тавассути RFC 7519 муайян шудаанд, то системаҳои гуногун якдигар фаҳманд. Якчанд аз онҳо тақрибан дар ҳама ҷо пайдо мешаванд:
iss— содиркунанда: кӣ токенро тавлид кардааст (сервери аутентификатсия ё провайдери шахсияти шумо).sub— субъект: касе, ки токен дар бораи вай аст, одатан ID-и устувори корбар.aud— аудитория: гирандае, ки токен барои он пешбинӣ шудааст. API бояд токенҳоеро, ки аудиторияашон худи он нест, рад кунад.exp— вақти мунқазишавӣ: тамғаи вақти Unix, ки пас аз он токен набояд қабул карда шавад.iat— содиршуда дар: тамғаи вақти Unix, вақте ки токен сохта шудааст.
Шумо инчунин метавонед бо nbf (на пеш аз) ва 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 рамзгузошта ва бо нуқта пайваст шудаанд. Нуқтаҳо ба таҳлилгарон мегӯянд, ки ҳар бахш аз куҷо оғоз ва дар куҷо тамом мешавад.
