æçµæŽæ°:
ãä»çµã¿è§£èª¬ãJWTã¯ã©ããã£ãŠãŠãŒã¶ãŒèªèšŒãå®çŸããŠããã®ã â ããŒã¯ã³ã®äžèº«ãå³è§£
ãã°ã€ã³ããããšã«ãããŒã¯ã³ãã£ãŠãããããããã©ãããã£ãŠäœãªã®ïŒ
ããããŸãã«JWTïŒJSON Web TokenïŒã ãããã°ã€ã³ã«æåãããšããµãŒããŒãããã®äººã¯æ¬äººç¢ºèªæžã¿ã§ãããšããæ
å ±ãã®ã¥ããšè©°ã蟌ãã æååãçºè¡ãããã ãæ¬¡å以éã®ãªã¯ãšã¹ãã§ã¯ããã®ããŒã¯ã³ãæç€ºããã ãã§ããããã£ããã°ã€ã³ãã人ã ãããšåããä»çµã¿ã ãã
æååã®äžã«æ
å ±ãå
¥ã£ãŠãã®ïŒèŠãç®ã¯ã©ã³ãã ãªæåã®çŸ
åã«èŠãããã©âŠ
å®ã¯JWTã¯3ã€ã®ããŒãããããïŒ.ïŒã§åºåãããæ§é ã«ãªã£ãŠãããã ããHeader.Payload.Signatureãã®3ã€ã ããHeaderã«ã¯ã¢ã«ãŽãªãºã ãšããŒã¯ã³ã®ã¿ã€ããPayloadã«ã¯ãŠãŒã¶ãŒæ
å ±ãæå¹æéãSignatureã«ã¯æ¹ããæ€ç¥çšã®çœ²åãå
¥ã£ãŠãããã
ãã£ããŠãŒã¶ãŒæ
å ±ããã®ãŸãŸå
¥ã£ãŠãã®ïŒããã£ãŠå±ãªããªãã®ïŒ
ãã質åã ãã眲åä»ãã®JWTã§ã¯ãHeaderãšPayloadã¯Base64urlïŒURLã«äœ¿ãã圢ã®Base64ïŒã§ãšã³ã³ãŒããããŠããã ãã§ãæå·åã¯ãããŠããªããã ãã€ãŸããã³ãŒãããã°äžèº«ã¯èª°ã§ãèªãããäžèº«ãæå·åããJWE圢åŒããããã©ããµã€ãã«èŠãããã®ã¯çœ²åä»ãã®ãã®ã ããã ãããã¹ã¯ãŒããã¯ã¬ãžããã«ãŒãçªå·ã®ãããªæ©å¯æ
å ±ã¯çµ¶å¯Ÿã«å
¥ãã¡ããã¡ã ããå
¥ããã®ã¯ãŠãŒã¶ãŒIDãæš©éã¬ãã«ãªã©ãèªãŸããŠãèŽåœçã§ãªãæ
å ±ã«éããã ã
ããã眲åïŒSignatureïŒã®ã»ãã¯äœãããŠãã®ïŒ
眲åã¯ããã®ããŒã¯ã³ã¯æ¹ãããããŠããŸããããä¿èšŒããéšåã ããããšãã°HS256ãªãããµãŒããŒã ããç¥ã£ãŠããç§å¯éµïŒSecretïŒã䜿ã£ãŠãHeaderãšPayloadããHMAC-SHA256ãšãã眲åãèšç®ãããã ããã誰ããPayloadã®äžèº«ãæžãæãããã眲åãšäžèŽããªããªããããããã¯åœç©ã ããšãããã¬ãä»çµã¿ã ããRS256ã®ããã«ãç§å¯éµã§çœ²åããŠå
¬ééµã§æ€èšŒããæ¹åŒããããã
ãªãã»ã©ïŒã§ããæãªããã®ã»ãã·ã§ã³IDãšã¯äœãéãã®ïŒ
äžçªå€§ããªéãã¯ãã¹ããŒãã¬ã¹ããã©ããã ããã»ãã·ã§ã³æ¹åŒã ãšãµãŒããŒåŽã«ã»ãã·ã§ã³æ
å ±ãä¿åããå¿
èŠããããã§ãJWTã¯ããŒã¯ã³èªäœã«æ
å ±ãå
¥ã£ãŠããããããµãŒããŒã¯äœãèŠããŠãããªããŠãããã ããè€æ°ãµãŒããŒã«åæ£ãããããŠããã€ã¯ããµãŒãã¹ãAPIèªèšŒã§ãã䜿ããããã ã
ããŒã¯ã³ã«æå¹æéãããã£ãŠèšã£ãŠããã©ãæéãåãããã©ããªãã®ïŒ
æå¹æéïŒexpïŒãåããããŒã¯ã³ã¯æåŠãããããã§ãæ¯åãã°ã€ã³ãçŽãã®ã¯é¢åã ãããããã§ããªãã¬ãã·ã¥ããŒã¯ã³ããšããä»çµã¿ã䜵çšãããã ãã¢ã¯ã»ã¹ããŒã¯ã³ã¯15åã1æéãããïŒãããŸã§ç®å®ã ãïŒã®çãæå¹æéã«ããŠããªãã¬ãã·ã¥ããŒã¯ã³ã§æ°ããã¢ã¯ã»ã¹ããŒã¯ã³ãçºè¡ããŠããããããããããšã§ãäžãäžã¢ã¯ã»ã¹ããŒã¯ã³ãæŒããŠã被害ãå°ããã§ãããã ããªãã¬ãã·ã¥ããŒã¯ã³ã¯é·ã䜿ããã¶ããããæ
éã«ä¿ç®¡ããå¿
èŠããããã
ã»ãã¥ãªãã£ã§æ°ãã€ããããšã£ãŠä»ã«ãããã®ïŒ
æåãªæ»æã«ãalg noneæ»æããšããã®ãããããHeaderã®ã¢ã«ãŽãªãºã ããnoneãã«æžãæããŠã眲åãªãã®ããŒã¯ã³ãåãå
¥ãããããšããæå£ã ãå€ãã©ã€ãã©ãªã ãšãããéã£ãŠããŸãããšããã£ããã ã察çãšããŠã¯ããµãŒããŒåŽã§èš±å¯ããã¢ã«ãŽãªãºã ãèš±å¯ãªã¹ãã§å³æ Œã«æå®ããŠãHeaderã®å
容ããã®ã¿ã«ããªãããšïŒJWTã®ãã¹ããã©ã¯ãã£ã¹ãå®ããRFC 8725ã§ãæ±ããããŠãããïŒãããšã¯ç§å¯éµïŒSecretïŒã®ç®¡çãè¶
éèŠã§ãæŒæŽ©ããããã¹ãŠã®ããŒã¯ã³ãåœé å¯èœã«ãªããããååã«é·ãã©ã³ãã ãªéµã䜿ã£ãŠãç°å¢å€æ°ãå°çšã®ç®¡çãµãŒãã¹ã§ç®¡çãããªããžããªã«ã¯çµ¶å¯Ÿã«ã³ãããããªãããšã ãã
OAuth2ã£ãŠããã®ãšJWTã¯é¢ä¿ããã®ïŒ
OAuth2ã¯ãèªå¯ã®ä»çµã¿ãã§ãJWTã¯ãããŒã¯ã³ã®ãã©ãŒããããã ããOAuth 2.0èªäœã¯ã¢ã¯ã»ã¹ããŒã¯ã³ã®åœ¢åŒã決ããŠããªããŠãJWT圢åŒã«ããå®è£
ãããã°ãæå³ã®ãªãã©ã³ãã ãªæååã«ããŠããµãŒããŒåŽã§ç
§åããå®è£
ããããã ãJWT圢åŒã®ã¢ã¯ã»ã¹ããŒã¯ã³ã®æžãæ¹ã¯RFC 9068ã§æšæºåãããŠãããããããã§ãµã€ã³ã€ã³ãã®ãããªãã°ã€ã³ã§ã¯ãOAuth 2.0ãåå°ã«ããOpenID Connectã䜿ãããŠããŠãæ¬äººç¢ºèªã®çµæãäŒãããIDããŒã¯ã³ããJWTãšæ±ºããããŠãããã ãã€ãŸããOAuth2ããã©ããã£ãŠæš©éãå§è²ãããããæ±ºããŠãJWTãããã®èšŒææžãã©ãããåœ¢ã§æž¡ãããã®éžæè¢ã®1ã€ã«ãªã£ãŠããé¢ä¿ã ãã
JWTã£ãŠäžèœã«èŠãããã©ããã¡ãªãããããã®ããªïŒ
ãã¡ããããããäžçªã®ãã¡ãªããã¯ãçºè¡æžã¿ããŒã¯ã³ãç¡å¹åãã«ãããããšã ããã»ãã·ã§ã³æ¹åŒãªããµãŒããŒåŽã§ã»ãã·ã§ã³ãæ¶ãã°ãã°ã¢ãŠãã§ãããã©ãJWTã¯æå¹æéãæ¥ããŸã§æå¹ãªãŸãŸãªãã ã匷å¶ãã°ã¢ãŠããããå Žåã¯å€±å¹ãªã¹ãïŒãã©ãã¯ãªã¹ãïŒæ¹åŒãããŒã¯ã³ããŒãžã§ãã³ã°ãšãã£ã远å ã®ä»çµã¿ãå¿
èŠã«ãªããçµå±ãå®å
šã«ã¹ããŒãã¬ã¹ã§ã¯ãªããªã£ãŠããŸããã ããçšéã«å¿ããŠã»ãã·ã§ã³æ¹åŒãšJWTã䜿ãåããã®ãããã©ã³ãšã³ãžãã¢ã®å€æåã ãã
è£è¶³
ãã®èšäºã®å³ã¯ãæãããèŠããã眲åä»ãJWTïŒJWSïŒãšHS256ã®äŸã§ããã©ã€ãã©ãªãéžã¶ãšãã¯ãæ€èšŒããã¢ã«ãŽãªãºã ãåºå®ããæå¹æéïŒexpïŒã ãã§ãªããçºè¡è ïŒissïŒãå®å ïŒaudïŒã®ç¢ºèªãå¿ èŠãã仿§ãšã©ã€ãã©ãªã®èª¬æã§ç¢ºèªããŠãã ããã
åèè³æ
ç¢ºèªæ¥ïŒ2026幎9æ21æ¥ã
- RFC 7519ïŒJSON Web Token (JWT) â ãããåºåãã®base64urlæ§é ã眲åïŒJWSïŒãŸãã¯æå·åïŒJWEïŒãexpã®æ±ããalg noneã®Unsecured JWTã
- RFC 8725ïŒJSON Web Token Best Current Practices â ã¢ã«ãŽãªãºã ã®èš±å¯ãªã¹ããnoneã®æ±ããHMACã«äººéãèŠãããã¹ã¯ãŒããçŽæ¥äœ¿ããªãããšãissã»audã®æ€èšŒã
- RFC 9068ïŒJWT Profile for OAuth 2.0 Access Tokens â OAuth 2.0ãã¢ã¯ã»ã¹ããŒã¯ã³ã®åœ¢åŒãå®ããŠããªãããšãJWT圢åŒã®æšæºãããã¡ã€ã«ã
- OpenID Connect Core 1.0 â IDããŒã¯ã³ã¯JWTãã¢ã¯ã»ã¹ããŒã¯ã³ã®åœ¢åŒã¯èŠå®ããªãããšã