JWT ããŒã¯ã³æ§é ã®è§£èª¬: ããããŒããã€ããŒãã眲å
JWT ããŒã¯ã³æ§é ã®è§£èª¬
ãã¹ãŠã® JSON Web TokenïŒJWTïŒã¯ã2 ã€ã®åœäºè éã§ã¯ã¬ãŒã ãéã¶ãã³ã³ãã¯ãã§ URL ã»ãŒããªæååã§ãããã®å éšæ§é ãçè§£ããããšã¯ãããŒã¯ã³ããŒã¹ã®ã»ãã¥ãªãã£ãæ±ãããããéçºè ã«ãšã£ãŠäžå¯æ¬ ã§ãã
JWT ã® 3 ã€ã®éšå
JWT ã¯ãããïŒ.ïŒã§åºåããã 3 ã€ã®éšåã§æ§æãããŸã:
header.payload.signature
äŸ:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
åéšå㯠base64url ãšã³ã³ãŒãããã JSON ã§ããJWT ã¯çœ²åãããŠãããæå·åã¯ãããŠããŸãã â 誰ã§ãå 容ããã³ãŒãããŠèªãããšãã§ããŸãã
ããŒã 1: ããããŒ
ããããŒã«ã¯ã眲åã¢ã«ãŽãªãºã ãšããŒã¯ã³ã®çš®é¡ãšãããããŒã¯ã³ã«é¢ããã¡ã¿ããŒã¿ãå«ãŸããŸãã
| ãã£ãŒã«ã | 説æ | å€ã®äŸ |
|-------|-------------|----------------|
| alg | 眲åã¢ã«ãŽãªãºã ïŒå¿
é ïŒ | HS256ãRS256ãES256 |
| typ | ããŒã¯ã³ã®çš®é¡ïŒãªãã·ã§ã³ïŒ | JWT |
| kid | ã㌠IDïŒãªãã·ã§ã³ïŒ | "key-1" |
{
"alg": "HS256",
"typ": "JWT"
}
alg ãã£ãŒã«ãã¯ãã©ã®ã¢ã«ãŽãªãºã ã§çœ²åãäœæãããããæ€èšŒè
ã«äŒããŸããã¢ã«ãŽãªãºã ã®äžäžèŽ â ããã㯠alg: "none" ãåçããããš â ã¯ãäžè¬ç㪠JWT ã»ãã¥ãªãã£è匱æ§ã§ãã
ããŒã 2: ãã€ããŒã
ãã€ããŒãã«ã¯ããŠãŒã¶ãŒã«é¢ããã¯ã¬ãŒã ãšã¡ã¿ããŒã¿ãå«ãŸããŸããã¯ã¬ãŒã 㯠3 ã€ã®ã«ããŽãªã«åé¡ãããŸã:
ç»é²æžã¿ã¯ã¬ãŒã
| ã¯ã¬ãŒã | æ£åŒåç§° | çšé |
|-------|-----------|---------|
| iss | Issuer | ããŒã¯ã³ãçºè¡ããäž»äœ |
| sub | Subject | ãŠãŒã¶ãŒãèå¥ãã |
| aud | Audience | æå³ãããåä¿¡è
|
| exp | Expiration | ããŒã¯ã³ã®æå¹æéã¿ã€ã ã¹ã¿ã³ã |
| nbf | Not Before | ãã®æå»ããåã¯ããŒã¯ã³ãç¡å¹ |
| iat | Issued At | ããŒã¯ã³ã®äœæã¿ã€ã ã¹ã¿ã³ã |
| jti | JWT ID | ããŒã¯ã³ãäžæã«èå¥ãã ID |
ãã³ãŒãæžã¿ãã€ããŒãã®äŸ
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022,
"exp": 1516242622,
"iss": "https://auth.example.com"
}
å ¬éã¯ã¬ãŒã 㯠IANA ã¬ãžã¹ããªã§å®çŸ©ãããããè¡çªèæ§ã®ãã URI ã䜿çšããŸãããã©ã€ããŒãã¯ã¬ãŒã ã¯ãçºè¡è ãšæ¶è²»è ãåæããã«ã¹ã¿ã ã¯ã¬ãŒã ã§ãã
ããŒã 3: 眲å
眲åã¯ããšã³ã³ãŒããããããããŒããšã³ã³ãŒãããããã€ããŒããããã³ããããŒã§æå®ãããã¢ã«ãŽãªãºã ã䜿çšããç§å¯éµãçµã¿åãããŠäœæãããŸãããã®åœ¹å²ã¯æ¬¡ã® 2 ã€ã§ã:
- æŽåæ§ â 眲ååŸã«ããŒã¯ã³ãæ¹ãããããŠããªãããšã確èªããŸãã
- èªèšŒ â ããŒã¯ã³ãæåŸ ãããäž»äœã«ãã£ãŠçœ²åãããããšã蚌æããŸãã
HS256 眲åã®äœæ
HMACSHA256(
base64urlEncode(header) + "." + base64urlEncode(payload),
secret
)
RS256 眲åã®äœæ
RSASHA256(
base64urlEncode(header) + "." + base64urlEncode(payload),
privateKey
)
Base64url ãšæšæº Base64 ã®æ¯èŒ
| é
ç® | æšæº Base64 | Base64url |
|--------|-----------------|-----------|
| 62 çªç®ã®æå | + | - |
| 63 çªç®ã®æå | / | _ |
| ããã£ã³ã° | = | çç¥ããã |
ãã®ãšã³ã³ãŒãã£ã³ã°ã«ãããJWT ã¯ããŒã»ã³ããšã³ã³ãŒãã£ã³ã°ãªãã§ HTTP ããããŒãã¯ãšãªãã©ã¡ãŒã¿ãURL ãã¹ã«å¯ŸããŠå®å šã«ãªããŸãã
JWT ã®å®å šãªäœæããã»ã¹
- ããã㌠JSON ãäœæããbase64url ãšã³ã³ãŒãããŸãã
- ãã€ããŒã JSON ãäœæããbase64url ãšã³ã³ãŒãããŸãã
.åºåãã§é£çµããŸãã- éžæããã¢ã«ãŽãªãºã ãšç§å¯éµã§çœ²åããŸãã
- 眲åã base64url ãšã³ã³ãŒãããŸãã
- 3 ã€ã®éšåããã¹ãŠ
.åºåãã§é£çµããŸãã
ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé
- ãã€ããŒãã«ç§å¯æ å ±ãä¿åããªãã§ãã ããã ãã€ããŒãã¯ãšã³ã³ãŒããããŠããã ãã§ãæå·åã¯ãããŠããŸããã
- åžžã«çœ²åãæ€èšŒããŠãã ããã æ€èšŒããªããã°ã誰ã§ãããŒã¯ã³ãåœé ã§ããŸãã
algããããŒã確èªããŠãã ãããalg: "none"ãšã¢ã«ãŽãªãºã ã®ããŠã³ã°ã¬ãŒã詊è¡ãæåŠããŸãã- çãæå¹æéãèšå®ããŠãã ããã
expã¯ã¬ãŒã ãæ°ãæã§ã¯ãªããæ°åãŸãã¯æ°æéåäœã§äœ¿çšããŸãã
JWT ããŒã¯ã³ããªã³ã©ã€ã³ã§ãã³ãŒã
JWT ãã³ãŒããŒããŒã«ã䜿çšããŠãä»»æã®ããŒã¯ã³ã調ã¹ãŸãã貌ãä»ããã ãã§ããã³ãŒããããããããŒããã€ããŒãã眲åã¢ã«ãŽãªãºã ãå³åº§ã«è¡šç€ºãããŸãããã¹ãŠã®åŠçã¯ãã©ãŠã¶å ã§è¡ãããŸãã