ãä»çµã¿è§£èª¬ãOAuthã¯ã©ããã£ãŠå®å šã«ãã°ã€ã³ãå®çŸããŠããã®ã â èªå¯ã®ä»çµã¿ãå³è§£
æè¿ããããªãµã€ãã§ãGoogleã§ãã°ã€ã³ããšããGitHubã§ãã°ã€ã³ãã£ãŠãã¿ã³ããããã©ãããã£ãŠãã¹ã¯ãŒããæž¡ããŠãã®ïŒ
ããçåã ããå®ã¯ãã¹ã¯ãŒãã¯äžåæž¡ããŠããªããã ãããã¯ãOAuthããšããä»çµã¿ã䜿ã£ãŠããŠãããšãããªããå®¶ã®éµãæž¡ããã«ãç¹å®ã®éšå±ã ã䜿ã£ãŠãããããšããèš±å¯èšŒãçºè¡ããŠããã€ã¡ãŒãžã ãã
éµãæž¡ããªãã®ã«éšå±ã«å ¥ããã£ãŠãã©ãããããšïŒ
ããšãã°ãã³ã·ã§ã³ã®ç®¡ç人ãããããã®äººã¯3éã®äŒè°å®€ã ã䜿ã£ãŠããã§ããããšããäžæçãªèš±å¯èšŒãçºè¡ããŠãããæãã ããæ¬äººã®ãã¹ã¯ãŒãïŒãã¹ã¿ãŒããŒïŒã¯äžåèŠããã«ãå¿ èŠãªç¯å²ã ãã¢ã¯ã»ã¹ãèš±å¯ãããããããèªå¯ïŒAuthorizationïŒããšããèãæ¹ã ãã
ãèªèšŒããšãèªå¯ãã£ãŠããèããã©ãéããããåãããªããªâŠ
èªèšŒïŒAuthenticationïŒã¯ãããªãã¯èª°ã§ããïŒãã確èªããããšãèªå¯ïŒAuthorizationïŒã¯ãããªãã«äœãèš±å¯ããŸããïŒããæ±ºããããšãOAuthã¯ååã«"Auth"ãšã€ããŠãããã©ãå®ã¯ãèªå¯ãã®ä»çµã¿ãªãã ãããã®äººã誰ããã§ã¯ãªãããã®ã¢ããªã«ã©ããŸã§ã¢ã¯ã»ã¹ããããããæ±ã£ãŠãããã
ããããGoogleã§ãã°ã€ã³ããæŒããããšãè£åŽã§ã¯äœãèµ·ããŠãã®ïŒ
OAuthã®ãèªå¯ã³ãŒããããŒããšããæµãã説æããããç»å Žäººç©ã¯4è ãããããŸããŠãŒã¶ãŒïŒããªãïŒãã¯ã©ã€ã¢ã³ãïŒãã°ã€ã³ãããã¢ããªïŒãèªå¯ãµãŒããŒïŒGoogleãGitHubïŒããªãœãŒã¹ãµãŒããŒïŒãŠãŒã¶ãŒæ å ±ãæã€ãµãŒããŒïŒãæµãã¯ããã ãã¢ããªãèªå¯ãµãŒããŒã«ãªãã€ã¬ã¯ã â ãŠãŒã¶ãŒãGoogleã®ç»é¢ã§ãèš±å¯ããæŒã â èªå¯ãµãŒããŒããèªå¯ã³ãŒãããã¢ããªã«è¿ã â ã¢ããªããã®èªå¯ã³ãŒãã䜿ã£ãŠãã¢ã¯ã»ã¹ããŒã¯ã³ããåãåã â ã¢ããªãã¢ã¯ã»ã¹ããŒã¯ã³ã§ãªãœãŒã¹ãµãŒããŒãããŠãŒã¶ãŒæ å ±ãååŸããããšããæµãã ãã
èªå¯ã³ãŒããšã¢ã¯ã»ã¹ããŒã¯ã³ã£ãŠããªãã§2段éã«ãªã£ãŠãã®ïŒçŽæ¥ããŒã¯ã³ããããã°ãããªãïŒ
ããã¯ã»ãã¥ãªãã£äžãããéèŠãªãã€ã³ãã ããèªå¯ã³ãŒãã¯ãã©ãŠã¶ã®URLïŒãªãã€ã¬ã¯ãïŒãçµç±ããŠå±ããããçã¿èŠããããªã¹ã¯ããããã§ãèªå¯ã³ãŒãåäœã§ã¯ã¢ã¯ã»ã¹ã§ããªããŠãã¢ããªã®ãµãŒããŒããã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ããããšäžç·ã«èªå¯ãµãŒããŒã«éã£ãŠåããŠã¢ã¯ã»ã¹ããŒã¯ã³ã«äº€æã§ãããã ãã€ãŸãã¢ã¯ã»ã¹ããŒã¯ã³ã¯ãã©ãŠã¶ãçµç±ããããµãŒããŒéã®å®å šãªéä¿¡ã§åãæž¡ãããããã
ã¢ã¯ã»ã¹ããŒã¯ã³ã£ãŠæéã¯ããã®ïŒãã£ãšäœ¿ãããçãŸãããšãå±ãªããâŠ
ãã®éããã¢ã¯ã»ã¹ããŒã¯ã³ã¯éåžž1æéçšåºŠã§æéåãã«ãªãããããã§ç»å Žããã®ãããªãã¬ãã·ã¥ããŒã¯ã³ãã ãããã¯é·æéæå¹ãªããŒã¯ã³ã§ãã¢ã¯ã»ã¹ããŒã¯ã³ãåãããšãã«æ°ãããã®ãšäº€æã§ããããã ããªãã¬ãã·ã¥ããŒã¯ã³ã¯ãµãŒããŒåŽã§å³éã«ç®¡çããå¿ èŠãããããããšããã¹ã³ãŒãããšããæŠå¿µãéèŠã§ãã¢ã¯ã»ã¹ããŒã¯ã³ã«ãã¡ãŒã«ã¢ãã¬ã¹ã®èªã¿åãã ãããã«ã¬ã³ããŒã®ç·šéãŸã§ãã®ããã«æš©éç¯å²ãèšå®ã§ãããã ã
ã¹ããã¢ããªã ãšãµãŒããŒããªãããšãããããïŒãã®å Žåã¯ã©ãããã®ïŒ
ãã質åã ããã¹ããã¢ããªãSPAã®ããã«ã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãããå®å šã«ä¿ç®¡ã§ããªãã±ãŒã¹ã§ã¯ãPKCEïŒãã¯ã·ãŒïŒããšããæ¡åŒµã䜿ãããã¢ããªãã©ã³ãã ãªæååïŒcode_verifierïŒãçæããŠããã®ããã·ã¥å€ïŒcode_challengeïŒãèªå¯ãªã¯ãšã¹ãã«æ·»ãããããŒã¯ã³äº€ææã«å ã®æååãéã£ãŠãèªå¯ãµãŒããŒãããã·ã¥ãæ€èšŒãããããã§èªå¯ã³ãŒããæšªåããããŠãæªçšã§ããªããªããã ãä»ã§ã¯ãµãŒããŒãµã€ãã¢ããªã§ãPKCEã®å©çšãæšå¥šãããŠãããã
ããã§ç»å Žããã®ããOpenID ConnectïŒOIDCïŒãã ããããã¯OAuth 2.0ã®äžã«èªèšŒã®ä»çµã¿ã远å ããèŠæ Œãªãã ãã¢ã¯ã»ã¹ããŒã¯ã³ã«å ããŠãIDããŒã¯ã³ããšãããã®ãçºè¡ãããŠããã®äžã«ãŠãŒã¶ãŒã®IDã»ã¡ãŒã«ã¢ãã¬ã¹ã»ååãªã©ãå«ãŸããŠãããã€ãŸããGoogleã§ãã°ã€ã³ãã¯æ£ç¢ºã«ã¯OAuth + OpenID Connectã®çµã¿åããã§å®çŸãããŠãããã ãã
OAuthã䜿ãã°çµ¶å¯Ÿå®å šã£ãŠãããããªãããïŒæ°ãã€ããããšã¯ããïŒ
ãã¡ãããããããŸãããªãã€ã¬ã¯ãURIã®å³å¯ãªæ€èšŒããæéèŠããããçããšèªå¯ã³ãŒããæ»æè ã®ãµã€ãã«éãããŠããŸããããšã¯ãstate ãã©ã¡ãŒã¿ãã§CSRFæ»æãé²ãããšãã¢ã¯ã»ã¹ããŒã¯ã³ãlocalStorageã«ä¿åããªãããšãã¹ã³ãŒãã¯å¿ èŠæå°éã«ããããšãå®è£ åŽãšããŠã¯ã©ã€ãã©ãªãèªäœãããå®çžŸã®ããOAuthã©ã€ãã©ãªã䜿ãã®ãéåã ããOAuthã¯ä»æ§èªäœãããã§ããŠãããã©ãå®è£ ã®ãã¹ãã»ãã¥ãªãã£ããŒã«ã«çŽçµããããããä»çµã¿ãçè§£ããäžã§ãä¿¡é Œã§ããã©ã€ãã©ãªã«ä»»ãããã®ããã¹ããã©ã¯ãã£ã¹ã ãã