ãä»çµã¿è§£èª¬ãJWTã¯ã©ããã£ãŠãŠãŒã¶ãŒèªèšŒãå®çŸããŠããã®ã â ããŒã¯ã³ã®äžèº«ãå³è§£
ãã°ã€ã³ããããšã«ãããŒã¯ã³ãã£ãŠãããããããã©ãããã£ãŠäœãªã®ïŒ
ããããŸãã«JWTïŒJSON Web TokenïŒã ãããã°ã€ã³ã«æåãããšããµãŒããŒãããã®äººã¯æ¬äººç¢ºèªæžã¿ã§ãããšããæ å ±ãã®ã¥ããšè©°ã蟌ãã æååãçºè¡ãããã ãæ¬¡å以éã®ãªã¯ãšã¹ãã§ã¯ããã®ããŒã¯ã³ãæç€ºããã ãã§ããããã£ããã°ã€ã³ãã人ã ãããšåããä»çµã¿ã ãã
æååã®äžã«æ å ±ãå ¥ã£ãŠãã®ïŒèŠãç®ã¯ã©ã³ãã ãªæåã®çŸ åã«èŠãããã©âŠ
å®ã¯JWTã¯3ã€ã®ããŒãããããïŒ.ïŒã§åºåãããæ§é ã«ãªã£ãŠãããã ããHeader.Payload.Signatureãã®3ã€ã ããHeaderã«ã¯ã¢ã«ãŽãªãºã ãšããŒã¯ã³ã®ã¿ã€ããPayloadã«ã¯ãŠãŒã¶ãŒæ å ±ãæå¹æéãSignatureã«ã¯æ¹ããæ€ç¥çšã®çœ²åãå ¥ã£ãŠãããã
ãã£ããŠãŒã¶ãŒæ å ±ããã®ãŸãŸå ¥ã£ãŠãã®ïŒããã£ãŠå±ãªããªãã®ïŒ
ãã質åã ããHeaderãšPayloadã¯Base64ãšã³ã³ãŒããããŠããã ãã§ãæå·åã¯ãããŠããªããã ãã€ãŸããã³ãŒãããã°äžèº«ã¯èª°ã§ãèªãããã ãããã¹ã¯ãŒããã¯ã¬ãžããã«ãŒãçªå·ã®ãããªæ©å¯æ å ±ã¯çµ¶å¯Ÿã«å ¥ãã¡ããã¡ã ããå ¥ããã®ã¯ãŠãŒã¶ãŒIDãæš©éã¬ãã«ãªã©ãèªãŸããŠãèŽåœçã§ãªãæ å ±ã«éããã ã
ããã眲åïŒSignatureïŒã®ã»ãã¯äœãããŠãã®ïŒ
眲åã¯ããã®ããŒã¯ã³ã¯æ¹ãããããŠããŸããããä¿èšŒããéšåã ãããµãŒããŒã ããç¥ã£ãŠããç§å¯éµïŒSecretïŒã䜿ã£ãŠãHeaderãšPayloadãããã·ã¥åããŠäœããã ããã誰ããPayloadã®äžèº«ãæžãæãããã眲åãšäžèŽããªããªããããããã¯åœç©ã ããšãããã¬ãä»çµã¿ã ãã
ãªãã»ã©ïŒã§ããæãªããã®ã»ãã·ã§ã³IDãšã¯äœãéãã®ïŒ
äžçªå€§ããªéãã¯ãã¹ããŒãã¬ã¹ããã©ããã ããã»ãã·ã§ã³æ¹åŒã ãšãµãŒããŒåŽã«ã»ãã·ã§ã³æ å ±ãä¿åããå¿ èŠããããã§ãJWTã¯ããŒã¯ã³èªäœã«æ å ±ãå ¥ã£ãŠããããããµãŒããŒã¯äœãèŠããŠãããªããŠãããã ããè€æ°ãµãŒããŒã«åæ£ãããããŠããã€ã¯ããµãŒãã¹ãAPIèªèšŒã§ãã䜿ããããã ã
ããŒã¯ã³ã«æå¹æéãããã£ãŠèšã£ãŠããã©ãæéãåãããã©ããªãã®ïŒ
æå¹æéïŒexpïŒãåããããŒã¯ã³ã¯æåŠãããããã§ãæ¯åãã°ã€ã³ãçŽãã®ã¯é¢åã ãããããã§ããªãã¬ãã·ã¥ããŒã¯ã³ããšããä»çµã¿ã䜵çšãããã ãã¢ã¯ã»ã¹ããŒã¯ã³ã¯15åã1æéãããã®çãæå¹æéã«ããŠããªãã¬ãã·ã¥ããŒã¯ã³ã§æ°ããã¢ã¯ã»ã¹ããŒã¯ã³ãçºè¡ããŠããããããããããšã§ãäžãäžããŒã¯ã³ãæŒããŠã被害ãæå°éã«ã§ãããã
ã»ãã¥ãªãã£ã§æ°ãã€ããããšã£ãŠä»ã«ãããã®ïŒ
æåãªæ»æã«ãalg noneæ»æããšããã®ãããããHeaderã®ã¢ã«ãŽãªãºã ããnoneãã«æžãæããŠã眲åãªãã®ããŒã¯ã³ãåãå ¥ãããããšããæå£ã ãå€ãã©ã€ãã©ãªã ãšãããéã£ãŠããŸãããšããã£ããã ã察çãšããŠã¯ããµãŒããŒåŽã§èš±å¯ããã¢ã«ãŽãªãºã ããã¯ã€ããªã¹ãã§å³æ Œã«æå®ããããšãããšã¯ç§å¯éµïŒSecretïŒã®ç®¡çãè¶ éèŠã§ãæŒæŽ©ããããã¹ãŠã®ããŒã¯ã³ãåœé å¯èœã«ãªããããç°å¢å€æ°ã§ç®¡çããŠãªããžããªã«ã¯çµ¶å¯Ÿã«ã³ãããããªãããšã ãã
OAuth2ã£ãŠããã®ãšJWTã¯é¢ä¿ããã®ïŒ
OAuth2ã¯ãèªå¯ã®ä»çµã¿ãã§ãJWTã¯ãããŒã¯ã³ã®ãã©ãŒããããã ããOAuth2ã®ã¢ã¯ã»ã¹ããŒã¯ã³ãšããŠJWTã䜿ãããããšãå€ããã ãGoogleãGitHubã®ãã°ã€ã³ã§ãããã§ãµã€ã³ã€ã³ãã£ãŠãããšããè£åŽã§ã¯OAuth2ã®ãããŒãèµ°ã£ãŠãæçµçã«JWT圢åŒã®ããŒã¯ã³ãçºè¡ãããããšãå€ãããã€ãŸããOAuth2ããã©ããã£ãŠæš©éãå§è²ãããããæ±ºããŠãJWTãããã®èšŒææžãã©ãããåœ¢ã§æž¡ããããæ±ºããŠããé¢ä¿ã ãã
JWTã£ãŠäžèœã«èŠãããã©ããã¡ãªãããããã®ããªïŒ
ãã¡ããããããäžçªã®ãã¡ãªããã¯ãçºè¡æžã¿ããŒã¯ã³ãç¡å¹åãã«ãããããšã ããã»ãã·ã§ã³æ¹åŒãªããµãŒããŒåŽã§ã»ãã·ã§ã³ãæ¶ãã°ãã°ã¢ãŠãã§ãããã©ãJWTã¯æå¹æéãæ¥ããŸã§æå¹ãªãŸãŸãªãã ã匷å¶ãã°ã¢ãŠããããå Žåã¯ãã©ãã¯ãªã¹ãæ¹åŒãããŒã¯ã³ããŒãžã§ãã³ã°ãšãã£ã远å ã®ä»çµã¿ãå¿ èŠã«ãªããçµå±ãå®å šã«ã¹ããŒãã¬ã¹ã§ã¯ãªããªã£ãŠããŸããã ããçšéã«å¿ããŠã»ãã·ã§ã³æ¹åŒãšJWTã䜿ãåããã®ãããã©ã³ãšã³ãžãã¢ã®å€æåã ãã