JSON Web Token

JSON Web Token (JWT, hääldatakse /dʒɒt/, või "džot") on väljapakutud internetistandard andmete loomiseks koos digitaalallkirja ja/või krüpteerimisega, mis sisaldab JSON-i, mis omakorda seab ette teatud hulga väiteid. Tõendid allkirjastatakse avaliku ja salajase võtmega. Näiteks võib server luua tõendi, millel on väide "sisse logitud administraatorina" ning anda selle kliendile. Klient saab seejärel tõendit kasutada tõestamaks, et on sisse logitud administraatorina. Tõendeid saab allkirjastada ühe osapoole salajase võtmega (tavaliselt serveri omaga) nii, et sama osapool saab hiljem kontrollida tõendi õigsust. Kui teisel osapoolel on sobival ja usaldusväärsel viisil olemas vastav avalik võti, on ka teine osapool võimeline kontrollima tõendi õigsust. Tõendid on loodud kompaktselt, URL-i jaoks turvaliselt ning kasutamiseks eelkõige veebibrauseri ühekordse sisselogimise (single sign-on, SSO) kontekstis. JWT tugineb teistele JSON-il põhinevatele standarditele: JSON Web Signature ja JSON Web Encryption. JWT tõendid on Eestis kasutusel riigi autentimisteenuses (TARA), millega on võimalik e-teenusestes autentida kasutades ID-kaarti, mobiil-ID-d või smart-ID-d. Kõik kolm osa kodeeritakse seejärel uuesti kasutades Base64url kodeeringut, ning ühendatakse kokku kasutades eraldajana punkte JWT tõendi loomiseks: const token = base64urlEncoding(header) + '.' + base64urlEncoding(payload) + '.' + base64urlEncoding(signature) Saadud JWT tõend ja "secretkey" ehk salajane võti loovad tõendi: pre eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI Saadud tõendi saab hõlpsasti HTML-i ja HTTP-sse edasi anda. Kui kasutaja logib edukalt sisse luuakse ja tagastatakse JWT tõend, mis seejärel salvestatakse lokaalselt (tavaliselt lokaalsesse- või sessioonimällu, kuid kasutada saab ka küpsiseid). Võrdluseks luuakse traditsiooniselt sessioon serveris ning kasutajale tagastatakse vaid küpsis, millega kasutajat hiljem ära tunda. Kui tegemist on ilma kasutajata protsessiga võib klient autentida ka otse luues ja ise allkirjastades JWT tõend koos salajase võtmega ja anda see edasi OAuth-i toetavale teenusele: POST /oauth2/token? Content-type: application/x-www-form-urlencoded grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=eyJhb... Kui klient annab edasi kehtiva JWT tõendi, loob server uue ligipääsutõendi access_token, millega saab sooritada kutseid teenusele ja neid kliendile tagasi saata. { "access_token": "eyJhb...", "token_type": "Bearer", "expires_in": 3600 } Kui klient soovib juurdepääsu kaitstud marsruudile või ressursile, peaks ta saatma JWT tõendi Authorization päisesse, kasutades Bearer skeemi. Authorization: Bearer eyJhbGci ... < jne > ... yu5CSpyHI See on olekuta autentimismehhanism, kuna kasutaja olekut ei salvestata kunagi serveri mällu. Serveris kaitstud marsruudid otsivad päises kehtivat JWT tõendit ning kui see on olemas, antakse kliendile ligipääs kaitstud ressurssidele. Kuna JWT tõendid on iseseisvad, on kõik vajalikud andmed olemas ning andmebaasi ei pea tegema mitmeid päringuid. JWT tõendid võivad sisaldada sessiooni olekut, kuid kui projekti nõuded lubavad sessiooni kehtetuks tunnistamist enne JWT aegumist, ei saa teenused enam usaldada tõendi seatud väiteid tõendit kasutades. Sessiooni valideerimiseks peab seetõttu tõendi väiteid kontrollima andmebaasi abil. See tähendab aga, et tõend ei ole enam olekuta, mistõttu ei ole JWT kasutamisel enam eelist. Turvakonsultant Tim McLean leidis mõnes JWT teegis haavatavused, mis kasutasid alg välja ebakorrektselt tõendite õigsuse kontrollimisel, tüüpiliselt tehes seda lubades alg=none tõendit. Kuigi nimetatud teekides on need haavatavused tänaseks prandatud, soovitab McLean alg väljast täielikult loobuda, et vältida tulevikus sarnaseid probleeme. Uusi alg=none haavatavusi leitakse aga siiamaani. Jones, Michael B.; Bradley, Bradley; Sakimura, Sakimura (2015. aasta mai). "JSON Web Token (JWT)". datatracker.ietf.org (Inglise keeles). Vaadatud 10. jaanuar 2022. {{netiviide}}: kontrolli kuupäeva väärtust: |aeg= (juhend)CS1 hooldus: mitu nime: autorite loend (link) CS1 hooldus: tundmatu keel (link) Jochen Nickel (2016). Mastering Identity and Access Management with Microsoft Azure (Inglise keeles). Lk 84. ISBN 9781785887888.{{raamatuviide}}: CS1 hooldus: tundmatu keel (link) "JWT.IO - JSON Web Tokens Introduction". jwt.io (Inglise keeles). Vaadatud 10. jaanuar 2022.{{netiviide}}: CS1 hooldus: tundmatu keel (link) Chris Sevilleja. "The Anatomy of a JSON Web Token" (Inglise keeles). Vaadatud 10. jaanuar 2022.{{netiviide}}: CS1 hooldus: tundmatu keel (link) "Understanding JWT for Connect apps". developer.atlassian.com (Inglise keeles). Vaadatud 10. jaanuar 2022.{{netiviide}}: CS1 hooldus: tundmatu keel (link) "draft-ietf-jose-json-web-signature-41 - JSON Web Signature (JWS)". tools.ietf.org (Inglise keeles). Vaadatud 10. jaanuar 2022.{{netiviide}}: CS1 hooldus: tundmatu keel (link) "draft-ietf-jose-json-web-encryption-40 - JSON Web Encryption (JWE)". tools.ietf.org (Inglise keeles). Vaadatud 10. jaanuar 2022.{{netiviide}}: CS1 hooldus: tundmatu keel (link) "Riigi autentimisteenus (TARA)". Riigi Infosüsteemi Amet (RIA). Vaadatud 10. jaanuar 2022. "Tehniline kirjeldus". Riigi Infosüsteemi Amet (RIA). {{netiviide}}: eiran teksti "https://e-gov.github.io/TARA-Doku/TehnilineKirjeldus" (juhend); parameeter |vaadatud= nõuab parameetrit |url= (juhend); puuduv või tühi |url= (juhend) "draft-ietf-jose-json-web-algorithms-40 - JSON Web Algorithms (JWA)". tools.ietf.org (Inglise keeles). Vaadatud 10. jaanuar 2022.{{netiviide}}: CS1 hooldus: tundmatu keel (link) Tim McLean (31. märts 2015). "Critical vulnerabilities in JSON Web Token libraries". Auth0 (Inglise keeles). Vaadatud 10. jaanuar 2022.{{netiviide}}: CS1 hooldus: tundmatu keel (link) Sven Slootweg. "Stop using JWT for sessions". joepie91 Ramblings. Vaadatud 10. jaanuar 2022. "CVE - Search Results". cve.mitre.org (Inglise keeles). Vaadatud 10. jaanuar 2022.{{netiviide}}: CS1 hooldus: tundmatu keel (link)