JSON вэб токен (JWT) нь вэбээр (хоёр талын хооронд) мэдээллийг найдвартай дамжуулахад ашиглагддаг JSON объект юм . Үүнийг баталгаажуулалтын системд ашиглаж болохоос гадна мэдээлэл солилцоход ашиглаж болно. Токен нь голчлон header, payload, signature зэргээс бүрдэнэ . Эдгээр гурван хэсгийг цэгээр (.) тусгаарладаг. JWT нь бидний нэг талаас нөгөө тал руу илгээж буй мэдээллийн бүтцийг тодорхойлдог бөгөөд энэ нь цуваажуулсан, цуваагүй гэсэн хоёр хэлбэрээр ирдэг . Хүсэлт, хариу бүрийг сүлжээгээр дамжуулан өгөгдөл дамжуулахад цуваа хандлагыг голчлон ашигладаг. Цувралгүй хандлагыг вэб токэн руу өгөгдөл унших, бичихэд ашигладаг.
JWT нь бие даасан, харьяалалгүй токенууд бөгөөд тухайн токен дотор authentication , authorization авахад шаардлагатай бүх мэдээллийг агуулдаг. Энэ нь серверүүдэд session-ийн өгөгдлийг хадгалах шаардлагагүй болж, distributed system-д илүү үр ашигтай, өргөтгөх боломжтой баталгаажуулалтыг хийх боломжийг олгодог. Хэрэглэгчийн нэхэмжлэл, зөвшөөрлийг токен руу шууд кодчилсноор JWT-ийг олон мэдээллийн сан хайх, сервер талын нарийн төвөгтэй логик шаардлагагүйгээр дотооддоо баталгаажуулах боломжтой. Энэхүү хялбаршуулсан арга нь гүйцэтгэлийг сайжруулж, микро үйлчилгээний архитектур эсвэл өөр өөр домэйн дээр ч гэсэн тасралтгүй нэвтрэлт танилт, зөвшөөрлийг идэвхжүүлдэг. JWT-ийн харьяалалгүй шинж чанар нь тэдгээрийг системийн доголдолд илүү тэсвэртэй болгодог, учир нь баталгаажуулалтад бүтэлгүйтлийн гол цэг байдаггүй.
Дараалалсан JWT
Дараалалсан хэлбэрээр JWT нь дараах форматтай мөрийг илэрхийлнэ.
[HEADER].[PAYLOADER].[SIGNATURE]
Энэ формат нь хүсэлт, хариулт бүрт сүлжээгээр өгөгдөл дамжуулахад ашиглагддаг.
Дараалалгүй JWT
Дараалалгүй хэлбэрт байгаа JWT нь зөвхөн толгой хэсэг болон ачааллыг агуулдаг. Эдгээр нь хоёулаа энгийн JSON объект юм.
JWT
JWT-ийн толгой хэсгийг ихэвчлэн JWT-д хэрэглэгдсэн signing/decryption тайлах техник гэх мэт криптографийн үйлдлүүдийг тайлбарлахад ашигладаг. Энэ нь мөн бидний илгээж буй мэдээллийн media/content мэдээллийг агуулж болно. Энэ мэдээлэл нь JSON объект хэлбэрээр байгаа бөгөөд энэ JSON объект нь BASE64URL руу кодлогдсон байна.
HEADER
Толгой хэсэгт байгаа криптографийн үйлдлүүд нь JWT нь гарын үсэг зурсан/тэмдэглэгдээгүй эсвэл шифрлэгдсэн эсэхийг тодорхойлдог бөгөөд ингэснээр ямар алгоритмын техникийг ашиглахыг тодорхойлдог. JWT-ийн энгийн толгой хэсэг нь доорх кодтой төстэй байна.JWT-ийн толгой хэсгийг ихэвчлэн JWT-д хэрэглэгдсэн гарын үсэг зурах/шифр тайлах техник гэх мэт криптографийн үйлдлүүдийг тайлбарлахад ашигладаг. Энэ нь мөн бидний илгээж буй мэдээллийн медиа/агуулгын төрлийн мэдээллийг агуулж болно. Энэ мэдээлэл нь JSON объект хэлбэрээр байгаа бөгөөд энэ JSON объект нь BASE64URL руу кодлогдсон байна.JWT-ийн энгийн толгой хэсэг нь доорх кодтой төстэй байна.
{
"typ":"JWT",
"alg":"HS256"
}
PAYLOADER
Ачаалал нь JWT-ийн бүх хэрэглэгчийн өгөгдлийг нэмж оруулсан хэсэг юм. Энэ мэдээллийг мөн JWT-ийн “CLAIMS” гэж нэрлэдэг. Энэ мэдээллийг хэн ч унших боломжтой тул энд ямар ч нууц мэдээлэл оруулахгүй байхыг үргэлж зөвлөж байна. Энэ хэсэг нь ерөнхийдөө хэрэглэгчийн мэдээллийг агуулдаг. Энэ мэдээлэл нь JSON объект хэлбэрээр байгаа бөгөөд энэ JSON объект нь BASE64URL руу кодлогдсон байна.
Бид PAYLOAD дотор хүссэн хэмжээгээрээ нэхэмжлэл гаргаж болно, гэхдээ толгой хэсгээс ялгаатай нь PAYLOAD-д ямар ч нэхэмжлэл заавал байх албагүй. PAYLOAD ихтэй JWT нь иймэрхүү харагдах болно.
{
"userId":"b07f85be-45da",
"iss": "https://provider.domain.com/",
"sub": "auth/some-hash-here",
"exp": 153452683
}
SIGNATURE
Энэ нь JWT-ийн гурав дахь хэсэг бөгөөд токены жинхэнэ эсэхийг шалгахад ашиглагддаг. BASE64URL кодлогдсон толгой болон ачааллыг цэг(.)-тэй холбож, дараа нь нууц түлхүүрээр толгой хэсэгт тодорхойлсон хэш алгоритмыг ашиглан хэш хийнэ. Дараа нь энэ гарын үсгийг цэг (.) ашиглан толгой ба ачаалалд хавсаргасан бөгөөд энэ нь бидний бодит токен header.payload.signature-ийг үүсгэдэг.
HASHINGALGO( base64UrlEncode(header) + “.” + base64UrlEncode(payload),secret)