Ի՞նչ է JWT (JSON Web Token):
sobes.tech AI
Պատասխան AI-ից
JSON Web Token (JWT) ը կոմպակտ, անվտանգ URL- ի համար տվյալների փոխանցման ձև է JSON ձևաչափով:
Աշխատանքի սկզբունքները:
-
Տոկենը բաղկացած է երեք մասից, որոնք բաժանված են կետերով (
.):header.payload.signature: -
Header (Հետագիծ): պարունակում է մետադատված տվյալներ տոքենի մասին, ինչպիսիք են տիպը (JWT) և ստորագրման ալգորիթմը (օրինակ, HS256, RS256):
{ "alg": "HS256", "typ": "JWT" } -
Payload (Բեռ): պարունակում է "claims" - հայտարարություններ կամ տեղեկություններ, որոնք ուզում ենք փոխանցել: Կան տարբեր տեսակներ:
- Registered claims: գրանցված, բայց ընտրովի claims, ինչպիսիք են
iss(հրատարակիչ),exp(վավերության ժամկետ),sub(տема): - Public claims: սահմանված հանրային օգտագործման համար, պետք է գրանցված լինեն IANA JSON Web Token գրանցամատյանում կամ URI, որը պարունակում է անվան տարածք, պաշտպանված է բախումներից:
- Private claims: ազատ հայտարարություններ, համաձայնեցված կողմերի միջև:
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 } - Registered claims: գրանցված, բայց ընտրովի claims, ինչպիսիք են
-
Signature (Կցում): ստեղծվում է կոդավորված գլխի և բեռի համադրությամբ՝ օգտագործելով գաղտնիք և ալգորիթմ, նշված գլխում: Սա ապահովում է տոքենի ամբողջականությունը - եթե ինչ-որ մեկը փոխի գլխի կամ բեռի պարունակությունը, ստորագրությունը կդառնա անվավեր:
# Օրինակ՝ HS256 օգտագործելով ստորագրություն ստեղծելու համար import hmac, hashlib header_str = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' # Base64Url(Հետագիծ) payload_str = 'eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ' # Base64Url(Բեռ) secret = 'your_secret_key' # Կցում = HMACSHA256(Base64Url(Հետագիծ) + "." + Base64Url(Բեռ), գաղտնիք) signature = hmac.new( secret.encode('utf-8'), (header_str + '.' + payload_str).encode('utf-8'), hashlib.sha256 ).digest() # Կոդավորում ստորագրությունը Base64Url-ով import base64 signature_b64url = base64.urlsafe_b64encode(signature).rstrip(b'=').decode('ascii') # Վերջնական տոքենը՝ header_str + '.' + payload_str + '.' + signature_b64url
Հայտարարության կիրառումը:
- Աутենտիկացիա: Սերվերը տալիս է տոքեն օգտվողին հաջողված աութենտիկացիայից հետո: Օգտվողը ուղարկում է այդ տոքենը յուրաքանչյուր հարցում: Սերվերը ստուգում է տոքենի վավերությունը և թույլ է տալիս մուտք դեպի ռեսուրսներ:
- Տվյալների փոխանակում: Անվտանգ փոխանցում փոքր ծավալի տվյալներ տարբեր ծառայությունների միջև:
Առավելություններ:
- Կոմպակտություն: Փոքր տվյալներ փոխանցելու համար՝ համեմատ XML-ի:
- Ինքնաբավություն: Տոքենում արդեն պարունակվում է անհրաժեշտ տեղեկությունը օգտվողի մասին, ինչը նվազեցնում է տվյալների բազային դիմումների անհրաժեշտությունը:
- Stateless: Սերվերը չի պետք, որ պահի սեսիայի տեղեկությունները:
- Կրիպտոգրաֆիկ ստորագրում: Գոյություն է տալիս տվյալների ամբողջականությանը:
Մակարդակներ:
- Չի կարող վերականգնել տոքենը: Դրանից հետո տոքենը գործում է մինչև նրա ժամկետի ավարտը, եթե չիրականացվի սև ցուցակների մեխանիզմ:
- Գաղտնիքի պահպանում: Գաղտնի բանալիքը պետք է պահվի անվտանգ:
- Չափը:
payload-ի տվյալների ծավալը մեծանալով՝ մեծանում է նաև տոքենի չափը: