Ovo je stara izmjena dokumenta!
How do you write an abstract? Identify your purpose. You're writing about a correlation between lack of lunches in schools and poor grades. … Explain the problem at hand. Abstracts state the “problem” behind your work. … Explain your methods. … (Source) Save your work regularly!!! Describe your results (informative abstract only). … Abstract should be no longer that 400 words. Napomena: sadržaj na vrhu stranice generira se automatski na temelju naslova u dokumentu.
Keywords: abstract; bastract; astract; retract; tractor
JSON Web Token je otvoreni standard predstavljen u 2015. godini, kojim je definiran način za siguran i pouzdan prijenos informacija između dvije ili više strana. Podaci se spremaju u obliku JSON objekta te se zatim ta struktura koristi za digitalno potpisivanje (JWS - JSON Web Signature) kako bi sačuvali autentičnost i integritet podataka. Iako se tokeni mogu još dodatno i kriptirati, češća je upotreba bez eksplicitne enkripcije, s obzirom na to da se najčešće prenose putem HTTP(S) protokola. na kojem se, barem za potrebe autorizacije i autentifikacije, koristi enkripcija za razmjenu podataka. JSON Web tokeni se dakle najviše koriste za:
JWT se sastoji od više odvojenih objekata između kojih se nalazi točka. Najčešći oblik JSON Web tokena je onaj digitalno potpisani, koji se sastoji od ova 3 dijela:
Svaki od ta tri dijela se prilikom slaganja krajnjeg oblika tokena šifrira pomoću Base64 kodiranja kako pri prenošenju ne bi došlo do promjena s obzirom na različita tumačenja znakova od strane različitih sustava. Zatim dijelove spojimo s točkom između svakog te smo time dobili token.
U zaglavlju se nalaze informacije o tipu objekta i algoritmu koji se koristio prilikom izrade digitalnog potpisa.
{"typ":"JWT", "alg":"HS256"}
U ovom primjeru korišten je HMAC algoritam uz SHA-256 funkciju sažimanja. Još neki od popularnih algoritama digitalnog potpisa koji se koriste su RSA i ECDSA uz razne mogućnosti odabira funkcije sažimanja.
U ovom objektu nalaze se podaci spremljeni u tokenu, a za koje možemo tvrditi da su ispravni. Ovi podaci mogu biti proizvoljni ovisno o implementaciji JWT-a u sustavu, međutim, postoje imena varijabli koja su namijenjena točno određenoj svrsi te su opisana u specifikaciji JSON Web Tokena.
“iss”
- predstavlja izdavača tokena“sub”
- predstavlja subjekt tog tokena, onoga za koga je taj token izdan“aud”
- predstavlja primatelje za koje je taj token namijenjen“exp”
- predstavlja vrijeme isteka tokena“nbf”
- predstavlja vrijeme od kojeg token vrijedi“iat”
- predstavlja vrijeme izdavanja tokena“jti”
- predstavlja jedinstveni identifikator tokena
Prema specifikaciji iznad navedene vrijednosti su opcionalne, tako da ih token ne mora sadržavati, ali je preporučeno da ih sadrže.
Na primjeru kojeg vidimo na slici prije, vidljivo su nam podaci sadržani u tokenu gdje sub
predstavlja identifikator korisnika u sustavu, u polju name
se nalazi ime korisnika, a u polju iat
je vidljivo vrijeme izdavanja tokena predstavljenu u sekundama proteklih od 1.1.1970. što ovdje predstavlja 18.1.2018. u 1.30 sati.
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
Kao treći dio ovdje predstavljamo digitalni potpis kao važan dio tokena koji predstavlja integritet samog tokena, odnosno da isti nije mijenjan od trenutka njegovog izdavanja ili izrađen s lažnim podacima. Način na koji ćemo to osigurati je da zaglavlje i korisne podatke, odnosno sve prijašnje objekte u tokenu digitalno potpišemo. Postupak se sastoji od toga da se navedeni objekti šifriraju pomoću Base64 kodiranja i spoje točkom kako se spajaju i u sami token te zatim dodajemo tajnu vrijednost, ako postoji u algoritmu. Ako se primjerice koristi RSA digitalni potpis, onda ćemo onako šifrirane podatke sažeti funkcijom sažimanja te onda sažetak digitalno potpisati privatnim ključem. Primatelj će zatim moći provjeriti na isti način, tako da izračuna sažetak prvih dijelova tokena i provjeriti podudara li se sa vrijednosti koju dobije kada javnim ključem dešifrira vrijednost digitalnog potpisa.
signature = RSA( private_key, SHA-256(base64urlEncoding(header) + '.' + base64urlEncoding(payload)) ) RSA(public_key, signature) == SHA-256(base64urlEncoding(header) + '.' + base64urlEncoding(payload))
JSON Web tokeni se najčešće koriste u SSO (engl. Single Sign-On) sustavima i REST API aplikacijama gdje se koristi jedan poslužitelj za autorizaciju korisnika koji onda korisniku vraća JWT token s kojim on može pristupati usluzi kojoj želi. Dakle, korisnik će se svojim korisničkim podacima prijaviti samo jednom, a pomoću tokena korisnik pristupa usluzi dok god token vrijedi.
Kako se JWT koristi za pristup, ondnosno autorizaciju korisnika, podložan je raznim napadima i pokušajima probijanja njegove zaštite.
Najčešći oblici napada na JSON Web tokene u 2019. godini su bili:
None
umjesto algoritma u zaglavljukid
(identifikator ključa) u zaglavljuMožemo primijetiti da se najčešći napadi događaju nepravilnim korištenjem JWT-a od strane izvođača usluge(programera), odnosno ako postoji manjak znanja o specifikaciji, pa se implementacija napravi na krivi način.