JSON Web Token

Վիքիպեդիայից՝ ազատ հանրագիտարանից
Jump to navigation Jump to search

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 խմբի կողմից[1]։

Կառուցվածք[խմբագրել | խմբագրել կոդը]

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.[2]։

Ծանոթագրություններ[խմբագրել | խմբագրել կոդը]

  1. «JWT Handbook v0.13.0, с.6-7» (անգլերեն)։ auth0.com։ Վերցված է 2017-12-11 
  2. auth0.com։ «JWT.IO» (անգլերեն)։ jwt.io։ Վերցված է 2017-12-20 

Արտաքին հղղումներ[խմբագրել | խմբագրել կոդը]