āđāļāļĢāļāļŠāļĢāđāļēāļāđāļāđāļāđāļ JWT āļāļāļīāļāļēāļĒ: Header, Payload āđāļĨāļ° Signature
āđāļāļĢāļāļŠāļĢāđāļēāļāđāļāđāļāđāļ 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 āļĄāļĩāļ§āļąāļāļāļļāļāļĢāļ°āļŠāļāļāđāļŠāļāļāļāļĢāļ°āļāļēāļĢ:
- āļāļ§āļēāļĄāļŠāļĄāļāļđāļĢāļāđ â āļĒāļ·āļāļĒāļąāļāļ§āđāļēāđāļāđāļāđāļāđāļĄāđāđāļāđāļāļđāļāđāļāđāđāļāļŦāļĨāļąāļāļāļēāļāļĨāļāļāļēāļĄ
- āļāļēāļĢāļĢāļąāļāļĢāļāļāļāļ§āļēāļĄāļāļđāļāļāđāļāļ â āļāļīāļŠāļđāļāļāđāļ§āđāļēāđāļāđāļāđāļāļāļđāļāļĨāļāļāļēāļĄāđāļāļĒāļāđāļēāļĒāļāļĩāđāļāļēāļāļŦāļ§āļąāļ
āļāļēāļĢāļŠāļĢāđāļēāļāļĨāļēāļĒāđāļāđāļ 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 āļāļĩāđāļŠāļĄāļāļđāļĢāļāđ
- āļŠāļĢāđāļēāļ header JSON āđāļĨāļ°āđāļāđāļēāļĢāļŦāļąāļŠ base64url
- āļŠāļĢāđāļēāļ payload JSON āđāļĨāļ°āđāļāđāļēāļĢāļŦāļąāļŠ base64url
- āđāļāļ·āđāļāļĄāļāđāļāļāđāļ§āļĒāļāļąāļ§āļāļąāđāļ
. - āļĨāļāļāļēāļĄāļāđāļ§āļĒāļāļąāļĨāļāļāļĢāļīāļāļķāļĄāđāļĨāļ° secret āļāļĩāđāđāļĨāļ·āļāļ
- āđāļāđāļēāļĢāļŦāļąāļŠāļĨāļēāļĒāđāļāđāļāļāđāļ§āļĒ base64url
- āđāļāļ·āđāļāļĄāļāđāļāļāļąāđāļāļŠāļēāļĄāļŠāđāļ§āļāļāđāļ§āļĒāļāļąāļ§āļāļąāđāļ
.
āļāđāļāļāļ§āļĢāļāļīāļāļēāļĢāļāļēāļāđāļēāļāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ
- āļāļĒāđāļēāđāļāđāļāļāļ§āļēāļĄāļĨāļąāļāđāļ payload payload āļāļđāļāđāļāđāļēāļĢāļŦāļąāļŠ āđāļĄāđāđāļāđāļāļđāļāđāļāđāļēāļĢāļŦāļąāļŠāļĨāļąāļ
- āļāļĢāļ§āļāļŠāļāļāļĨāļēāļĒāđāļāđāļāđāļŠāļĄāļ āļŦāļēāļāđāļĄāđāļĄāļĩāļāļēāļĢāļāļĢāļ§āļāļŠāļāļ āđāļāļĢāļāđāļāļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļĨāļāļĄāđāļāļĨāļāđāļāđāļāđāļāđāļāđ
- āļāļĢāļ§āļāļŠāļāļ header
algāļāļāļīāđāļŠāļalg: "none"āđāļĨāļ°āļāļ§āļēāļĄāļāļĒāļēāļĒāļēāļĄāļĨāļāļĢāļ°āļāļąāļāļāļąāļĨāļāļāļĢāļīāļāļķāļĄ - āļāļąāđāļāđāļ§āļĨāļēāļŦāļĄāļāļāļēāļĒāļļāļŠāļąāđāļ āđāļāđ claims
expāđāļāđāļāļāļēāļāļĩāļŦāļĢāļ·āļāļāļąāđāļ§āđāļĄāļ āđāļĄāđāđāļāđāđāļāļ·āļāļ
āļāļāļāļĢāļŦāļąāļŠāđāļāđāļāđāļ JWT āļāļāļāđāļĨāļāđ
āđāļāđāđāļāļĢāļ·āđāļāļāļĄāļ·āļāļāļāļāļĢāļŦāļąāļŠ JWT āđāļāļ·āđāļāļāļĢāļ§āļāļŠāļāļāđāļāđāļāđāļāđāļāđ āļ§āļēāļāļĨāļāđāļāđāļĨāļ°āļāļđ header, payload āđāļĨāļ°āļāļąāļĨāļāļāļĢāļīāļāļķāļĄāļāļēāļĢāļĨāļāļāļēāļĄāļāļĩāđāļāļāļāļĢāļŦāļąāļŠāđāļĨāđāļ§āļāļąāļāļāļĩ āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļąāđāļāļŦāļĄāļāđāļāļīāļāļāļķāđāļāđāļāđāļāļĢāļēāļ§āđāđāļāļāļĢāđāļāļāļāļāļļāļ