JSON Web Token (JWT) құрылымы және оның құрамдас бөліктері
JSON Web Token (JWT) — ақпаратты тараптар арасында қауіпсіз түрде JSON нысаны ретінде беруге арналған ықшам және өзіндік мазмұны бар құрал. Бұл ақпарат цифрлық қолтаңба арқылы тексерілетіндіктен, оған сенім артуға болады. Стандартты JWT нүктемен бөлінген үш бөліктен тұрады:
- Тақырып (Header): Токеннің түрі мен қолданылатын қолтаңба алгоритмі туралы ақпаратты қамтиды.
- Пайдалы жүктеме (Payload): Токен арқылы берілетін негізгі деректерді (мәлімдемелерді немесе claims) қамтиды.
- Қолтаңба (Signature): Токеннің жолда жөнелтілген кезде өзгертілмегенін растау үшін қолданылады.
Әрбір бөлік Base64URL форматында кодталады. JWT декодтаушы құралы осы кодталған жолды қабылдап, оның құрамындағы ақпаратты адам оқи алатын JSON форматына айналдырады.
Тақырып (Header) және пайдалы жүктеме (Payload) мәлімдемелері
JWT тақырыбында әдетте екі негізгі мәлімдеме болады:
alg: Қолтаңбаны жасау және тексеру үшін қолданылатын алгоритм (мысалы, HS256 немесе RS256).typ: Токеннің түрі, әдетте бұл мән "JWT" болады.
Пайдалы жүктемеде пайдаланушы немесе жүйе туралы деректер, сондай-ақ токеннің өмірлік циклін басқаратын стандартты мәлімдемелер орналасады:
iat(Issued At): Токеннің берілген уақыты.exp(Expiration Time): Токеннің жарамдылық мерзімі аяқталатын уақыт.
Декодтаушы құрал осы мәлімдемелерді талдап, интерфейсте келесі деректерді көрсетеді:
- Алгоритм: Токенде қолданылған алгоритм түрі.
- Түрі: Токеннің форматы.
- Берілген уақыты: Токеннің жасалған сәті.
- Мерзімі: Токеннің жарамдылық мерзімі бітетін уақыт.
Токеннің жарамдылық мерзімін тексеру ережелері
Құрал токеннің ішіндегі exp (жарамдылық мерзімі) мәлімдемесіне сүйене отырып, оның ағымдағы күйін анықтайды және арнайы белгіше арқылы келесі күйлердің бірін көрсетеді:
- Жарамды: Токеннің мерзімі әлі өтпеген.
- Мерзімі өткен: Токеннің жарамдылық мерзімі аяқталған.
- Әлі жарамсыз: Токеннің күшіне енетін уақыты әлі келген жоқ.
- Мерзімі шектелмеген: Токенде
expмәлімдемесі көрсетілмеген.
Бұл ретте құрал тек exp мәлімдемесін тексереді — қолтаңбаны, эмитентті немесе аудиторияны тексермейді.
Декодтау мен қолтаңбаны тексерудің айырмашылығы
JWT декодтау және оны тексеру (verification) — екі бөлек процесс:
- Декодтау: Base64URL форматындағы жолды ашып, оның ішіндегі JSON деректерін оқу. Бұл процесс үшін ешқандай құпия кілт қажет емес. Кез келген адам токенді декодтап, оның ішінде не жазылғанын көре алады.
- Тексеру: Токеннің шынымен сенімді эмитенттен шыққанын және оның мазмұны өзгертілмегенін растау. Бұл үшін қол қою құпиясы (симметриялық алгоритмдер үшін) немесе ашық кілт (асимметриялық алгоритмдер үшін) қажет.
Бұл құрал қолтаңбаны тексермейді және қол қою құпиясын немесе ашық кілтті сұрамайды. Қолтаңбаны тексермей JWT ішіндегі деректерге сену қауіпсіздікке қатер төндіреді, себебі зиянкестер токеннің мазмұнын өзгертіп жіберуі мүмкін.
Қателерді өңдеу және интерфейс ережелері
Құрал енгізілген деректердің дұрыстығын тексеріп, қателерді келесідей көрсетеді:
- Егер енгізу өрісі бос болса, құрал "Дайын. Декодтау үшін JWT қойыңыз." күйінде тұрады.
- Егер енгізілген мән үш бөліктен тұрмаса: "Жарамды JWT емес — нүктемен бөлінген үш бөліктен тұруы керек.".
- Егер тақырыптың Base64URL форматы бұзылса: "Тақырыпты декодтау мүмкін болмады — жарамсыз Base64URL.".
- Егер пайдалы жүктеменің Base64URL форматы бұзылса: "Пайдалы жүктемені декодтау мүмкін болмады — жарамсыз Base64URL.".
- Егер тақырып дұрыс JSON форматында болмаса: "Тақырып жарамды JSON емес.".
- Егер пайдалы жүктеме дұрыс JSON форматында болмаса: "Пайдалы жүктеме жарамды JSON емес.".
- Егер енгізілген мән тым ұзын болса: "Бұл нақты JWT болуы үшін тым ұзын.".
Қате орын алған жағдайда декодталған ақпарат көрсетілетін аймақтар жасырылады. Пайдаланушы "Тазалау" батырмасын басқанда, енгізу өрісі тазарып, фокус қайтадан сол өріске ауысады. Сондай-ақ интерфейсте енгізілген токеннің ұзындығын көрсететін "Таңбалар" көрсеткіші бар.
Құпиялылық және деректерді өңдеу
Токеніңіз браузеріңізде декодталады. BroBroGo серверіне ештеңе жүктелмейді. Барлық есептеулер мен Base64URL декодтау операциялары толығымен сіздің құрылғыңызда орындалады, бұл деректердің сыртқа кетпеуін қамтамасыз етеді.
Жиі қойылатын сұрақтар (FAQ)
Мұнда JWT қою қауіпсіз бе?
Иә. Декодтау толығымен браузеріңізде орындалады — токеніңіз BroBroGo серверіне ешқашан жіберілмейді.
Бұл қолтаңбаны тексере ме?
Жоқ. Ол тек сіз оқуыңыз үшін тақырыпты (header) және пайдалы жүктемені (payload) декодтайды. Қолтаңбаны тексеру үшін қол қою құпиясы немесе ашық кілт қажет, оларды бұл құрал ешқашан сұрамайды.
Токенімнің мерзімі өткенін қалай білемін?
Декодтаушы exp мәнін оқиды және декодталған токеннің жанында күй белгісін көрсетеді — жарамды, мерзімі өткен, әлі жарамсыз немесе мерзімі жоқ.