ðŸŽŦ
← āļāļĨāļąāļšāđ„āļ›āļ„āļđāđˆāļĄāļ·āļ­

āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āđ‚āļ—āđ€āļ„āđ‡āļ™ JWT āļ­āļ˜āļīāļšāļēāļĒ: Header, Payload āđāļĨāļ° Signature

· āđāļ—āđ‡āļ: jwt-structure, jwt-header, jwt-payload, jwt-signature, json-web-token

āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āđ‚āļ—āđ€āļ„āđ‡āļ™ JWT āļ­āļ˜āļīāļšāļēāļĒ

āļ—āļļāļ JSON Web Token (JWT) āđ€āļ›āđ‡āļ™āļŠāļ•āļĢāļīāļ‡āļ—āļĩāđˆāļāļ°āļ—āļąāļ”āļĢāļąāļ”āđāļĨāļ°āļ›āļĨāļ­āļ”āļ āļąāļĒāļŠāļģāļŦāļĢāļąāļš URL āļ—āļĩāđˆāļ™āļģāļžāļē claims āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļŠāļ­āļ‡āļāđˆāļēāļĒ āļāļēāļĢāđ€āļ‚āđ‰āļēāđƒāļˆāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ āļēāļĒāđƒāļ™āđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļˆāļģāđ€āļ›āđ‡āļ™āļŠāļģāļŦāļĢāļąāļšāļ™āļąāļāļžāļąāļ’āļ™āļēāļ—āļļāļāļ„āļ™āļ—āļĩāđˆāļ—āļģāļ‡āļēāļ™āļāļąāļšāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāđāļšāļšāđƒāļŠāđ‰āđ‚āļ—āđ€āļ„āđ‡āļ™

āļŠāļēāļĄāļŠāđˆāļ§āļ™āļ‚āļ­āļ‡ JWT

JWT āļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒāļŠāļēāļĄāļŠāđˆāļ§āļ™āļ„āļąāđˆāļ™āļ”āđ‰āļ§āļĒāļˆāļļāļ” (.):

header.payload.signature

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

āđāļ•āđˆāļĨāļ°āļŠāđˆāļ§āļ™āđ€āļ›āđ‡āļ™ JSON āļ—āļĩāđˆāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāđāļšāļš base64url JWT āļ–āļđāļāļĨāļ‡āļ™āļēāļĄ āđ„āļĄāđˆāđ„āļ”āđ‰āđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠ â€” āđƒāļ„āļĢāļāđ‡āļ•āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļ–āļ­āļ”āļĢāļŦāļąāļŠāđāļĨāļ°āļ­āđˆāļēāļ™āđ€āļ™āļ·āđ‰āļ­āļŦāļēāđ„āļ”āđ‰

āļŠāđˆāļ§āļ™āļ—āļĩāđˆ 1: Header

header āļĄāļĩāļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļĄāļ•āļēāđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāđ‚āļ—āđ€āļ„āđ‡āļ™ â€” āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļāļēāļĢāļĨāļ‡āļ™āļēāļĄāđāļĨāļ°āļ›āļĢāļ°āđ€āļ āļ—āđ‚āļ—āđ€āļ„āđ‡āļ™

| āļŸāļīāļĨāļ”āđŒ | āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ | āļ„āđˆāļēāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡ | |-------|-------------|----------------| | alg | āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļāļēāļĢāļĨāļ‡āļ™āļēāļĄ (āļˆāļģāđ€āļ›āđ‡āļ™) | HS256, RS256, ES256 | | typ | āļ›āļĢāļ°āđ€āļ āļ—āđ‚āļ—āđ€āļ„āđ‡āļ™ (āđ„āļĄāđˆāļˆāļģāđ€āļ›āđ‡āļ™) | JWT | | kid | Key ID (āđ„āļĄāđˆāļˆāļģāđ€āļ›āđ‡āļ™) | "key-1" |

