**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-տոկեներ, կատարվում են հետևյալ հաջորդականությունը․

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

Տարբերակներ
-----------

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

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

1. ↑  «JWT Handbook v0.13.0, с.6-7» (անգլերեն)։ auth0.com։ Վերցված է 2017 թ․ դեկտեմբերի 11
2. ↑  auth0.com։ «JWT.IO» (անգլերեն)։ jwt.io։ Վերցված է 2017 թ․ դեկտեմբերի 20

Արտաքին հղումներ
----------------

* jwt.io — specialized website about JWT with tools and documentation, maintained by Auth0
* - IETF official website
* - JWT Handbook by Sebastián Peyrott