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 Registry-да теркәлергә тиеш яки 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 эчендәге мәгълүмат күләме арткан саен, токенның размеры арта.