{
  "alg": "HS256",
  "typ": "JWT"
}

āļŸāļīāļĨāļ”āđŒ alg āļšāļ­āļāļœāļđāđ‰āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āđˆāļēāļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāđƒāļ”āļ—āļĩāđˆāđƒāļŠāđ‰āļŠāļĢāđ‰āļēāļ‡āļĨāļēāļĒāđ€āļ‹āđ‡āļ™ āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļ—āļĩāđˆāđ„āļĄāđˆāļ•āļĢāļ‡āļāļąāļ™ â€” āļŦāļĢāļ·āļ­āļāļēāļĢāļĒāļ­āļĄāļĢāļąāļš alg: "none" — āđ€āļ›āđ‡āļ™āļŠāđˆāļ­āļ‡āđ‚āļŦāļ§āđˆāļ”āđ‰āļēāļ™āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļ‚āļ­āļ‡ JWT āļ—āļĩāđˆāļžāļšāļšāđˆāļ­āļĒ

āļŠāđˆāļ§āļ™āļ—āļĩāđˆ 2: Payload

payload āļĄāļĩ claims āđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļœāļđāđ‰āđƒāļŠāđ‰āđāļĨāļ°āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļĄāļ•āļē Claims āđāļšāđˆāļ‡āļ­āļ­āļāđ€āļ›āđ‡āļ™āļŠāļēāļĄāļ›āļĢāļ°āđ€āļ āļ—:

Registered Claims

| Claim | āļŠāļ·āđˆāļ­āđ€āļ•āđ‡āļĄ | āļ§āļąāļ•āļ–āļļāļ›āļĢāļ°āļŠāļ‡āļ„āđŒ | |-------|-----------|---------| | iss | Issuer | āđƒāļ„āļĢāđ€āļ›āđ‡āļ™āļœāļđāđ‰āļ­āļ­āļāđ‚āļ—āđ€āļ„āđ‡āļ™ | | sub | Subject | āļĢāļ°āļšāļļāļ•āļąāļ§āļœāļđāđ‰āđƒāļŠāđ‰ | | aud | Audience | āļœāļđāđ‰āļĢāļąāļšāļ—āļĩāđˆāļ•āļąāđ‰āļ‡āđƒāļˆ | | exp | Expiration | āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ­āļēāļĒāļļāļ‚āļ­āļ‡āđ‚āļ—āđ€āļ„āđ‡āļ™ | | nbf | Not Before | āđ‚āļ—āđ€āļ„āđ‡āļ™āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āđ„āļ”āđ‰āļāđˆāļ­āļ™āđ€āļ§āļĨāļēāļ™āļĩāđ‰ | | iat | Issued At | āđ€āļ§āļĨāļēāļ—āļĩāđˆāļŠāļĢāđ‰āļēāļ‡āđ‚āļ—āđ€āļ„āđ‡āļ™ | | jti | JWT ID | āļ•āļąāļ§āļĢāļ°āļšāļļāđ‚āļ—āđ€āļ„āđ‡āļ™āļ—āļĩāđˆāđ„āļĄāđˆāļ‹āđ‰āļģāļāļąāļ™ |

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡ Payload āļ—āļĩāđˆāļ–āļ­āļ”āļĢāļŦāļąāļŠāđāļĨāđ‰āļ§

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022,
  "exp": 1516242622,
  "iss": "https://auth.example.com"
}

Public claims āļ–āļđāļāļāļģāļŦāļ™āļ”āđƒāļ™āļ—āļ°āđ€āļšāļĩāļĒāļ™ IANA āļŦāļĢāļ·āļ­āđƒāļŠāđ‰ URI āļ—āļĩāđˆāļ›āđ‰āļ­āļ‡āļāļąāļ™āļāļēāļĢāļŠāļ™āļāļąāļ™ Private claims āđ€āļ›āđ‡āļ™ claims āļ—āļĩāđˆāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡āļ—āļĩāđˆāļ•āļāļĨāļ‡āļāļąāļ™āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļœāļđāđ‰āļ­āļ­āļāđāļĨāļ°āļœāļđāđ‰āļĢāļąāļš

āļŠāđˆāļ§āļ™āļ—āļĩāđˆ 3: Signature

āļĨāļēāļĒāđ€āļ‹āđ‡āļ™āļ–āļđāļāļŠāļĢāđ‰āļēāļ‡āļ‚āļķāđ‰āļ™āđ‚āļ”āļĒāļāļēāļĢāļĢāļ§āļĄ header āļ—āļĩāđˆāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāđāļĨāđ‰āļ§ payload āļ—āļĩāđˆāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāđāļĨāđ‰āļ§ āđāļĨāļ° secret key āđ‚āļ”āļĒāđƒāļŠāđ‰āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļˆāļēāļ header āļĄāļĩāļ§āļąāļ•āļ–āļļāļ›āļĢāļ°āļŠāļ‡āļ„āđŒāļŠāļ­āļ‡āļ›āļĢāļ°āļāļēāļĢ:

  1. āļ„āļ§āļēāļĄāļŠāļĄāļšāļđāļĢāļ“āđŒ — āļĒāļ·āļ™āļĒāļąāļ™āļ§āđˆāļēāđ‚āļ—āđ€āļ„āđ‡āļ™āđ„āļĄāđˆāđ„āļ”āđ‰āļ–āļđāļāđāļāđ‰āđ„āļ‚āļŦāļĨāļąāļ‡āļˆāļēāļāļĨāļ‡āļ™āļēāļĄ
  2. āļāļēāļĢāļĢāļąāļšāļĢāļ­āļ‡āļ„āļ§āļēāļĄāļ–āļđāļāļ•āđ‰āļ­āļ‡ â€” āļžāļīāļŠāļđāļˆāļ™āđŒāļ§āđˆāļēāđ‚āļ—āđ€āļ„āđ‡āļ™āļ–āļđāļāļĨāļ‡āļ™āļēāļĄāđ‚āļ”āļĒāļāđˆāļēāļĒāļ—āļĩāđˆāļ„āļēāļ”āļŦāļ§āļąāļ‡

āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļĨāļēāļĒāđ€āļ‹āđ‡āļ™ HS256

HMACSHA256(
  base64urlEncode(header) + "." + base64urlEncode(payload),
  secret
)

āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļĨāļēāļĒāđ€āļ‹āđ‡āļ™ RS256

RSASHA256(
  base64urlEncode(header) + "." + base64urlEncode(payload),
  privateKey
)

Base64url āđ€āļ—āļĩāļĒāļšāļāļąāļš Base64 āļĄāļēāļ•āļĢāļāļēāļ™

| āļ”āđ‰āļēāļ™ | Base64 āļĄāļēāļ•āļĢāļāļēāļ™ | Base64url | |--------|-----------------|-----------| | āļ­āļąāļāļ‚āļĢāļ° 62 | + | - | | āļ­āļąāļāļ‚āļĢāļ° 63 | / | _ | | Padding | = | āļ–āļđāļāļĨāļ°āđ„āļ§āđ‰ |

āļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāļ™āļĩāđ‰āļ—āļģāđƒāļŦāđ‰ JWT āļ›āļĨāļ­āļ”āļ āļąāļĒāļŠāļģāļŦāļĢāļąāļš HTTP headers, query parameters āđāļĨāļ° URL paths āđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāđ€āļ›āļ­āļĢāđŒāđ€āļ‹āđ‡āļ™āļ•āđŒ

āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ JWT āļ—āļĩāđˆāļŠāļĄāļšāļđāļĢāļ“āđŒ

  1. āļŠāļĢāđ‰āļēāļ‡ header JSON āđāļĨāļ°āđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠ base64url
  2. āļŠāļĢāđ‰āļēāļ‡ payload JSON āđāļĨāļ°āđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠ base64url
  3. āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļ”āđ‰āļ§āļĒāļ•āļąāļ§āļ„āļąāđˆāļ™ .
  4. āļĨāļ‡āļ™āļēāļĄāļ”āđ‰āļ§āļĒāļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāđāļĨāļ° secret āļ—āļĩāđˆāđ€āļĨāļ·āļ­āļ
  5. āđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāļĨāļēāļĒāđ€āļ‹āđ‡āļ™āļ”āđ‰āļ§āļĒ base64url
  6. āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļ—āļąāđ‰āļ‡āļŠāļēāļĄāļŠāđˆāļ§āļ™āļ”āđ‰āļ§āļĒāļ•āļąāļ§āļ„āļąāđˆāļ™ .

āļ‚āđ‰āļ­āļ„āļ§āļĢāļžāļīāļˆāļēāļĢāļ“āļēāļ”āđ‰āļēāļ™āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ

  • āļ­āļĒāđˆāļēāđ€āļāđ‡āļšāļ„āļ§āļēāļĄāļĨāļąāļšāđƒāļ™ payload payload āļ–āļđāļāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠ āđ„āļĄāđˆāđ„āļ”āđ‰āļ–āļđāļāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāļĨāļąāļš
  • āļ•āļĢāļ§āļˆāļŠāļ­āļšāļĨāļēāļĒāđ€āļ‹āđ‡āļ™āđ€āļŠāļĄāļ­ āļŦāļēāļāđ„āļĄāđˆāļĄāļĩāļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļš āđƒāļ„āļĢāļāđ‡āļ•āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļ›āļĨāļ­āļĄāđāļ›āļĨāļ‡āđ‚āļ—āđ€āļ„āđ‡āļ™āđ„āļ”āđ‰
  • āļ•āļĢāļ§āļˆāļŠāļ­āļš header alg āļ›āļāļīāđ€āļŠāļ˜ alg: "none" āđāļĨāļ°āļ„āļ§āļēāļĄāļžāļĒāļēāļĒāļēāļĄāļĨāļ”āļĢāļ°āļ”āļąāļšāļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄ
  • āļ•āļąāđ‰āļ‡āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ­āļēāļĒāļļāļŠāļąāđ‰āļ™ āđƒāļŠāđ‰ claims exp āđ€āļ›āđ‡āļ™āļ™āļēāļ—āļĩāļŦāļĢāļ·āļ­āļŠāļąāđˆāļ§āđ‚āļĄāļ‡ āđ„āļĄāđˆāđƒāļŠāđˆāđ€āļ”āļ·āļ­āļ™

āļ–āļ­āļ”āļĢāļŦāļąāļŠāđ‚āļ—āđ€āļ„āđ‡āļ™ JWT āļ­āļ­āļ™āđ„āļĨāļ™āđŒ

āđƒāļŠāđ‰āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļ–āļ­āļ”āļĢāļŦāļąāļŠ JWT āđ€āļžāļ·āđˆāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļšāđ‚āļ—āđ€āļ„āđ‡āļ™āđƒāļ”āđ† āļ§āļēāļ‡āļĨāļ‡āđ„āļ›āđāļĨāļ°āļ”āļđ header, payload āđāļĨāļ°āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļāļēāļĢāļĨāļ‡āļ™āļēāļĄāļ—āļĩāđˆāļ–āļ­āļ”āļĢāļŦāļąāļŠāđāļĨāđ‰āļ§āļ—āļąāļ™āļ—āļĩ āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āđƒāļ™āđ€āļšāļĢāļēāļ§āđŒāđ€āļ‹āļ­āļĢāđŒāļ‚āļ­āļ‡āļ„āļļāļ“

āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āđ‚āļ—āđ€āļ„āđ‡āļ™ JWT āļ­āļ˜āļīāļšāļēāļĒ: Header, Payload āđāļĨāļ° Signature - CoolTool