Sobes.tech
Junior

Ի՞նչ է 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
    }
    
  • 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-ի տվյալների ծավալը մեծանալով՝ մեծանում է նաև տոքենի չափը: