JSON Web Token

JSON Web Token (JWT), բաց ստանդարտ (RFC 7519), որը նախատեսված է տոկեներին հասանելիություն տալու համար, հիմնված է JSON ֆորմատի հիման վրա։ Հիմնականում օգտագործվում է վավերացման տվյալների անվտանգ փոխանցման համար հիմնականում հաճախորդ-սերվեր հավելվածներում։ Տոկենները ստեղծվում են սերվերի կողմից, ստրոագրվում գաղտնի բանալիով և փոխանցվում հաճախորդին, որը նրան պետք է գալիս հետագայում իր ինքնությունը հաստատելու համար։

Պատմություն 
2011 թվականին կազմվեց խմբավորում՝ JOSE (JSON Object Signing and Encryption group), որի նպատակը կոդավորման և ինքնության հաստատման մեխանիզմի պաշտպանությունն էր։ 2013 թվականին ազատ հասանելիության տակ հայտնվեց ոչ պաշտոնական օրինակներ, որոնք օգտագործում էին այս խմբի գաղափարը, որն էլ հետագայում դարձավ ստանդարտ RFC: JWT, JWS, JWE, JWK և JWA։

JWT պաշտոնական ստանդարտավորվեց 2015 թվականին IETF խմբի կողմից։

Կառուցվածք 
JWT տոկենը բաղկացած է երեք մասից՝ վերնագիր (header), ծանրաբեռնվածություն (payload) և ստորագրություն կամ տվյալների կոդավորում։ Առաջին երկու մասերը JSON օբյեկտներ են իրենց յուրահատուկ կառուցվածքով։ Երրորդ մասը կախված է առաջինից և ընտրված ալգորիթմից։ Տոկեները կարող են կոդավորվել (JWS/JWE Compact Serialization) կոմպակտ ներկայացմամբ․ վերնագիրը և ծանրաբեռնավորվածությունը ընդունում են կոդավորման Base64-URL ալգորիթմ, որից հետո ավելանում է ստորագրության մասը և այս երեք մասերը բաժանվում են կետերով («.»)։

{
  "alg": "HS512",
  "typ": "JWT"
}
{
  "sub": "12345",
  "name": "John Gold",
  "admin": true
}

eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NSIsIm5hbWUiOiJKb2huIEdvbGQiLCJhZG1pbiI6dHJ1ZX0K.
LIHjWCBORSWMEibq-tnT8ue_deUqZx1K0XxCOXZRrBI

Վերնագիր 
Վերնագրի մասում գրում է անհրաժեշտ տեղեկություններ տոկենների մասին։

Այստեղ կա մեկ պարտադիր բանալի․
 alg․ նշվում է այն ալգորիթմը, որը օգտագործվել է կոդավորման համար։

Ոչ պարտադիր բանալիներ․ 
 typ, օգտագործվում է այն ժամանակ, երբ տոկեները խառնվում են այլ օբյեկտների հետ։ 
 cty, պարունակության տիպ։ Եթե տոկենում բացի գրանցված բանելիներից կա այլ բանալի, որը ավելացել է օգտատիրոջ կողմից, ապա այդ բանալին չպետք է լինի։

Ծանրաբեռնվածություն 
Այս մասում տեղադրվում է օգտատիրոջ մասին տեղեկություններ, ինչպես նաև կարող է հայտնվել որոշակի գրանցված բանալիներ։ Այս մասում գրվող բոլոր բանալիները ոչ պարտադիր են։

Աշխատանքի սկզբմունք 
Ինչպես հայտնի է, հաջախորդ-սերվեր ծրագրերում, որոնք օգտագործում են JSON-տոկեներ, կատարվում են հետևյալ հաջորդականությունը․

 Հաճախորդը վավերացում է անցնում ծրագրում։ 
 Եթե վավերացումը հաջող է ապա սերվերը ուղարկում է access- և refresh-տոկեներ։ 
 Սերվերին հետագա հարցումների ժամանակ հաճախորդը օգտագործում է access-տոկենը։ Սերվերը ստուգում է տոկենը և նրան նոր միայն, նրան տալիս հասանելիություն ռեսուրսներին։ 
 Եթե, access-տոկենը դառում է անհասանելի, հաճախորդը սերվերին է ուղարկում refresh-տոկենը, որն էլ նրան տրամադրում է երկու նոր թարմացված տոկեներ։ 
 Սակայն եթե refresh-տոկենը նույնպես դառնում է անհասանել, ապա հաճախորդը պարտավոր է ևս մեկ անգամ անցնել վավերացում։

Տարբերակներ 
Գոյություն ունի JWT-ի իրականացումներ հետևյալ լեզուներում և ֆրեյմվորքերում․ Clojure, .NET, Go, Haskell, Python, Java, JavaScript, Lua, Perl, PHP, Ruby, Rust, Scala, D, Erlang, Common Lisp և Elixir.։

Ծանոթագրություններ

Արտաքին հղղումներ 
 jwt.io — specialized website about JWT with tools and documentation, maintained by Auth0
 https://tools.ietf.org - IETF official website
 https://web.archive.org/web/20171201173336/https://auth0.com/e-books/jwt-handbook - JWT Handbook by Sebastián Peyrott

Տեղեկատվական անվտանգություն
Ստանդարտներ
Վավերացում
Վեբ ծրագրավորում
Մետատվյալներ