რა არის JWT ტოკენები და რისთვის არის საჭირო?
შესავალი
ამ სტატიაში ჩვენ განვმარტავთ JWT-ის დეტალებს, მის სტრუქტურას, დადებით და უარყოფით მხარეებთან ერთად.
JWT ნიშნავს JSON Web Token-ს რომელიც გამოიყენება კლიენტსა და სერვერს შორის ინფორმაციის უსაფრთხოდ გადასაცემად JSON ფორმატში.
ის ციფრულად არის ხელმოწერილი საიდუმლო გასაღების გამოყენებით, რომელიც ცნობილია მხოლოდ სერვერისთვის.
მისი დაშიფვრა შესაძლებელია, მაგრამ ამ სტატიისთვის ჩვენ ყურადღებას გავამახვილებთ ხელმოწერილ არადაშიფრულ ნიშნებზე.
Structure of JWT
JSON ვებ ტოკენი შედგება 3 ნაწილისგან, რომლებიც გამოყოფილია ერთმანეთისაგან. Header - სათაური, Payload- დატვირთვა და Signature -ხელმოწერა.
თითოეული სექცია არის base64 კოდირებული.
სათაური (Header)
სათაური, როგორც წესი, შედგება ორი ნაწილისგან: ჟეტონის ტიპი, რომელიც არის JWT, და ხელმოწერის ალგორითმი, რომელიც გამოიყენება, როგორიცაა HMAC SHA256 ან RSA.
{
"typ": "JWT",
"alg": "HS256"
}
ეს JSON არის Base64Url კოდირებული, რათა შექმნას JWT-ის პირველი ნაწილი.
Payload
ტოკენის მეორე ნაწილი არის payload, რომელიც შეიცავს claim-ებს. claim არის განცხადებები ერთეულის (როგორც წესი, მომხმარებლის) და დამატებითი მონაცემების შესახებ. არსებობს სამი სახის claim: რეგისტრირებული, საჯარო და კერძო.
ზოგიერთი მათგანია: iss (გამცემი), exp (ვადის გასვლის დრო), sub (subject), aud (audience) და სხვა.
{
"iss": "example_issuer",
"sub": "user_id123",
"exp": 1644768000,
"iat": 1644744000
}
ხელმოწერა (SIGNATURE)
ხელმოწერის ნაწილის შესაქმნელად თქვენ უნდა აიღოთ დაშიფრული სათაური, დაშიფრული დატვირთვა, საიდუმლო, სათაურში მითითებული ალგორითმი და ხელი მოაწეროთ ამას.
მაგალითად, თუ გსურთ გამოიყენოთ HMAC SHA256 ალგორითმი, ხელმოწერა შეიქმნება შემდეგი გზით:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
ხელმოწერა გამოიყენება იმისთვის, რომ დაადასტუროს, რომ შეტყობინება არ შეცვლილა გზაში და, კერძო გასაღებით ხელმოწერილი ნიშნების შემთხვევაში, მას ასევე შეუძლია შეამოწმოს, რომ JWT-ის გამგზავნი არის ის, ვინც ამბობს, რომ არის.
როდის უნდა გამოიყენოთ JSON Web Tokens?
აქ მოცემულია რამდენიმე სცენარი, სადაც JSON Web Tokens სასარგებლოა:
ავტორიზაცია: ეს არის JWT გამოყენების ყველაზე გავრცელებული სცენარი. მომხმარებლის შესვლის შემდეგ, ყოველი შემდეგი მოთხოვნა მოიცავს JWT-ს, რაც მომხმარებელს საშუალებას მისცემს წვდომის მარშრუტებზე, სერვისებსა და რესურსებზე, რომლებიც ნებადართულია ამ ნიშნით. Single Sign On არის ფუნქცია, რომელიც დღესდღეობით ფართოდ იყენებს JWT-ს, მისი დომენებში ადვილად გამოყენების შესაძლებლობის გამო.
ინფორმაციის გაცვლა: JSON Web Tokens არის კარგი საშუალება მხარეებს შორის ინფორმაციის უსაფრთხოდ გადაცემისთვის. იმის გამო, რომ JWT-ებზე ხელმოწერა შესაძლებელია, მაგალითად, საჯარო/პირადი გასაღების წყვილების გამოყენებით, შეგიძლიათ დარწმუნებული იყოთ, რომ გამგზავნები არიან ის, ვინც ამბობენ, რომ არიან. გარდა ამისა, რადგან ხელმოწერა გამოითვლება სათაურის და დატვირთვის გამოყენებით, თქვენ ასევე შეგიძლიათ გადაამოწმოთ, რომ კონტენტი არ არის გაყალბებული.
რატომ უნდა გამოვიყენოთ JSON Web Tokens?
მოდით ვისაუბროთ JSON Web Tokens-ის (JWT) უპირატესობებზე, როდესაც შევადარებთ მარტივ ვებ ტოკენებს (SWT) და უსაფრთხოების მტკიცების მარკირების ენის ტოკენებს (SAML).
იმის გამო, რომ JSON არის ნაკლებად ვრცელი ვიდრე XML, როდესაც ის კოდირებულია, მისი ზომა ასევე უფრო მცირეა, რაც JWT-ს უფრო კომპაქტურს ხდის ვიდრე SAML. ეს ხდის JWT კარგ არჩევანს HTML და HTTP გარემოში გადასაცემად.
უსაფრთხოების თვალსაზრისით, SWT შეიძლება მხოლოდ სიმეტრიულად გაფორმდეს საერთო საიდუმლოებით HMAC ალგორითმის გამოყენებით. თუმცა, JWT და SAML ტოკენებს შეუძლიათ გამოიყენონ საჯარო/პირადი გასაღების წყვილი X.509 სერთიფიკატის სახით ხელმოწერისთვის. XML-ის ხელმოწერა XML ციფრული ხელმოწერით ბუნდოვანი უსაფრთხოების ხვრელების დანერგვის გარეშე ძალიან რთულია JSON ხელმოწერის სიმარტივესთან შედარებით.
JSON პარსერები გავრცელებულია პროგრამირების ენების უმეტესობაში, რადგან ისინი პირდაპირ ობიექტებს ასახავს. პირიქით, XML-ს არ აქვს ბუნებრივი დოკუმენტი-ობიექტის რუქა. ეს აადვილებს JWT-თან მუშაობას, ვიდრე SAML მტკიცებებს.
რაც შეეხება გამოყენებას, JWT გამოიყენება ინტერნეტის მასშტაბით. ეს ხაზს უსვამს JSON ვებ ტოკენის კლიენტის მხრიდან დამუშავების სიმარტივეს მრავალ პლატფორმაზე, განსაკუთრებით მობილურზე.
დაშიფრული JWT-ისა და დაშიფრული SAML-ის სიგრძის შედარება
თუ გსურთ მეტი წაიკითხოთ JSON Web Tokens-ის შესახებ და თუნდაც დაიწყოთ მათი გამოყენება საკუთარ აპლიკაციებში ავტორიზაციის შესასრულებლად, დაათვალიერეთ JSON Web Token სადესანტო გვერდი Auth0 by Okta-ზე.