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 խմբի կողմից[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-տոկեներ, կատարվում են հետևյալ հաջորդականությունը․
- Հաճախորդը վավերացում է անցնում ծրագրում։
- Եթե վավերացումը հաջող է ապա սերվերը ուղարկում է 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.[2]։
Ծանոթագրություններ[խմբագրել | խմբագրել կոդը]
Արտաքին հղումներ[խմբագրել | խմբագրել կոդը]
- 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