å ç¢ãªããŒã¯ã³æ€èšŒã§APIãä¿è·ããŸããããæ§ã ãªããŒã¯ã³ã¿ã€ããæ€èšŒæ¹æ³ããããŠå®å šã§ä¿¡é Œæ§ã®é«ãAPIãæ§ç¯ããããã®ãã¹ããã©ã¯ãã£ã¹ã解説ããŸãã
APIã»ãã¥ãªãã£ïŒããŒã¯ã³æ€èšŒã®å æ¬çã¬ã€ã
仿¥ã®çžäºæ¥ç¶ãããããžã¿ã«ç°å¢ã«ãããŠãAPIïŒã¢ããªã±ãŒã·ã§ã³ããã°ã©ãã³ã°ã€ã³ã¿ãŒãã§ãŒã¹ïŒã¯çŸä»£ã®ãœãããŠã§ã¢ã·ã¹ãã ã®æ ¹å¹¹ããªããŠããŸããAPIã¯ã¢ããªã±ãŒã·ã§ã³ããµãŒãã¹ãããã€ã¹éã®ã·ãŒã ã¬ã¹ãªéä¿¡ãšããŒã¿äº€æãå¯èœã«ããŸãããããããã®çžäºæ¥ç¶æ§ã¯é倧ãªã»ãã¥ãªãã£ãªã¹ã¯ããããããŸããAPIã»ãã¥ãªãã£ã®æãéèŠãªåŽé¢ã®äžã€ãããŒã¯ã³æ€èšŒã§ãããã®ã¬ã€ãã§ã¯ãããŒã¯ã³æ€èšŒã®å æ¬çãªæŠèŠãæäŸããæ§ã ãªããŒã¯ã³ã¿ã€ããæ€èšŒæ¹æ³ããããŠAPIãä¿è·ããããã®ãã¹ããã©ã¯ãã£ã¹ãæ¢ããŸãã
ããŒã¯ã³æ€èšŒãšã¯ïŒ
ããŒã¯ã³æ€èšŒãšã¯ãAPIãšã³ããã€ã³ãã«æç€ºãããããŒã¯ã³ã®çæ£æ§ãšå®å šæ§ãæ€èšŒããããã»ã¹ã§ããããŒã¯ã³ãšã¯ãç¹å®ã®ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãç¹å®ã®ã¢ã¯ã·ã§ã³ã®å®è¡ããŠãŒã¶ãŒãŸãã¯ã¢ããªã±ãŒã·ã§ã³ã«èš±å¯ããããšã衚ãããŒã¿ã®äžéšã§ããããŒã¯ã³æ€èšŒã¯ãããŒã¯ã³ãæå¹ã§ãããæ¹ãããããŠããããæå¹æéãåããŠããªãããšãä¿èšŒããŸããããã¯ãäžæ£ã¢ã¯ã»ã¹ãé²ããæ©å¯ããŒã¿ãä¿è·ããããã®éèŠãªã¹ãããã§ãã
ç©ççãªéµãæ³åããŠã¿ãŠãã ãããå®¶ã«å ¥ãããšãããšããéµãéµç©Žã«å·®ã蟌ã¿ãŸããéµç©ŽïŒAPIãšã³ããã€ã³ãïŒã¯éµïŒããŒã¯ã³ïŒãæ€èšŒããããããã®ãã¢ã®æ£ããéµã§ããããšã確èªããŸããéµãæå¹ã§ããã°ãã¢ã¯ã»ã¹ãèš±å¯ãããŸãã
ãªãããŒã¯ã³æ€èšŒã¯éèŠãªã®ãïŒ
é©åãªããŒã¯ã³æ€èšŒããªããã°ãAPIã¯ä»¥äžã®ãããªæ§ã ãªæ»æã«å¯ŸããŠè匱ã«ãªããŸãã
- äžæ£ã¢ã¯ã»ã¹ïŒ æ»æè ã¯é©åãªèªå¯ãªãã«æ©å¯ããŒã¿ããªãœãŒã¹ã«ã¢ã¯ã»ã¹ã§ããŸãã
- ããŒã¿æŒæŽ©ïŒ 䟵害ãããããŒã¯ã³ã¯ããŒã¿ã®çé£ãæ¹ããã«äœ¿çšãããé倧ãªééçã»è©å€äžã®æå®³ã«ã€ãªããå¯èœæ§ããããŸãã
- ã¢ã«ãŠã³ãä¹ã£åãïŒ æ»æè ã¯çãŸããããŒã¯ã³ã䜿çšããŠæ£åœãªãŠãŒã¶ãŒã«ãªãããŸãããã®ã¢ã«ãŠã³ããå¶åŸ¡ããããšãã§ããŸãã
- ãµãŒãã¹æåŠïŒDoSïŒæ»æïŒ æ»æè ã¯ç¡å¹ãªããŒã¯ã³ã§APIãæº¢ããããã·ã¹ãã ãå§åããæ£åœãªãŠãŒã¶ãŒãå©çšã§ããªããããããšãã§ããŸãã
äžè¬çãªããŒã¯ã³ã®çš®é¡
APIã»ãã¥ãªãã£ã§ã¯ãããã€ãã®çš®é¡ã®ããŒã¯ã³ãäžè¬çã«äœ¿çšãããŸãããããã®ç¹æ§ãçè§£ããããšã¯ã广çãªæ€èšŒæŠç¥ãå®è£ ããããã«äžå¯æ¬ ã§ãã
1. JSON Web Token (JWT)
JWTã¯ãã¢ã¯ã»ã¹ããŒã¯ã³ãäœæããããã®åºã䜿çšãããŠããæšæºã§ããèªå·±å®çµåã§ããããã®çæ£æ§ãšå®å šæ§ãæ€èšŒããããã«å¿ èŠãªãã¹ãŠã®æ å ±ãå«ãŸããŠããŸããJWTã¯3ã€ã®éšåã§æ§æãããŠããŸãã
- ããããŒïŒ ããŒã¯ã³ã®çš®é¡ãšäœ¿çšããã眲åã¢ã«ãŽãªãºã ã«é¢ããæ å ±ãå«ãŸããŸãã
- ãã€ããŒãïŒ ãŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ã«é¢ãã衚æïŒã¯ã¬ãŒã ïŒãå«ãŸããŸããäŸãã°ãã¢ã€ãã³ãã£ãã£ãããŒã«ãæš©éãªã©ã§ãã
- 眲åïŒ ããŒã¯ã³ã®çæ£æ§ãšå®å šæ§ãæ€èšŒããããã«äœ¿çšãããæå·çœ²åã§ãã
äŸïŒã¢ãã€ã«ãã³ãã³ã°ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããJWTã«ã¯ããŠãŒã¶ãŒã®å£åº§çªå·ãååŒé床é¡ãèªèšŒã¬ãã«ã«é¢ããã¯ã¬ãŒã ãå«ãŸããŠããå ŽåããããŸãã
2. OAuth 2.0 ã¢ã¯ã»ã¹ããŒã¯ã³
OAuth 2.0ã¯ããµãŒãããŒãã£ã¢ããªã±ãŒã·ã§ã³ããŠãŒã¶ãŒã«ä»£ãã£ãŠãªãœãŒã¹ã«ã¢ã¯ã»ã¹ã§ããããã«ããèªå¯ãã¬ãŒã ã¯ãŒã¯ã§ããã¢ã¯ã»ã¹ããŒã¯ã³ã¯ãç¹å®ã®ãªãœãŒã¹ãžã®éå®çãªã¢ã¯ã»ã¹ãèš±å¯ããããã«äœ¿çšãããŸããJWTãšã¯ç°ãªããã¢ã¯ã»ã¹ããŒã¯ã³ã¯éåžžããŠãŒã¶ãŒã«é¢ããæ å ±ãå«ãŸãã代ããã«èªå¯ãµãŒããŒã«ä¿åãããŠããèªå¯æ å ±ãžã®åç §ãšããŠæ©èœããŸãã
äŸïŒãœãŒã·ã£ã«ã¡ãã£ã¢ã¢ããªã«é£çµ¡å ãžã®ã¢ã¯ã»ã¹ãèš±å¯ãããšããã®ã¢ããªã¯é£çµ¡å ãªã¹ããååŸããæš©éãä»äžããOAuth 2.0ã¢ã¯ã»ã¹ããŒã¯ã³ãåãåããŸãã
3. APIããŒ
APIããŒã¯ãAPIãªã¯ãšã¹ããè¡ãã¢ããªã±ãŒã·ã§ã³ããŠãŒã¶ãŒãèå¥ããããã®åçŽãªè±æ°åã®æååã§ããå®è£ ã¯ç°¡åã§ãããAPIããŒã¯ã¯ã©ã€ã¢ã³ããµã€ãã®ã³ãŒãã«åã蟌ãŸãããããã¬ãŒã³ããã¹ãã§ä¿åããããããããšãå€ããããJWTãOAuth 2.0ã¢ã¯ã»ã¹ããŒã¯ã³ãããå®å šæ§ãäœãã§ããæ©å¯æ å ±ãšããŠæ±ãã宿çã«ããŒããŒã·ã§ã³ããå¿ èŠããããŸãã
äŸïŒå€ãã®å€©æ°äºå ±APIã¯ã䜿çšç¶æ³ã远跡ããã¬ãŒãå¶éã匷å¶ããããã«APIããŒã䜿çšããŠããŸãã
4. ã»ãã·ã§ã³ããŒã¯ã³
ã»ãã·ã§ã³ããŒã¯ã³ã¯ããµãŒããŒãµã€ãã®Webã¢ããªã±ãŒã·ã§ã³ã§ãŠãŒã¶ãŒã»ãã·ã§ã³ãç¶æããããã«äœ¿çšãããŸããéåžžãã¯ã©ã€ã¢ã³ãã®ãã©ãŠã¶ã®Cookieã«ä¿åãããåŸç¶ã®ãªã¯ãšã¹ãã§ãŠãŒã¶ãŒãèå¥ããããã«äœ¿çšãããŸããçŽç²ãªAPIã®ã·ããªãªã§ã¯ããŸãäžè¬çã§ã¯ãããŸããããã»ãã·ã§ã³ã䜿çšããWebã¢ããªã±ãŒã·ã§ã³ããã¢ã¯ã»ã¹ãããAPIã§äœ¿çšãããããšããããŸãã
ããŒã¯ã³ã®æ€èšŒæ¹æ³
å ·äœçãªæ€èšŒæ¹æ³ã¯ãããŒã¯ã³ã®çš®é¡ãšAPIã®ã»ãã¥ãªãã£èŠä»¶ã«ãã£ãŠç°ãªããŸãã以äžã«äžè¬çãªæ€èšŒæ¹æ³ãããã€ã玹ä»ããŸãã
1. JWTã®æ€èšŒ
JWTã®æ€èšŒã«ã¯ãããã€ãã®ã¹ããããå«ãŸããŸãã
- çœ²åæ€èšŒïŒ çœ²åæ©é¢ã®å ¬ééµã䜿çšããŠçœ²åãæå¹ã§ããããšã確èªããŸããããã«ãããããŒã¯ã³ãæ¹ãããããŠããªãããšãä¿èšŒãããŸãã
- çºè¡è ïŒIssuerïŒæ€èšŒïŒ ããŒã¯ã³ã®çºè¡è ãä¿¡é Œã§ããããšã確èªããŸããããã«ãããããŒã¯ã³ãæ£åœãªçºè¡å ããçºè¡ãããããšãä¿èšŒãããŸãã
- 察象è ïŒAudienceïŒæ€èšŒïŒ ããŒã¯ã³ãçŸåšã®APIã察象ãšããŠããããšã確èªããŸããããã«ãããããŒã¯ã³ãä»ã®APIã§äœ¿çšãããã®ãé²ããŸãã
- æå¹æéæ€èšŒïŒ ããŒã¯ã³ã®æå¹æéãåããŠããªãããšã確èªããŸããããã«ãããæå¹æéãéããããŒã¯ã³ã䜿çšãããã®ãé²ããŸãã
- ã¯ã¬ãŒã æ€èšŒïŒ ããŒã¯ã³å ã®ã¯ã¬ãŒã ãæå¹ã§ããããšã確èªããŸããããã«ããããŠãŒã¶ãŒãŸãã¯ã¢ããªã±ãŒã·ã§ã³ãèŠæ±ããããªãœãŒã¹ã«ã¢ã¯ã»ã¹ããããã«å¿ èŠãªæš©éãæã£ãŠããããšãä¿èšŒãããŸããäŸãšããŠã¯ããŠãŒã¶ãŒã®ããŒã«ãã¹ã³ãŒãããŸãã¯ç¹å®ã®ãªãœãŒã¹IDã®æ€èšŒãå«ãŸããŸãã
äŸïŒéèAPIã¯ãJWTãæ€èšŒããŠãŠãŒã¶ãŒã 'transaction:execute' ã¹ã³ãŒããæã£ãŠããããšãããã³ããŒã¯ã³ãéè¡ã®ã¢ã€ãã³ãã£ãã£ãããã€ããŒã«ãã£ãŠçºè¡ãããããšã確èªããå ŽåããããŸãã
2. OAuth 2.0 ã¢ã¯ã»ã¹ããŒã¯ã³ã®æ€èšŒ
OAuth 2.0 ã¢ã¯ã»ã¹ããŒã¯ã³ã®æ€èšŒã«ã¯ãéåžžãèªå¯ãµãŒããŒã«åãåãããŠããŒã¯ã³ã®æå¹æ§ã確èªããäœæ¥ãå«ãŸããŸããããã¯ã以äžã®ããããã®æ¹æ³ã§è¡ãããšãã§ããŸãã
- ããŒã¯ã³ã€ã³ããã¹ãã¯ã·ã§ã³ïŒ APIãµãŒããŒãã¢ã¯ã»ã¹ããŒã¯ã³ãèªå¯ãµãŒããŒã«éä¿¡ããèªå¯ãµãŒããŒãããŒã¯ã³ã®æå¹æ§ãã¹ã³ãŒããé¢é£ãŠãŒã¶ãŒãªã©ã®æ å ±ãè¿ããŸãã
- ããŒã¯ã³å€±å¹ïŒ ããŒã¯ã³ã䟵害ãããå Žåãèªå¯ãµãŒããŒã§å€±å¹ããã䜿çšã§ããªãããããšãã§ããŸãã
- å ±æã·ãŒã¯ã¬ããã®äœ¿çšïŒ APIãšèªå¯ãµãŒããŒãã·ãŒã¯ã¬ãããå ±æããŠããå ŽåïŒæ¬çªç°å¢ã§ã¯éæšå¥šïŒãAPIã¯ããŒã¯ã³ã埩å·åããŠããŒã«ã«ã§æ€èšŒã§ããŸãããã®ã¢ãããŒãã¯ãAPIãå ±æã·ãŒã¯ã¬ããã«ã¢ã¯ã»ã¹ããå¿ èŠããããããããŒã¯ã³ã€ã³ããã¹ãã¯ã·ã§ã³ãããå®å šæ§ãäœãã§ãã
äŸïŒeã³ããŒã¹APIã¯ããŠãŒã¶ãŒã泚æãè¡ãåã«ãã¢ã¯ã»ã¹ããŒã¯ã³ã 'order:create' ã¹ã³ãŒããæã£ãŠããããšã確èªããããã«ããŒã¯ã³ã€ã³ããã¹ãã¯ã·ã§ã³ã䜿çšããå ŽåããããŸãã
3. APIããŒã®æ€èšŒ
APIããŒã®æ€èšŒã«ã¯ãéåžžãAPIããŒãããŒã¿ããŒã¹ãèšå®ãã¡ã€ã«ã«ä¿åãããŠããæå¹ãªããŒã®ãªã¹ããšç §åããäœæ¥ãå«ãŸããŸããä¹±çšãé²ãããã«ãã¬ãŒãå¶éããã®ä»ã®ã»ãã¥ãªãã£å¯Ÿçãå®è£ ããããšãäžå¯æ¬ ã§ããAPIããŒã¯ç§å¯æ å ±ãšããŠæ±ãã宿çã«ããŒããŒã·ã§ã³ããå¿ èŠããããŸãã
äŸïŒãããã³ã°APIã¯ãAPIããŒãæ€èšŒããŠããŠãŒã¶ãŒãå°å³ããŒã¿ã«ã¢ã¯ã»ã¹ããæš©éãããããšãããã³ã¬ãŒãå¶éã匷å¶ããããšã確èªããå ŽåããããŸãã
4. ã»ãã·ã§ã³ããŒã¯ã³ã®æ€èšŒ
ã»ãã·ã§ã³ããŒã¯ã³ã®æ€èšŒã«ã¯ãéåžžãã»ãã·ã§ã³ããŒã¯ã³ãã»ãã·ã§ã³ã¹ãã¢ïŒäŸïŒããŒã¿ããŒã¹ãã€ã³ã¡ã¢ãªãã£ãã·ã¥ïŒãšç §åããã»ãã·ã§ã³ããŸã ã¢ã¯ãã£ãã§ããããŠãŒã¶ãŒãèªèšŒãããŠããããšã確èªããäœæ¥ãå«ãŸããŸããããã¯å€ãã®å ŽåãWebã¢ããªã±ãŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠåŠçãããŸãã
ããŒã¯ã³æ€èšŒã®ãã¹ããã©ã¯ãã£ã¹
å ç¢ãªããŒã¯ã³æ€èšŒãå®è£ ããããšã¯ãAPIãä¿è·ããããã«äžå¯æ¬ ã§ãã以äžã«ãåŸãã¹ããã¹ããã©ã¯ãã£ã¹ãããã€ã玹ä»ããŸãã
1. 匷åãªæå·åã䜿çšãã
ããŒã¯ã³ã®çœ²åãšæå·åã«ã¯åŒ·åãªæå·ã¢ã«ãŽãªãºã ã䜿çšããŸããJWTã«ã¯ãRS256ãES256ãªã©ã®ã¢ã«ãŽãªãºã ã䜿çšããŠãã ãããæ»æã«å¯ŸããŠè匱ãªHS256ã®ãããªåŒ±ãããŸãã¯éæšå¥šã®ã¢ã«ãŽãªãºã ã®äœ¿çšã¯é¿ããŠãã ããã
2. ããŒã¯ã³ã®æå¹æéãå®è£ ãã
ããŒã¯ã³ã«åççãªæå¹æéãèšå®ããŸããããã«ãããæ»æè ã䟵害ãããããŒã¯ã³ã䜿çšããæ©äŒã®çªãå¶éããŸããçåœã®ããŒã¯ã³ã¯ããå®å šã§ãããããé »ç¹ãªããŒã¯ã³æŽæ°ãå¿ èŠã«ãªãå ŽåããããŸãã
3. ãªãã¬ãã·ã¥ããŒã¯ã³ã䜿çšãã
ãŠãŒã¶ãŒã«åèªèšŒãèŠæ±ããããšãªãæ°ããã¢ã¯ã»ã¹ããŒã¯ã³ãååŸããããã«ããªãã¬ãã·ã¥ããŒã¯ã³ã䜿çšããŸãããªãã¬ãã·ã¥ããŒã¯ã³ã¯ã¢ã¯ã»ã¹ããŒã¯ã³ãããé·ãæå¹æéãæã¡ãå®å šã«ä¿ç®¡ããå¿ èŠããããŸãããªãã¬ãã·ã¥ããŒã¯ã³çé£ã®ãªã¹ã¯ã軜æžããããã«ãé©åãªãªãã¬ãã·ã¥ããŒã¯ã³ã®ããŒããŒã·ã§ã³ãå®è£ ããŸãã
4. ããŒã¯ã³ãå®å šã«ä¿ç®¡ãã
ã¯ã©ã€ã¢ã³ãåŽãšãµãŒããŒåŽã®äž¡æ¹ã§ããŒã¯ã³ãå®å šã«ä¿ç®¡ããŸããã¯ã©ã€ã¢ã³ãåŽã§ã¯ãã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒæ»æã«å¯ŸããŠè匱ãªããŒã«ã«ã¹ãã¬ãŒãžãCookieã«ããŒã¯ã³ãä¿åããããšã¯é¿ããŠãã ããããã©ãŠã¶ã®IndexedDBããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ããŒãã§ãŒã³ãªã©ã®å®å šãªã¹ãã¬ãŒãžã¡ã«ããºã ã®äœ¿çšãæ€èšããŠãã ããããµãŒããŒåŽã§ã¯ãæå·åãšã¢ã¯ã»ã¹å¶åŸ¡ææ®µã䜿çšããŠä¿åäžã®ããŒã¯ã³ãä¿è·ããŸãã
5. ãã¹ãŠã®ã¯ã¬ãŒã ãæ€èšŒãã
çºè¡è ã察象è ãæå¹æéãããã³ã«ã¹ã¿ã ã¯ã¬ãŒã ãå«ããããŒã¯ã³å ã®ãã¹ãŠã®ã¯ã¬ãŒã ãæ€èšŒããŸããããã«ãããããŒã¯ã³ãæå¹ã§ããããŠãŒã¶ãŒãŸãã¯ã¢ããªã±ãŒã·ã§ã³ãèŠæ±ããããªãœãŒã¹ã«ã¢ã¯ã»ã¹ããããã«å¿ èŠãªæš©éãæã£ãŠããããšãä¿èšŒãããŸãã
6. ã¬ãŒãå¶éãå®è£ ãã
ä¹±çšããµãŒãã¹æåŠæ»æãé²ãããã«ã¬ãŒãå¶éãå®è£ ããŸããããã«ããããŠãŒã¶ãŒãŸãã¯ã¢ããªã±ãŒã·ã§ã³ãç¹å®ã®æéå ã«è¡ãããšãã§ãããªã¯ãšã¹ãã®æ°ãå¶éãããŸãã
7. ããŒã¯ã³ã®äœ¿çšç¶æ³ãç£èŠããã³ãã°ã«èšé²ãã
çãããã¢ã¯ãã£ããã£ãæ€åºããããã«ãããŒã¯ã³ã®äœ¿çšç¶æ³ãç£èŠãããã°ã«èšé²ããŸããããã«ãããæ»æããªã¢ã«ã¿ã€ã ã§ç¹å®ãã察å¿ããã®ã«åœ¹ç«ã¡ãŸããããŒã¯ã³ã®çºè¡ãæ€èšŒã倱å¹ãªã©ã®éèŠãªã€ãã³ãããã°ã«èšé²ããŸããéåžžãšã¯ç°ãªãããŒã¯ã³äœ¿çšãã¿ãŒã³ã«å¯ŸããŠã¢ã©ãŒããèšå®ããŸãã
8. 宿çã«ããŒãããŒããŒã·ã§ã³ãã
ããŒæŒæŽ©ã®ãªã¹ã¯ã軜æžããããã«ãæå·ããŒã宿çã«ããŒããŒã·ã§ã³ããŸããããã«ã¯ãæ°ããããŒãçæããé©åãªé¢ä¿è ã«é åžããããšãå«ãŸããŸããããŠã³ã¿ã€ã ãæå°éã«æãã人çºçãã¹ã®ãªã¹ã¯ãæžããããã«ãããŒã®ããŒããŒã·ã§ã³ããã»ã¹ãèªååããŸãã
9. HTTPSã䜿çšãã
ã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®éä¿¡ãæå·åããããã«ãåžžã«HTTPSã䜿çšããŸããããã«ãããããŒã¯ã³ãæ»æè ã«ãã£ãŠååãããã®ãé²ããŸãã
10. å ¥åããµãã¿ã€ãºãã
ã€ã³ãžã§ã¯ã·ã§ã³æ»æãé²ãããã«ããã¹ãŠã®å ¥åããµãã¿ã€ãºããŸããããã«ã¯ãã¯ã©ã€ã¢ã³ãããåä¿¡ããããŒã¯ã³ããã®ä»ã®ããŒã¿ã®åœ¢åŒãšå å®¹ã®æ€èšŒãå«ãŸããŸãã
11. æå°æš©éã®ååã«åŸã
ãŠãŒã¶ãŒãšã¢ããªã±ãŒã·ã§ã³ã«ã¯å¿ èŠãªæš©éã®ã¿ãä»äžããŸããããã«ããã䟵害ãããããŒã¯ã³ã«ãã£ãŠåŒãèµ·ããããå¯èœæ§ã®ããæå®³ãå¶éããŸããç¹å®ã®ãªãœãŒã¹ãæäœãžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ããããã«ã詳现ãªã¹ã³ãŒããããŒã«ã䜿çšããŸãã
12. ææ°ã®ç¶æ ãä¿ã€
ææ°ã®ã»ãã¥ãªãã£è åšãè匱æ§ã«ã€ããŠåžžã«ææ°ã®æ å ±ãå ¥æããŸããããã«ã¯ãã»ãã¥ãªãã£ã¡ãŒãªã³ã°ãªã¹ãã®è³Œèªãã»ãã¥ãªãã£ããã°ã®é²èЧãã»ãã¥ãªãã£ã«ã³ãã¡ã¬ã³ã¹ãžã®åå ãå«ãŸããŸããæ¢ç¥ã®è匱æ§ã«ããããé©çšããããã«ããœãããŠã§ã¢ãšã©ã€ãã©ãªã宿çã«æŽæ°ããŸãã
æ§ã ãªç°å¢ã«ãããããŒã¯ã³æ€èšŒ
ããŒã¯ã³æ€èšŒã¯ã以äžãå«ãæ§ã ãªç°å¢ã§å®è£ ã§ããŸãã
- ããã¯ãšã³ãAPIïŒ ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãèš±å¯ããåã«ããµãŒããŒåŽã§ããŒã¯ã³ãæ€èšŒããŸãã
- ã¢ãã€ã«ã¢ããªïŒ ããŒã¿ãæ©èœãžã®äžæ£ã¢ã¯ã»ã¹ãé²ãããã«ãã¯ã©ã€ã¢ã³ãåŽã§ããŒã¯ã³ãæ€èšŒããŸãããã ããåžžã«ããã¯ãšã³ãã§ã®æ€èšŒãè¡ã£ãŠãã ããã
- Webã¢ããªã±ãŒã·ã§ã³ïŒ ãŠãŒã¶ãŒã»ãã·ã§ã³ãšããŒã¿ãä¿è·ããããã«ããµãŒããŒåŽã§ããŒã¯ã³ãæ€èšŒããŸãã
- ãã€ã¯ããµãŒãã¹ïŒ ã²ãŒããŠã§ã€ãŸãã¯åãã€ã¯ããµãŒãã¹å ã§ããŒã¯ã³ãæ€èšŒããã»ãã¥ãªãã£ããªã·ãŒã匷å¶ããŸãã
å®äžçã®äŸ
以äžã¯ãAPIãä¿è·ããããã«ããŒã¯ã³æ€èšŒãã©ã®ããã«äœ¿çšãããŠãããã®å®äžçã®äŸã§ãã
- éèæ©é¢ïŒ éè¡ã¯ããŒã¯ã³æ€èšŒã䜿çšããŠAPIãä¿è·ãã顧客ã®å£åº§ãéèããŒã¿ãžã®äžæ£ã¢ã¯ã»ã¹ãé²ãã§ããŸããäŸãã°ãéè¡ã¯JWTã䜿çšããŠãŠãŒã¶ãŒãèªèšŒããååŒãèªå¯ããå ŽåããããŸãããŸããOAuth 2.0ã䜿çšããŠããµãŒãããŒãã£ã®éèã¢ããªã±ãŒã·ã§ã³ã顧客ã®åæãåŸãŠé¡§å®¢ããŒã¿ã«ã¢ã¯ã»ã¹ã§ããããã«ããããšããããŸãã
- ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ïŒ ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ã¯ããŒã¯ã³æ€èšŒã䜿çšããŠAPIãä¿è·ãããŠãŒã¶ãŒã®ãããã£ãŒã«ãæçš¿ããã®ä»ã®ããŒã¿ãžã®äžæ£ã¢ã¯ã»ã¹ãé²ãã§ããŸããOAuth 2.0ã¯ããµãŒãããŒãã£ã¢ããªã±ãŒã·ã§ã³ããŠãŒã¶ãŒã«ä»£ãã£ãŠãŠãŒã¶ãŒããŒã¿ã«ã¢ã¯ã»ã¹ã§ããããã«ããããã«ãã䜿çšãããŸãã
- Eã³ããŒã¹äŒæ¥ïŒ Eã³ããŒã¹äŒæ¥ã¯ããŒã¯ã³æ€èšŒã䜿çšããŠAPIãä¿è·ããé¡§å®¢ã®æ³šæãæ¯æãæ å ±ããã®ä»ã®ããŒã¿ãžã®äžæ£ã¢ã¯ã»ã¹ãé²ãã§ããŸããJWTã¯ããŠãŒã¶ãŒãèªèšŒããè³Œå ¥ãèªå¯ããããã«äœ¿çšãããå ŽåããããŸãã
- å»çæäŸè ïŒ å»çæäŸè ã¯ããŒã¯ã³æ€èšŒã䜿çšããŠAPIãä¿è·ããæ£è ããŒã¿ãä¿è·ããHIPAAãªã©ã®èŠå¶ãžã®æºæ ã確ä¿ããŠããŸããOAuth 2.0ã䜿çšããŠãæ£è ããµãŒãããŒãã£ã¢ããªã±ãŒã·ã§ã³ãéããŠèªåã®å»çèšé²ã«ã¢ã¯ã»ã¹ã§ããããã«ããå ŽåããããŸãã
ããŒã«ãšãã¯ãããžãŒ
ããŒã¯ã³æ€èšŒã®å®è£ ã«åœ¹ç«ã€ããŒã«ããã¯ãããžãŒãããã€ããããŸãã
- JWTã©ã€ãã©ãªïŒ `jsonwebtoken` (Node.js)ã`PyJWT` (Python)ã`java-jwt` (Java) ãªã©ã®ã©ã€ãã©ãªã¯ãJWTã®äœæã眲åãæ€èšŒã®ããã®æ©èœãæäŸããŸãã
- OAuth 2.0ã©ã€ãã©ãªïŒ `oauth2orize` (Node.js)ã`OAuthLib` (Python)ã`Spring Security OAuth` (Java) ãªã©ã®ã©ã€ãã©ãªã¯ãOAuth 2.0èªå¯ãµãŒããŒãšã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã®å®è£ ããµããŒãããŸãã
- APIã²ãŒããŠã§ã€ïŒ KongãApigeeãAWS API Gatewayãªã©ã®APIã²ãŒããŠã§ã€ã¯ãããŒã¯ã³æ€èšŒããã®ä»ã®ã»ãã¥ãªãã£æ©èœã®çµã¿èŸŒã¿ãµããŒããæäŸããŸãã
- ã¢ã€ãã³ãã£ãã£ãããã€ããŒïŒ OktaãAuth0ãAzure Active Directoryãªã©ã®ã¢ã€ãã³ãã£ãã£ãããã€ããŒã¯ãããŒã¯ã³ã®çºè¡ãšæ€èšŒãå«ããå æ¬çãªã¢ã€ãã³ãã£ãã£ããã³ã¢ã¯ã»ã¹ç®¡çãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã
çµè«
ããŒã¯ã³æ€èšŒã¯ãAPIã»ãã¥ãªãã£ã®éèŠãªæ§æèŠçŽ ã§ããå ç¢ãªããŒã¯ã³æ€èšŒã¡ã«ããºã ãå®è£ ãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãäžæ£ã¢ã¯ã»ã¹ãããŒã¿æŒæŽ©ããã®ä»ã®ã»ãã¥ãªãã£è åšã®ãªã¹ã¯ãå€§å¹ ã«åæžã§ããŸããç¹å®ã®ããŒãºã«åãããŠé©åãªããŒã¯ã³ã¿ã€ããšæ€èšŒæ¹æ³ãéžæããAPIã匷åãªæå·åãå®å šãªã¹ãã¬ãŒãžãå æ¬çãªç£èŠã§ä¿è·ãããŠããããšã確èªããŠãã ããã
ã»ãã¥ãªãã£ã¯ç¶ç¶çãªããã»ã¹ã§ããããšãå¿ããªãã§ãã ãããã»ãã¥ãªãã£ãã©ã¯ãã£ã¹ã宿çã«èŠçŽããææ°ã®è åšãè匱æ§ã«ã€ããŠåžžã«ææ°æ å ±ãå ¥æããå¿ èŠã«å¿ããŠã»ãã¥ãªãã£å¯Ÿçãé©å¿ãããŠãã ãããã»ãã¥ãªãã£ãåªå ããããšã§ãä¿¡é Œæ§ãé«ããä¿¡çšã§ããå®å šãªAPIãæ§ç¯ã§ããŸãã