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 ալգորիթմ, որից հետո ավելանում է ստորագրության մասը և այս երեք մասերը բաժանվում են կետերով («.»)։


```json
{
  "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

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