JWT 眲åã®æ€èšŒæ¹æ³: HS256ãRS256ãES256
JWT 眲åã®æ€èšŒæ¹æ³
JWT ã¯ã¯ã¬ãŒã ãå¹³æã§ä¿æããŸããåœé ãé²ãå¯äžã®èŠçŽ ã¯çœ²åã§ããæ€èšŒããªããã°ãæ»æè ã¯ä»»æã®ããŒã¯ã³ãçæããŠä»»æã®ãŠãŒã¶ãŒã«ãªãããŸãããšãã§ããŸãããã®ã¬ã€ãã§ã¯ãæãäžè¬ç㪠3 ã€ã® JWT 眲åã¢ã«ãŽãªãºã ãšãããããã®æ€èšŒæ¹æ³ã«ã€ããŠèª¬æããŸãã
æ€èšŒããã»ã¹
ã¢ã«ãŽãªãºã ã«é¢ä¿ãªããJWT 眲åã®æ€èšŒã¯åãæé ã«åŸããŸã:
- ããŒã¯ã³ã
.ã§åå²ããŠãããããŒããã€ããŒãã眲åãæœåºããŸãã - ããããŒã base64url ãã³ãŒãããŠ
algãã£ãŒã«ããèªã¿åããŸãã - ã¢ã«ãŽãªãºã ãšéµã䜿çšããŠãããããŒãšãã€ããŒããã眲åãåèšç®ããŸãã
- åèšç®ãã眲åãããŒã¯ã³ã®çœ²åãšæ¯èŒããŸãã
- äžèŽããã°ãããŒã¯ã³ã¯æ¬ç©ã§ãã
HS256ïŒHMAC-SHA256ïŒ
HS256 ã¯å¯Ÿç§°ã¢ã«ãŽãªãºã ã§ã â åãç§å¯éµã眲åã®äœæãšæ€èšŒã®äž¡æ¹ã«äœ¿çšãããŸãã
signature = HMACSHA256(
base64urlEncode(header) + "." + base64urlEncode(payload),
secret
)
æ€èšŒããã«ã¯ãå ±æç§å¯éµã§ HMAC ãåèšç®ããŠæ¯èŒããŸã:
Token: header.payload.sig
Secret: "my-shared-secret"
1. Compute: HMACSHA256("header.payload", "my-shared-secret")
2. Compare: computedSignature === sig
ã»ãã¥ãªãã£äžã®èæ ®äºé : ç§å¯éµã¯æ©å¯ã«ä¿ã¡ã宿çã«ããŒããŒã·ã§ã³ããå°ãªããšã 256 ãããã®ãšã³ããããŒãæã€å¿ èŠããããŸããHS256 ã¯ã倿°ã®ãµãŒãã¹ãå ±æç§å¯éµãå¿ èŠãšãããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã«ã¯é©ããŠããŸããã
RS256ïŒRSA-SHA256ïŒ
RS256 ã¯é察称ã§ããçºè¡è ã¯ç§å¯éµã§çœ²åããæ€èšŒè ã¯å¯Ÿå¿ããå ¬ééµã§æ€èšŒããŸãã
signature = RSASHA256(
base64urlEncode(header) + "." + base64urlEncode(payload),
privateKey
)
æ€èšŒããã«ã¯ãå ¬ééµã䜿çšããŸã:
Token: header.payload.sig
Public: "-----BEGIN PUBLIC KEY-----..."
1. Load the RSA public key
2. Verify: RSA_SHA256_verify("header.payload", sig, publicKey)
å©ç¹: 眲åéµãšæ€èšŒéµãåé¢ãããŠããŸããã©ã®ãµãŒãã¹ãç§å¯éµãä¿æããã«æ€èšŒã§ããŸããå ¬ééµã¯ JWKS ãšã³ããã€ã³ãããé ä¿¡ã§ãããããããŒããŒã·ã§ã³ã容æã§ãã
ES256ïŒECDSA-SHA256ïŒ
ES256 㯠P-256 æ²ç·ã䜿çšãã ECDSA ã䜿çšããŸããRS256 ãšåæ§ã«é察称ã§ãã
signature = ECDSA_SHA256(
base64urlEncode(header) + "." + base64urlEncode(payload),
privateKey
)
æ€èšŒã«ã¯ ECDSA P-256 å ¬ééµã䜿çšããŸããES256 ã¯çœ²åãå€§å¹ ã«å°ããïŒRSA-2048 ã® 256 ãã€ãã«å¯Ÿã㊠64 ãã€ãïŒãæ€èšŒãé«éã§ãã
ã¢ã«ãŽãªãºã ã®æ¯èŒ
| ãããã㣠| HS256 | RS256 | ES256 | |----------|-------|-------|-------| | éµã®çš®é¡ | 察称ïŒå ±æç§å¯éµïŒ | é察称ïŒRSA éµãã¢ïŒ | é察称ïŒEC éµãã¢ïŒ | | 眲åãµã€ãº | 32 ãã€ã | 256 ãã€ã | 64 ãã€ã | | éµã®é åž | ç§å¯ã«å ±æ | å ¬ééµã¯å ¬é | å ¬ééµã¯å ¬é | | ããŒããŒã·ã§ã³ | äžçšåºŠ | 容æïŒJWKSïŒ | 容æïŒJWKSïŒ | | 䜿çšäŸ | ä¿¡é Œã§ããå éšã·ã¹ãã | 忣 API | ã¢ãã€ã«ãIoT |
ããããæ€èšŒã®èœãšã穎
- ã¢ã«ãŽãªãºã æ··ä¹±æ»æã ã³ãŒãã匷å¶ãªãã§ããŒã¯ã³ãã
algãèªã¿åãå Žåãæ»æè ã¯ã¢ã«ãŽãªãºã ã倿Žã§ããŸããã¢ã«ãŽãªãºã ãæåŸ å€ãšäžèŽããããšãåžžã«æ€èšŒããŠãã ããã alg: "none"ã®åçã äžéšã®ã©ã€ãã©ãªã¯çœ²åãªãããŒã¯ã³ãåãå ¥ããŸããalg: "none"ãæç€ºçã«æåŠããŠãã ããã- çœ²åæ¯èŒã®äžå®å šãã é宿°æéã®æ¯èŒã¯ãã¿ã€ãã³ã°æ»æã«ãã£ãŠæ å ±ãæŒãããããå¯èœæ§ããããŸããJWT ã©ã€ãã©ãªã®çµã¿èŸŒã¿æ¯èŒã䜿çšããŠãã ããã
JWT ããŒã¯ã³ããªã³ã©ã€ã³ã§æ€èšŒ
JWT ãã³ãŒããŒããŒã«ã䜿çšããŠãä»»æã®ããŒã¯ã³ããã³ãŒãããã³æ€èšŒããŸããããŒã¯ã³ã貌ãä»ããŠããããŒãšãã€ããŒãã衚瀺ããé©åãªç§å¯éµãŸãã¯å ¬ééµãæå®ããŠçœ²åãæ€èšŒããŸãããã¹ãŠã®åŠçã¯ãã©ãŠã¶å ã§è¡ãããŸãã