JWT (JSON Web ããŒã¯ã³) ã¯ãããžã¿ã«çœ²åã«ãã£ãŠæ€èšŒããã JSON ãªããžã§ã¯ããšããŠããŒã¿ãå®å šã«éä¿¡ããããã«ãã䜿çšããããããã³ã«ã§ããã€ãŸããjwtã§ã¯json圢åŒã®ããŒã¿ã䜿çšãããŸããJWT (JSON Web Token) ã¯éåžžãèªèšŒãèªå¯ãAPI ã®ä¿è·ãã·ã³ã°ã«ãµã€ã³ãªã³ (SSO) æ©èœã®æå¹åã®ããã«å®è£ ãããŸããã³ã³ãã¯ããªæ§é ãæã¡ãæå·æ€èšŒã䜿çšãã JWT ã¯ãåœäºè éã®éä¿¡ãä¿è·ããå ç¢ãªä»çµã¿ã®ã²ãšã€ã§ãã
JSON ãšã¯ïŒ
JSON (JavaScript Object Notation) ãšã¯ãããŒã¿ãä¿åããã³éä¿¡ããããã®ãªãŒãã³ã§èšèªã«äŸåããªãããã¹ã圢åŒã§ããæ©æ¢°ãè§£æã»çæããããã人éãçè§£ãããããããWeb ã¢ããªã±ãŒã·ã§ã³ã API ã«æé©ã§ãã
ããŒã¯ã³ãšã¯ïŒ
ããŒã¯ã³ãšã¯ããŠãŒã¶ãŒã® ID ãšæš©éãå®å šãã€ã³ã³ãã¯ããªåœ¢åŒã§ä¿åããããžã¿ã«èªèšŒæ å ±ã§ãããããã¯çŸä»£ã®èªèšŒã·ã¹ãã ã«ãããŠéåžžã«éèŠã§ãããèš±å¯ããããŠãŒã¶ãŒã®ã¿ãä¿è·ããããªãœãŒã¹ã«ã¢ã¯ã»ã¹ã§ããããã«ããŸãã
JWT ã®ä»çµã¿
JSON Web ããŒã¯ã³ (JWT) ã¯ãããããŒããã€ããŒãã眲åã§æ§æãããŸããããããŒã¯ããã·ã¥ã¢ã«ãŽãªãºã ãšããŒã¯ã³ã¿ã€ããæå®ãããã€ããŒãã«ã¯ãã¯ã¬ãŒã ããšåŒã°ãããŠãŒã¶ãŒæ å ±ãå«ãŸãã眲åã«ãã£ãŠjson webããŒã¯ã³ã®å®å šæ§ãä¿èšŒãããŸãã以äžã§ã¯ JWT ã®ä»çµã¿ã现ããèŠãŠãããŸãã
JWT ã®äœæããã»ã¹ : ãŠãŒã¶ãŒããŠãŒã¶ãŒåãšãã¹ã¯ãŒãã§ãã°ã€ã³ãããšããµãŒããŒã¯ JWT ãçæããé¢é£æ å ±ãšå ±ã«ãšã³ã³ãŒãããŸããæ¬¡ã«ããã®ããŒã¯ã³ã¯æ¹ãããé²ãããã«ç§å¯éµãŸãã¯å ¬é/ç§å¯éµã®ãã¢ã䜿çšããŠçœ²åãããŸãã
ããŒã¯ã³ã®éä¿¡ : JWT ãäœæããããšãHTTP ããããŒãŸãã¯ã¬ã¹ãã³ã¹ããã£ãšããŠã¯ã©ã€ã¢ã³ãã«éä¿¡ãããŸããã¯ã©ã€ã¢ã³ãã¯ãããŒã¯ã³ã HTTP å°çšã® Cookie ãŸãã¯ãã©ãŠã¶ã®ããŒã«ã«ã¹ãã¬ãŒãžã«ä¿åã§ããŸããããŒã¯ã³ã Cookie ãšããŠéä¿¡ããããåŸç¶ãªã¯ãšã¹ãã®èªå¯ããããŒã«å«ãããããããšã«ãã£ãŠãä¿è·ããããªãœãŒã¹ã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸãã
ããŒã¯ã³ã®æ€èšŒ : ãµãŒããŒã JWT ãå«ããªã¯ãšã¹ããåä¿¡ãããã³ã«ãããŒã¯ã³ããã³ãŒãããããšãããªã¯ãšã¹ãã®åŠçãéå§ãããŸããæ¬¡ã«ããã€ããŒããšç§å¯éµã䜿çšããŠçœ²åãåäœæããããŒã¯ã³ã®çæ£æ§ãæ€èšŒããŸãããµãŒããŒã¯ãã¯ã¬ãŒã (çºè¡è ã察象è ãæå¹æéãªã©) ããã§ãã¯ããããŒã¯ã³ãæ¹ãããããŠããããæå¹ã§ããããšã確èªããŸã (ããŒã¯ã³èªèšŒ)ã
ã¹ããŒãã¬ã¹ã®æ§è³ª : ã»ãã·ã§ã³ããŒã¹ã®åŸæ¥ã®èªèšŒãšã¯ç°ãªããJWT ã䜿çšããå ŽåããµãŒããŒã¯ãŠãŒã¶ãŒãæ€èšŒããããã«ããŒã¿ããŒã¹ãç §äŒããå¿ èŠããããŸãããå¿ èŠãªæ å ±ã¯ãã¹ãŠããŒã¯ã³å ã«ä¿æãããç§å¯éµãæã€ãããããµãŒããŒãããŒã¯ã³ãç¬ç«ããŠæ€èšŒã§ããŸãããã®ãã㪠JWT ã®ã¹ããŒãã¬ã¹ãªæ§è³ªã«ãããããã©ãŒãã³ã¹ãšã¹ã±ãŒã©ããªãã£ãåäžããŸãã
ããŒã¯ã³ã®æå¹æé : éåžžããã€ããŒãå ã§ JWT ã®æå¹æéãå²ãåœãŠãããŸããããã«ããã䟵害ãããããŒã¯ã³ã䜿çšã§ããæéæ ãå¶éãããã»ãã¥ãªãã£ãããã«åŒ·åãããŸããæ€èšŒããã»ã¹äžã«ãµãŒããŒã¯ããŒã¯ã³ã®æå¹æéã確èªããæå¹æéãåããŠããå Žåã¯ããŒã¯ã³ãæåŠããã¯ã©ã€ã¢ã³ãã«ããŒã¯ã³ã®æŽæ°ãä¿ããŸãã
JWT ã䜿çšããã¡ãªãã
JWT (json web token) ã¯ãå€§èŠæš¡ãªäŒæ¥å ãçŽã¥ããããŠããªããµãŒãã¹éãªã©ãç°ãªãã·ã¹ãã éã§æ å ±ã亀æããã¢ããªã±ãŒã·ã§ã³ã«ãããŠéåžžã«æçšã§ããJWT ã䜿çšããããšã§ãéä¿¡è ãšåä¿¡è ãçŽæ¥é¢äžããå¿ èŠãªããæ©å¯ããŒã¿ãå®å šã«äº€æã§ããããã«ãªããŸãããã®ãããªåæ£åã¢ãããŒãã«ãããJWT ã¯é«ãæè»æ§ãšã¹ã±ãŒã©ããªãã£ãæäŸããããŸããŸãªãã¯ãããžãŒéã§ã®éä¿¡ãå¯èœã«ããŸãã以äžã¯ JWT ã®äž»ãªã¡ãªããã®äžéšã§ãã
ã»ãã¥ãªãã£ã®åŒ·å : JSON Web ããŒã¯ã³ã®çœ²åã¯ç§å¯éµã䜿çšããŠçæããããããéä¿¡äžã«ããŒã¿ãæ¹ãããããããšã¯ãããŸããã
ã¹ããŒãã¬ã¹èªèšŒ : JWT ã䜿çšãããšãããŒã¯ã³å ã§å¿ èŠãªæ å ±ãã¹ãŠããšã³ã³ãŒãããããµãŒããŒåŽã®ããŒã¿ããŒã¹ãäžèŠã«ãªããŸãããã®çµæããã®ã¿ã€ãã®èªèšŒã§ã¯ããã©ãŒãã³ã¹ãåäžããã¯ã©ã€ã¢ã³ãã¯ã·ã¹ãã ãç°¡åã«ã¹ã±ãŒã«ã§ããããã«ãªããŸãã
ã¯ãã¹ãã¡ã€ã³/CORS ã®ãµããŒã : JWT ã䜿çšãããšãããŸããŸãªãã¡ã€ã³éã§å®å šãªããŒã¿äº€æãå¯èœã«ãªããããCORS (ã¯ãã¹ãªãªãžã³ãªãœãŒã¹å ±æ) ã®å®è£ ã容æã«ãªããŸãããã®ãããªæ©èœã¯ããµãŒãããŒãã£ã®ãµãŒãã¹ãã·ã¹ãã ã«çµ±åãããå Žåã«åœ¹ç«ã¡ãŸãã
ããã©ãŒãã³ã¹ã®åäž : JWT ã䜿çšãããšããŠãŒã¶ãŒãèªèšŒããéã«ãµãŒããŒãããŒã¿ããŒã¹ããã§ãã¯ããå¿ èŠããªããªããå¿çæéãççž®ãããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžããŸãã
æè»æ§ : Web ããŒã¯ã³ã¯ããŸããŸãªãã©ãããã©ãŒã ã§å©çšã§ããè€æ°ã®ããã°ã©ãã³ã°èšèªãšäºææ§ãããããã倿§ãªãã¯ãããžãŒã¹ã¿ãã¯ãç°å¢ãšç°¡åã«çµ±åã§ããŸãã
ããŒã¿ã®å®å šæ§ : ããŒã¯ã³ã®æ¹ããã詊ã¿ããããšçœ²åãç¡å¹ã«ãªããããJWT ã«ãã£ãŠããŒã¿ã®å®å šæ§ãšçæ£æ§ãç¶æã§ããŸãã
èªèšŒã®åæ£å : ãã®ãã¯ãããžãŒã¯ãã»ã³ãã©ã«ããŒã¿ããŒã¹ã«äŸåããã«è€æ°ã®ãµãŒãã¹ã«ãããæ€èšŒãå¯èœã«ããããããã€ã¯ããµãŒãã¹ããµããŒãããã·ã¹ãã ã®ã¬ãžãªãšã³ã¹ãšã¹ã±ãŒã©ããªãã£ãé«ããŸãã
æ¥åžžç㪠JWT ã®ãŠãŒã¹ã±ãŒã¹
ã»ãã¥ãªãã£ãæè»æ§ã®åŒ·åãªã©ã®ã¡ãªããããããã JWT (json web ããŒã¯ã³) ã¯ãããŸããŸãªèªèšŒã·ããªãªã«æé©ã§ããããã«ãããã¯ã©ã€ã¢ã³ãåŽããã³ãµãŒããŒåŽã®ã¢ããªã±ãŒã·ã§ã³ã¯ããªã¯ãšã¹ãããšã«ããŒã¿ããŒã¹ãç §äŒããå¿ èŠãªãããŠãŒã¶ãŒãå®å šã«èå¥ããéèŠãªããŒã¿ã亀æã§ããããã«ãªããŸãã以äžã¯ãJSON Web ããŒã¯ã³ã®æãäžè¬çãªãŠãŒã¹ã±ãŒã¹ã®äžéšã§ãã
ã·ã³ã°ã«ãµã€ã³ãªã³ (SSO) : ãã®ãã¯ãããžãŒã«ãããè€æ°ã®ãã©ãããã©ãŒã ã§èªèšŒãç°¡çŽ åãããŸããäžåºŠèªèšŒããããšããŠãŒã¶ãŒã¯ç¹°ãè¿ããã°ã€ã³ããå¿ èŠãªããããŸããŸãªãµãŒãã¹ã«ã¢ã¯ã»ã¹ã§ãããããå šäœçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããŸãã
API ã®èªèšŒã·ã¹ãã : ã»ãšãã©ã® RESTful API ã¯ããªã¯ãšã¹ããä¿è·ããããã« JWT ã䜿çšããŠããŸãããªã¯ãšã¹ãããããŒã«ããŒã¯ã³ãå«ããããšã§ã¯ã©ã€ã¢ã³ãèªèšŒãå¹ççã«åŠçãããèš±å¯ããããŠãŒã¶ãŒã®ã¿ã API ãšå¯Ÿè©±ã§ããããã«ãªããŸãã
æ å ±ã®äº€æ : JWT ã®èªå·±å®çµæ§ã«ãããããŒã¯ã³ã¯å¿ èŠãªãã¹ãŠã®æ å ±ãäŒéã§ããå®å šãªéä¿¡ãä¿èšŒãããŸãã
èªå¯ : ããŒã¯ã³ã«ãã£ãŠãŠãŒã¶ãŒã®åœ¹å²ãšæš©éããšã³ã³ãŒãããã¢ã¯ã»ã¹ãå¶åŸ¡ã§ããŸããJWT ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã¯ããŒã¯ã³ãæäŸããæ å ±ã䜿çšããŠèªå¯ã®æ±ºå®ãäžãããšãã§ãããªãœãŒã¹ãžã®å¶åŸ¡ãããã¢ã¯ã»ã¹ã確ä¿ã§ããŸãã
ã¢ãã€ã«èªèšŒ : JWT ã«ããã¹ããŒãã¬ã¹èªèšŒã¯ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã«æé©ã§ããç°¡åã«ããŒã¯ã³ãä¿åããŠåŸç¶ã® API ãªã¯ãšã¹ãã«äœ¿çšã§ããã®ã§ãã¹ã ãŒãºã§å¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸãã
ID ã®ãã§ãã¬ãŒã·ã§ã³ : JWT ã«ãããè€æ°ã®ã·ã¹ãã ãšä¿¡é Œã§ãããµãŒãããŒãã£éã§å®å šã« ID ãå ±æããããšãå¯èœã«ãªããããŸããŸãªãã¡ã€ã³ã§è¿ éãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå®çŸã§ããŸãã
JWT ãå®è£ ããããã®ãã¹ããã©ã¯ãã£ã¹
ãŠãŒã¶ãŒã®ããŒã¿ãä¿è·ããèªèšŒããã»ã¹ã®å®å šæ§ãç¶æããäžã§ãJWT ãå®å šã«å®è£ ããããšãäžå¯æ¬ ã§ãã以äžã«æãã JWT ã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ããªã¹ã¯ã軜æžããã³ã³ãã©ã€ã¢ã³ã¹æšæºãæºãããè åšã«å¯Ÿããã¢ããªã±ãŒã·ã§ã³ã®ã¬ãžãªãšã³ã¹ãç¶æã§ããŸãã
HTTPS ã䜿çšãã
HTTPS ã䜿çšã㊠JWT ã®éä¿¡ãä¿è·ããããšã§ãwebããŒã¯ã³ã®æ©å¯æ§ãç¶æããäžéè æ»æãååããä¿è·ã§ããŸãã
é©åãªéµç®¡çãå®è£ ãã
ç§å¯éµãå®å šãªç°å¢ã«ä¿åããç°å¢ããšã«ç°ãªãéµã䜿çšããŸã (éçºç°å¢ãæ¬çªç°å¢ãªã©)ããŸãã䟵害ãçºçããå Žåã®ãªã¹ã¯ãæå°éã«æãããããéµã®ããŒããŒã·ã§ã³æŠç¥ãæ¡çšããŸãã
ãã¹ãŠã®ã¯ã¬ãŒã ãæ€èšŒãã
ããŒã¯ã³å ã®ãã¹ãŠã®ã¯ã¬ãŒã ã培åºçã«æ€èšŒããŸããããã«ã¯ãããŒã¯ã³ã®çæ£æ§ãšæå¹æ§ãä¿èšŒããããã®ãæå¹æéã眲åãçºè¡è ã察象è ã®ç¢ºèªãå«ãŸããŸãã
é©åãªããŒã¯ã³ã®æå¹æéãèšå®ãã
æå¹æéã¯ã»ãã¥ãªãã£ã«ãšã£ãŠéèŠã§ãããæå¹æéãèšå®ããéã«ã¯ã»ãã¥ãªãã£ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®ãã©ã³ã¹ãåãå¿ èŠããããŸããæå¹æéãçããšã»ãã¥ãªãã£ã¯åäžããŸãããé »ç¹ã«åèªèšŒãå¿ èŠã«ãªãããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®è³ªãäžãããŸãã
æ©å¯ããŒã¿ããã€ããŒãã«ä¿åããã®ãé¿ãã
JWT ã®ãã€ããŒãã«æ©å¯æ å ±ãä¿åããªãã§ãã ãããããŒã¯ã³ã®çœ²åã«ããå®å šæ§ãä¿èšŒãããŸãããååãããå Žåãã³ã³ãã³ããç°¡åã«èªã¿åãããŠããŸãããã§ãã
ããŒã¯ã³ã®å€±å¹ã¡ã«ããºã ãå®è£ ãã
ã·ã¹ãã 䟵害ãçºçããå ŽåããŠãŒã¶ãŒããã°ã¢ãŠãããéãªã©ãå¿ èŠã«å¿ããŠããŒã¯ã³ãç¡å¹åããæŠç¥ãäœæããŸãããã®ãããªã¢ãããŒãã®ã²ãšã€ã«ãåãæ¶ãããããŒã¯ã³ã®ãã©ãã¯ãªã¹ããäœæããŠç®¡çããããšãæããããŸãã
匷åãªã¢ã«ãŽãªãºã ã䜿çšãã
åžžã«åŒ·åãªæå·åã¢ã«ãŽãªãºã ã䜿çšããŠããŒã¯ã³ã«çœ²åããŸãã匷åãªã¢ã«ãŽãªãºã ã¯ãç¹ã«ã»ãã¥ãªãã£ãéèŠãªåæ£ã·ã¹ãã ã«ãããŠãããåªããä¿è·ãæäŸããŸãã
Fastly Compute ã§ JWT ã®å®è£ ãæé©å
JSON Web ããŒã¯ã³ã¯ãç¹ã«èªèšŒããã³èªå¯ã®ããã»ã¹ã«ãããŠãWeb ã»ãã¥ãªãã£ã確ä¿ããããã«éèŠã§ããJWT ã«ã¯å€§ããªã¡ãªããããããŸãããå®å šã«å®è¡ããã«ã¯å ç¢ãªã€ã³ãã©ã¹ãã©ã¯ãã£ãšæ éãªèšç»ãå¿ èŠã§ãã
Fastly ã® Compute ã¯ãJWT èªèšŒã䜿çšããŠã»ãã¥ã¢ãª API ãå®è£ ããããã®çæ³çãªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã軜éã®ãµã³ãããã¯ã¹æ©èœã«ãããåãã©ãããã©ãŒã ã§ã¯ä»»æã®èšèªã䜿çšããŠèªèšŒããžãã¯ãèšè¿°ã§ããŸããFastly Compute ã䜿çšã㊠JWT ããã³ãŒãããæ¹æ³ã«ã€ããŠã¯ããã¡ãã®ãã¥ãŒããªã¢ã«ãã芧ãã ããã
ã¢ããªã±ãŒã·ã§ã³ã®èªèšŒãšã»ãã¥ãªãã£ã®æé©åã«åããæ°ããªã¹ãããã«é²ã¿ãŸããããæ©é Fastly Compute ãç¡æã§è©ŠããŠããšããžã³ã³ãã¥ãŒãã£ã³ã°ã®ãã¯ãŒãã¢ããªã±ãŒã·ã§ã³ã§å®æããŠãã ããã