JSON Web Token-ის სტრუქტურა და მუშაობის პრინციპი
JSON Web Token (JWT) წარმოადგენს კომპაქტურ და თვითკმარ საშუალებას მხარეებს შორის ინფორმაციის უსაფრთხოდ გადასაცემად JSON ობიექტის სახით. სტანდარტული JWT შედგება წერტილით გამოყოფილი სამი ნაწილისგან. თითოეული ეს ნაწილი კოდირებულია Base64URL ფორმატში, რაც უზრუნველყოფს მონაცემთა უსაფრთხო გადაცემას HTTP მოთხოვნებსა და URL მისამართებში.
ტოკენის სტრუქტურა მოიცავს შემდეგ კომპონენტებს:
- თავსართი (Header): როგორც წესი, შეიცავს ინფორმაციას ტოკენის ტიპისა და გამოყენებული ხელმოწერის ალგორითმის შესახებ.
- მონაცემები (Payload): შეიცავს ძირითად ინფორმაციას (claims), როგორიცაა მომხმარებლის იდენტიფიკატორი, ტოკენის გაცემის დრო და მოქმედების ვადა.
- ხელმოწერა (Signature): გამოიყენება იმის დასადასტურებლად, რომ ტოკენის გამგზავნი ავტორიზებულია და მონაცემები გზაში არ შეცვლილა.
JWT დეკოდერი საშუალებას გაძლევთ მომენტალურად გაშიფროთ ტოკენის პირველი ორი ნაწილი და წაიკითხოთ მათში არსებული ინფორმაცია.
JWT თავსართი და მონაცემები
თავსართი (Header) განსაზღვრავს, თუ როგორ უნდა მოხდეს ტოკენის დამუშავება. მასში ძირითადად გვხვდება ორი პარამეტრი: alg (მაგალითად, HS256 ან RS256), რომელიც მიუთითებს ხელმოწერის ალგორითმზე, და typ, რომელიც მიუთითებს თავად მედია ტიპზე (როგორც წესი, JWT).
მონაცემთა ნაწილი (Payload) შეიცავს უშუალოდ გადასაცემ ინფორმაციას. აქ გამოიყენება სტანდარტული ველები, რომლებსაც "claims" ეწოდება:
iat(Issued At): მიუთითებს ტოკენის გაცემის ზუსტ დროს.exp(Expiration Time): განსაზღვრავს დროს, რომლის შემდეგაც ტოკენი აღარ უნდა იქნას მიღებული დასამუშავებლად.
ამ მონაცემების წაკითხვა აუცილებელია დეველოპერებისთვის, მხარდაჭერის ინჟინრებისთვის და უსაფრთხოების სპეციალისტებისთვის, რათა სწრაფად დაადგინონ ტოკენის შიგთავსი და მისი ვალიდურობა.
დეკოდირება ვერიფიკაციის წინააღმდეგ
მნიშვნელოვანია ერთმანეთისგან გაიმიჯნოს ტოკენის დეკოდირება და მისი ვერიფიკაცია.
| პროცესი | აღწერა | საჭირო მონაცემები |
|---|---|---|
| დეკოდირება | Base64URL ფორმატიდან ტექსტის პირდაპირი თარგმნა წასაკითხ JSON ფორმატში. | მხოლოდ თავად JWT ტოკენი. |
| ვერიფიკაცია | ხელმოწერის ნამდვილობის შემოწმება იმის დასადასტურებლად, რომ ტოკენი არ არის გაყალბებული. | საიდუმლო გასაღები (Secret Key) ან საჯარო გასაღები (Public Key). |
ეს ხელსაწყო ახდენს მხოლოდ დეკოდირებას. იგი არ ამოწმებს ხელმოწერას და არ ითხოვს საიდუმლო ან საჯარო გასაღებს. შესაბამისად, ხელსაწყოს მიერ ნაჩვენები სტატუსი ეყრდნობა მხოლოდ exp ველის ანალიზს და არ წარმოადგენს ტოკენის სრულ უსაფრთხოების გარანტიას.
შეცდომების დამუშავება და ვალიდაციის წესები
ხელსაწყო მკაცრად აკონტროლებს შეყვანილი მონაცემების ფორმატს და შეცდომის შემთხვევაში მომხმარებელს უჩვენებს შესაბამის შეტყობინებას:
- თუ შეყვანილი ველი ცარიელია, სისტემა ინარჩუნებს საწყის მდგომარეობას:
მზადაა. ჩასვით JWT მის დასადეკოდირებლად.. - თუ ტექსტი არ შეიცავს წერტილით გამოყოფილ სამ ნაწილს, გამოჩნდება შეცდომა:
არასწორი JWT — მოსალოდნელია წერტილით გამოყოფილი სამი ნაწილი.. - თუ თავსართის დეკოდირება ვერ ხერხდება არასწორი ფორმატის გამო:
თავსართის დეკოდირება ვერ მოხერხდა — არასწორი Base64URL.. - თუ მონაცემების ნაწილის დეკოდირება ვერ ხერხდება:
მონაცემების დეკოდირება ვერ მოხერხდა — არასწორი Base64URL.. - თუ დეკოდირებული თავსართი არ წარმოადგენს სწორ JSON სტრუქტურას:
თავსართი არ არის ვალიდური JSON.. - თუ დეკოდირებული მონაცემები არ არის სწორი JSON:
მონაცემები (payload) არ არის ვალიდური JSON.. - თუ შეყვანილი ტექსტი აჭარბებს დასაშვებ ზომას:
ეს ზედმეტად გრძელია რეალური JWT ტოკენისთვის..
შეცდომის დაფიქსირების შემთხვევაში, დეკოდირებული მონაცემების პანელები ავტომატურად იმალება. შეყვანილი ტოკენის გასუფთავებისას, ფოკუსი უბრუნდება ტექსტის შესაყვან ველს.
კონფიდენციალურობა და მონაცემთა დამუშავება
თქვენი ტოკენის დეკოდირება ხდება თქვენს ბრაუზერში. BroBroGo-ზე არაფერი იტვირთება. ყველა ოპერაცია სრულდება ლოკალურად, კლიენტის მხარეს, რაც გამორიცხავს სენსიტიური მონაცემების ან ავტორიზაციის ტოკენების გარე სერვერებზე მოხვედრას.
ხშირად დასმული კითხვები
უსაფრთხოა აქ ჩემი JWT-ის ჩასმა?
დიახ. დეკოდირება მთლიანად თქვენს ბრაუზერში ხდება — თქვენი ტოკენი არასოდეს იგზავნება BroBroGo-ზე.
ამოწმებს ეს ხელსაწყო ხელმოწერას (signature)?
არა. ის მხოლოდ თავსართსა (header) და მონაცემებს (payload) შიფრავს წასაკითხად. ხელმოწერის შესამოწმებლად საჭიროა საიდუმლო გასაღები ან საჯარო გასაღები, რასაც ეს ხელსაწყო არასოდეს გთხოვთ.
როგორ გავიგო, გაუვიდა თუ არა ვადა ჩემს ტოკენს?
დეკოდერი კითხულობს exp ველს და აჩვენებს სტატუსის ნიშანს — ვალიდური, ვადაგასული, ჯერ არ არის ძალაში, ან ვადის გარეშე — დეკოდირებული ტოკენის გვერდით.