IETF ã® OAuth Working Groupã¯ãã¢ã¤ãã³ãã£ãã£åéã«ãããæ¨æºã®ä½æã¨æ¹è¯ã«ç±å¿ã«åãçµãã§ãã¾ãããã®è¨äºã§ã¯ JSON Web Token (JWT) ã®ææ°ãã¹ã ãã©ã¯ãã£ã¹ã«ã¤ãã¦æ¸ãããç´è¿ã®ãã©ããã«ã¤ãã¦åãä¸ãã¾ãã対象ã®ãã©ããã§ã¯ãJWT ã®ä½¿ç¨ã«éãã¦é¥ããã¡ãªè½ã¨ãç©´ããããè¦ãããæ»ææ¹æ³ã«å ãã¦ãããããåé¡ã«å¯¾ãã軽æ¸çã®å®æ½æ¹æ³ãç´¹ä»ãã¦ãã¾ãã®ã§ããã²ãä¸èªãã ããã
âJWT ãæ¨çã¨ããç¹ã«ä¸è¬çãªæ»ææ¹æ³ã¨ãå ·ä½çãªä¿è·å¯¾çãç´¹ä»ããã¦ãã¾ãâ
Tweet This
ã¯ããã«
JSON Web Token (JWT) ä»æ§ã¯ã2 è éã§ã®ã¯ã¬ã¼ã (å±æ§æ å ±) ã®ä¼éãç®çã¨ãããJSON ãã¼ã¹ã®å½¢å¼ã«ã¤ãã¦è¦å®ãããªã¼ãã³æ¨æº (RFC 7519)ã§ãã JWT ãè£å®ããæ¨æºã¨ãã¦ãJSON Web Key (RFC 7517), JSON Web Signature (RFC 7515), JSON Web Encryption (RFC 7516), and JSON Web Algorithms (RFC 7518) ãªã©ããããæ¤è¨¼æ©è½ãæå·åæ©è½ã§ JWT ãæ¡å¼µãããã¨ãã§ãã¾ãã
JWT ã«ã¯å®ã«å¤ãã®ä½¿ãéãããã¾ããèªè¨¼ã¨èªå¯ ã«é¢ããã¯ã¬ã¼ã ã 2 è éã§ä¼éããã®ããã® 1 ã¤ã§ãããã¨ãã°ã ID ãããã¤ãã¼ã«ãã£ã¦èªè¨¼ãããã¦ã¼ã¶ã¼ã¯ãä¸é£ã®ç½²åä»ã JWT ã¯ã¬ã¼ã ã®ä¿æã許å¯ãããã¢ããªã±ã¼ã·ã§ã³ã«å¯¾ããæ¬äººç¢ºèªã«ä½¿ç¨ãããã¨ãã§ãã¾ãã
ã¢ã¤ãã³ãã£ãã£ã®åéã«ããã JWT ã¯ã OAuth2 ãã¬ã¼ã ã¯ã¼ã¯ããã¼ã¹ã¨ããä»æ§ã§ãã OpenID Connect æ¨æºã®ä¸é¨ã¨ãã¦ãããç´°ããèªè¨¼ã¬ã¤ã¤ã¼ã®æä¾ã«æ¬ ãããªãåå¨ã¨ãªã£ã¦ãã¾ãã
ãã£ã¨ãããããã JWT ã®å®ä¾ã¨ãã¦ã¯ããã©ã¦ã¶ã¼ãã¢ãã¤ã« ã¯ã©ã¤ã¢ã³ãä¸ã§ã¯ã¬ã¼ã ãä¿ç®¡ããããã«ä½¿ç¨ããããæå·åãç½²åãæ½ããããã¼ã¯ã³ãæãããã¾ããããããã¯ã¬ã¼ã ã¯åä¿¡è å´ã§ãå ±æã·ã¼ã¯ã¬ããã¾ãã¯å ¬éãã¼ã使ç¨ãã¦ç°¡åã«æ¤è¨¼ã§ãã¾ãã
JWT ä»æ§ã§ã¯ç¬èªã«ä½æãããã©ã¤ãã¼ã ã¯ã¬ã¼ã ããµãã¼ããããæ¤è¨¼æ¸ã¿ã¾ãã¯æå·åãããä»»æã®ãã¼ã¿ããJSON å½¢å¼ã«ç°¡åã«ã¨ã³ã³ã¼ããã¦ããåãã§ããã®ã§ä¾¿å©ã§ãã
JWT ã®æ¦è¦ãæ¥çã§ã®ä½¿ç¨ä¾ãã¢ã«ã´ãªãºã ã¨ã©ã¤ãã©ãªã®è©³ããå®è£
æ¹æ³ãªã©ã«ãèå³ããæã¡ã§ãããã以ä¸ã®ãªã³ã¯ããç¡æã® JWT ãã³ãããã¯ãã覧ãã ããã
å¹ççã« JWT ã«ã¤ãã¦ç解ãæ·±ãããã§ããï¼
ãããããã¼ã«ãããã§ããããã«ãJWT ã«ã JWT ãªãã§ã¯ã®è½ã¨ãç©´ããããJWT ãæ¨çã¨ããæ»æãè¡ããã¦ãã¾ãã JSON Web Token ã®ææ°ãã¹ããã©ã¯ãã£ã¹ã¯ãããããè½ã¨ãç©´ãæ»æã«ã¤ãã¦ç´¹ä»ããªãããé²æ¢çããããããã解説ããããã¥ã¡ã³ãã§ããä»åã®è¨äºã§ã¯ããã®ããã¥ã¡ã³ãã«æããããæ»æã¨è½ã¨ãç©´ã«ã¤ãã¦ç¢ºèªããå¾ã軽æ¸çã¨ãã¹ã ãã©ã¯ãã£ã¹ãè¦ã¦ãããã¨ã«ãã¾ãã
è½ã¨ãç©´ã¨æ»æ
1 ã¤ç®ã®æ»æã«ã¤ãã¦ç´¹ä»ããåã«ã注æãã¦ããã ãããç¹ãããã¾ããããã¯ãJWT ãæ¨çã¨ããæ»æã®å¤ãã¯ãJWT ã®ä»æ§è¨è¨ã¨ãããããããã®å®è£ æ¹æ³ã«é¢é£ãã¦ããã¨ãããã¨ã§ããã ããã¨è¨ã£ã¦ãæ»æã¸ã®è¦æãç·©ãã¦ããããã§ã¯ããã¾ãããåºç¤ã¨ãªãè¨è¨ãå¤æ´ãããã¨ããããããæ»æã®è»½æ¸çã¨ãã¦æå¹ãã©ããã«ã¤ãã¦ã¯è°è«ã®ä½å°ãããã¾ããå½åã®éãJWT ã®ä»æ§ãå½¢å¼ãå¤ãããã¨ã¯ããã¾ããããã®ãããã»ã¨ãã©ã®å¤æ´ã¯å®è£ ã¬ãã« (ã©ã¤ãã©ãªãAPIãããã°ã©ãã³ã°ã®ææ³ãè¦åã®å¤æ´) ã§è¡ããã¾ãã
ãã 1 ã¤éè¦ãªç¹ã¨ãã¦ãJWT ã§æãä¸è¬çã«ä½¿ç¨ããã表ç¾å½¢å¼ã JWS Compact Serialization ã®åºæ¬æ¦å¿µãç解ãã¦ããã¾ããããã·ãªã¢ã«åã解é¤ããã¨ãJWT ã¯ä¸»ã«
header
㨠payload
ã¨ãã 2 ã¤ã® JSON ãªãã¸ã§ã¯ãã§æ§æããã¦ãã¾ãããããã¼ ãªãã¸ã§ã¯ãã«ã¯ JWT èªä½ã®æ å ±ãå«ã¾ãã¾ããå ·ä½çã«ã¯ããã¼ã¯ã³ã®ã¿ã¤ãã使ç¨ããã¦ããç½²åã¾ãã¯æå·åã®ã¢ã«ã´ãªãºã ããã¼ ID ãªã©ã§ãã
ä¸æ¹ããã¤ãã¼ã ãªãã¸ã§ã¯ãã«ã¯ããã®ãã¼ã¯ã³ã«ãã£ã¦éã°ãããã¹ã¦ã®é¢é£æ å ±ãå«ã¾ãã¾ãããã®ãªãã¸ã§ã¯ãã«ã¯ã
sub
(subject ã®ç¥ãã¦ã¼ã¶ã¼ã®èå¥åã表ã) ã iat
(issued at ã®ç¥ãçºè¡æéã表ã) ãªã©ã®æ¨æºã®ã¯ã¬ã¼ã ã«å ããä»»æã®ã«ã¹ã¿ã ã¯ã¬ã¼ã ãå«ãããã¨ãã§ãã¾ãããããããªãã¸ã§ã¯ã㯠JWS Compact Serialization å½¢å¼ã使ç¨ãã¦ã¨ã³ã³ã¼ãããã次ã®ä¾ã®ããã«å¤æããã¾ãã
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.XbPfbIHMI6arZ3Y922BhjWgQzWXcXNrz0ogtVhfEd2o
ä¸è¨ã¯ç½²åä»ãã® JWT ã§ããç½²åä»ãã® JWT ãã³ã³ãã¯ãå½¢å¼ã«ããã¨ãBase64-URL ã¨ã³ã³ã¼ãããããããã¼ ãªãã¸ã§ã¯ãã¨ãã¤ãã¼ã ãªãã¸ã§ã¯ããããã (
.
) ã§åºåã£ã¦é£çµããã¾ããç½²åã¯ããã®ã³ã³ãã¯ããªè¡¨ç¾ã®æå¾ã®é¨åã«å½ããã¾ããå
·ä½çã«ã¯ã次ã®ãããªå½¢å¼ã«ãªãã¾ãã[Base64-URL encoded header].[Base64-URL encoded payload].[Signature]
ä¸è¨ã¯ç½²åä»ããã¼ã¯ã³ã®ã¿ã«é©ç¨ãããå½¢å¼ã§ããæå·åããããã¼ã¯ã³ã¯å¥ã®ã·ãªã¢ã«åãããã³ã³ãã¯ãå½¢å¼ã§è¡¨ç¾ãããåãã Base64-URL ã¨ã³ã³ã¼ãã£ã³ã°ã¨ãããã§åºåã£ããã£ã¼ã«ãã使ç¨ããã¾ãã
ãJWT ã触ã£ã¦ã¿ããããã¨ã³ã³ã¼ãã¨ãã³ã¼ãã®ããã¿ãç¥ããããã¨ããæ¹ã¯ãJWT.io ãåç §ãã¦ãã ããã
"alg": "none" æ»æ
å ã»ã©ãè¿°ã¹ãããã«ãJWT ã§ã¯ãããã¼ã¨ãã¤ãã¼ãã¨ãããéè¦ãªæ å ±ãå«ã 2 ã¤ã® JSON ãªãã¸ã§ã¯ããä¼éãã¾ãããã®ãããã¼ã«ã¯ãJWT å ã®ãã¼ã¿ã®ç½²åãæå·åã«ä½¿ç¨ãããã¢ã«ã´ãªãºã ã«é¢ããæ å ±ãå«ã¾ãã¾ããç½²åä»ã JWT ã®ç½²åã¯ãããã¼ã¨ãã¤ãã¼ãã®ä¸¡æ¹ã«é©ç¨ããã¾ãããæå·åããã JWT ã§ã¯ãã¤ãã¼ãã®ã¿ãæå·åããã¾ã (ãããã¼ã¯å¸¸ã«å¤èªå¯è½ã§ãªãã¦ã¯ãªããªããã)ã
ç½²åä»ããã¼ã¯ã³ã®å ´åããããã¼ã¨ãã¤ãã¼ãã®æ¹ããã¯ç½²åã«ãã£ã¦é²æ¢ã§ãã¾ãããç½²åã使ç¨ããã« JWT ãæ¸ãæãã¦ãå é¨ã®ãã¼ã¿ãå¤æ´ãããã¨ã¯å¯è½ã§ããããã¯ã©ãããããã¿ãªã®ã§ãããã?
次ã®ãããªãããã¼ã¨ãã¤ãã¼ããå«ã JWT ã®ä¾ã§èãã¦ã¿ã¾ãããã
header: { alg: "HS256", typ: "JWT" }, payload: { sub: "joe" role: "user" }
ãã®ãã¼ã¯ã³ã«ç½²åãä»ããã·ãªã¢ã«åãããã³ã³ãã¯ãå½¢å¼ã«ã¨ã³ã³ã¼ãããã¨ãã¾ããç½²åãã¼ã¯ãsecretãã§ããã¨ã³ã³ã¼ã㯠JWT.io ã§å®è¡ã§ãã¾ããçµæã¯æ¬¡ã®ã¨ããã§ãã
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqb2UiLCJyb2xlIjoidXNlciJ9.vqf3WzGLAxHW-X7UP-co3bU_lSUdVjF2MKtLtSU1kzU
ä¸è¨ãã³ãã¼ãã JWT.io ã«è²¼ãä»ãã¦ç¢ºããã¦ã¿ã¦ãã ããã
ãã¦ãããã¯ç½²åä»ããã¼ã¯ã³ãªã®ã§ãã ãã§ãå¤èªã§ãã¾ããã¤ã¾ããä¸èº«ã®ãã¼ã¿ãå°ãã ãå¤æ´ãã¦é¡ä¼¼ã®ãã¼ã¯ã³ãä½æã§ãã¾ãããã ããç½²åãã¼ãç¥ããªããã°ç½²åãä»ãããã¨ã¯ã§ãã¾ãããç½²åãã¼ãããããªãå ´åãæ»æè ã¯ã©ãããã§ãããã? æªæããã¦ã¼ã¶ã¼ã¯ãç½²åãªãã®ãã¼ã¯ã³ã使ç¨ãã¦æ»æãããã¦ãããã¨ãããã¾ãããã®ããã¿ã詳ãã説æãã¾ãããã
æ»æè ã¯ã¾ãããã¼ã¯ã³ãæ¹ãããã¾ãããã¨ãã°ã次ã®ããã«å¤æ´ããã¨ãã¾ãã
header: { alg: "none", typ: "JWT" }, payload: { sub: "joe" role: "admin" }
ä¸è¨ãã¨ã³ã³ã¼ããã¾ãã
eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiJqb2UiLCJyb2xlIjoiYWRtaW4ifQ.
ãã®ãã¼ã¯ã³ã«ã¯ç½²åãå«ã¾ãã¾ãã (
"alg": "none"
ã«ãã£ã¦ã¢ã«ã´ãªãºã ã "ãªã" ã«æå®ããã¦ãããã)ãããã«ããã¤ãã¼ãã®ãã¼ã« (role
) ã¯ã¬ã¼ã ãå¤æ´ããã¦ãã¾ããæ»æè
ããã®ãã¼ã¯ã³ã®æªç¨ã«æåããã°ãç¹æ¨©ã¨ã¹ã«ã¬ã¼ã·ã§ã³æ»æãããããã¨ãã§ãã¾ãããªãããããæ»æãæå¹ãªã®ããæ¶ç©ºã® JWT ã©ã¤ãã©ãªã®ä¾ã§èãã¦ã¿ã¾ãããã次ã®ãããªãã³ã¼ãé¢æ°ãããã¨ãã¾ããfunction jwtDecode(token, secret) { // (...) }
ãã®é¢æ°ã¯ãã¨ã³ã³ã¼ãããããã¼ã¯ã³ã¨ã·ã¼ã¯ã¬ããã使ç¨ãããã¼ã¯ã³ã®æ¤è¨¼ã試è¡ããå¾ããã¼ã¯ã³å ã®ãã¼ã¿ããã³ã¼ããã¦è¿ãã¾ããæ¤è¨¼ã«å¤±æããå ´åã¯ä¾å¤ãã¹ãã¼ããã¾ããé©åãªæ¤è¨¼ã¢ã«ã´ãªãºã ãé¸æããããã«ããã®é¢æ°ã¯ãããã¼å ã® alg ã¯ã¬ã¼ã ãåç §ãã¾ãããããããããã®æ»æãæåããè¦å ã§ããå¾æ¥å¤ãã®ã©ã¤ãã©ãªã§ã¯ããã®ã¯ã¬ã¼ã ãåç §ãããã¨ã§æ¤è¨¼ã¢ã«ã´ãªãºã ãé¸æãã¦ãã¾ãããããã¦çãããããäºæ³ãã¤ãã¦ããããããã¾ããããå ã»ã©æããæªæãããã¼ã¯ã³ã§ã¯
alg
ã¯ã¬ã¼ã ã none
ã«ãªã£ã¦ãã¾ããã¤ã¾ããæ¤è¨¼ã¢ã«ã´ãªãºã ãè¨å®ããã¦ããªããããæ¤è¨¼ã¹ãããã常ã«æåãã¦ãã¾ãã®ã§ããããããã®ããã«ãããã¯æããããæ»æã®ãã¿ã¼ã³ã§ãç¹å®ã®ã©ã¤ãã©ãªã«å«ã¾ãã API ã®ç¹å®ã®ããã¾ãæ§ãæªç¨ãããã®ã§ãã£ã¦ãJWT ã®ä»æ§èªä½ã®èå¼±æ§ã§ã¯ããã¾ããããã ããããã¯éå»ã«è¤æ°ã®ç°ãªãå®è£ ã«ããã¦ç¾å®ã«è¡ãããæ»æã§ãããã®ãããç¾å¨ã§ã¯å¤ãã®ã©ã¤ãã©ãªã§ãç½²åã®æç¡ã«ãããããã
"alg": "none"
ã¨ããæå®ã®ãã¼ã¯ã³ãç¡å¹ã«ããã¦ãã¾ãããã®ã¿ã¤ãã®æ»æã«ã¯ä»ã«ã軽æ¸çãããããã®ãã¡æãéè¦ãªã®ãããã¼ã¯ã³ã®æ¤è¨¼ãè¡ãåã«å¿
ããããã¼å
ã®ã¢ã«ã´ãªãºã ã®æå®ããã§ãã¯ãããã¨ã§ããã¾ããalg
ã¯ã¬ã¼ã ãåç
§ããã®ã§ã¯ãªããæ¤è¨¼é¢æ°ã¸ã®å
¥åå¤ã¨ãã¦æ¤è¨¼ã¢ã«ã´ãªãºã ã®æå®ãå¿
è¦ã¨ãããããªã©ã¤ãã©ãªã使ç¨ããæ¹æ³ãããã¾ããRS256 å ¬éãã¼ã HS256 ã·ã¼ã¯ã¬ããã¨ãã¦ä½¿ç¨ããæ»æ
ããã¯
"alg": "none"
ã¨åãããç¹å®ã® JWT ã©ã¤ãã©ãªã«å«ã¾ãã API ã®ããã¾ãæ§ãæªç¨ãããã®ã§ãããã¼ã¯ã³ã®ä¾ã«ã¯ãå
ã»ã©ã® "alg":" none" ã®å ´åã¨åæ§ã®ãã®ã使ç¨ãã¾ãããã ãããã¡ãã®ã±ã¼ã¹ã§ã¯ç½²åãåé¤ãã¾ããã代ããã«ãå¤ãã® API ã«å«ã¾ããæ¬ é¥ãæªç¨ãããã¨ã§ãæå¹ãªç½²åãä½æãã¦ãæ¤è¨¼ã©ã¤ãã©ãªã®å´ã§ãæå¹ã ã¨å¤æãããããã«ãã¾ããæåã«ãä¸é¨ã® JWT ã©ã¤ãã©ãªã«å«ã¾ããæ¤è¨¼é¢æ°ã«ä½¿ç¨ãããæ¨æºçãªé¢æ°ã·ã°ããã£ãè¦ã¦ã¿ã¾ããããfunction jwtDecode(token, secretOrPublicKey) { // (...) }
ã覧ã«ãªã£ã¦ãããããã«ããã®é¢æ°ã¯
"alg": "none"
æ»æã®å ´åã¨åºæ¬çã«ã¯ã¾ã£ããåä¸ã§ããæ¤è¨¼ã«æåããã°ãã³ã¼ãããããã¼ã¯ã³ãè¿ããã失æããã°ä¾å¤ãã¹ãã¼ããã¾ãããã ãããã®ä¾ã®é¢æ°ã®å ´åã¯ã2 ã¤ç®ã®ãã©ã¡ã¼ã¿ã¼ã¨ãã¦ãå
¬éãã¼ãåãå
¥ããç¹ãç°ãªã£ã¦ãã¾ããããã¯ããæå³ãçã«ããªã£ãæ¹æ³ã§ããå
¬éãã¼ã¨å
±æã·ã¼ã¯ã¬ããã«ã¯é常ãã©ã¡ããæååã¾ãã¯ãã¤ãé
åã使ç¨ããã¾ãããã®ããé¢æ°ã®å¼æ°ã«æ±ããããåã®è¦³ç¹ã§ã¯ãåä¸ã®å¼æ°ã«ãã£ã¦å
¬éãã¼ã¨ (RSãESãPS ã¢ã«ã´ãªãºã åã) ã¨å
±æã·ã¼ã¯ã¬ãã (HS ã¢ã«ã´ãªãºã åã) ã®ä¸¡æ¹ã表ããã¨ãã§ãã¾ãããã®ã¿ã¤ãã®é¢æ°ã·ã°ããã£ã¯ãå¤ãã® JWT ã©ã¤ãã©ãªã§ä¸è¬çã«ä½¿ç¨ããã¦ãã¾ããããã§ãRSA ãã¼ã®ãã¢ã使ç¨ãã¦ç½²åæ¸ã¿ã®ã¨ã³ã³ã¼ãããããã¼ã¯ã³ãæ»æè ãå ¥æããã¨ãã¾ããããããã¯æ¬¡ã®ãããªãã¼ã¯ã³ã§ãã
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqb2UiLCJyb2xlIjoidXNlciJ9.QDjcv11Kcb69THVLKMErYqzy9htWlCDtBdonVR5SX4geZa_R8StjwUuuskveUsdJVgjgXwMso7pguAJZzoE9LEr9XCxau7SF1ddws4ONiqxSVXZbO0pSgbKm3FpkVz4Jyy4oNTs-bIYyE0xf8snFlT1MbBWcG5psnuG04IEle4s
ãã³ã¼ãããã¨æ¬¡ã®ããã«ãªãã¾ãã
header: { "alg": "RS256", "typ": "JWT" }, payload: { "sub": "joe", "role": "user" }
ãã®ãã¼ã¯ã³ã¯ RSA ãã¼ã®ãã¢ã使ç¨ãã¦ç½²åããã¦ãã¾ããRSA ã®ç½²åã¯ç§å¯ãã¼ã使ç¨ãã¦è¡ããã¾ãããæ¤è¨¼ã®å®è¡ã«ã¯å ¬éãã¼ã使ç¨ããã¾ããã¤ã¾ãããã®ãã¼ã¯ã³ã®æ¤è¨¼ãè¡ããã¨ããã¦ã¼ã¶ã¼ã¯ã ãã§ãã次ã®è¦é ã§å ã»ã©ã®æ¶ç©ºã®
jwtDecode
é¢æ°ãå¼ã³åºãã¾ããconst publicKey = '...'; const decoded = jwtDecode(token, publicKey);
ããããããã§åé¡ãçºçãã¾ããå ¬éãã¼ã¯ãã®åã®ã¨ãããå ¬éããã¦ããã®ãä¸è¬çã§ããå½ç¶ãªããæ»æè ãæã«å ¥ãããã¨ãã§ãã¾ãããããèªä½ã¯åé¡ãªãã§ãããããã ãããããã説æããæ¹æ³ã§æ»æè ãæ°ãããã¼ã¯ã³ãä½æããå ´åã¯è©±ãå¤ããã¾ããæ»æè ã¯ã¾ããããã¼ã«å¤æ´ãå ããç½²åã¢ã«ã´ãªãºã ã«
HS256
ãæå®ãã¾ããheader: { "alg": "HS256", "typ": "JWT" }
次ã«ããã¤ãã¼ãå ã®
role
ã¯ã¬ã¼ã ãå¤æ´ãã¦ã¢ã¯ã»ã¹è¨±å¯ãææ ¼ããã¾ããpayload: { "sub": "joe", "role": "admin" }
ãããããæ»æã®ãã¤ã³ãã§ããæ»æè ã¯å ¥æããå ¬éãã¼ã使ç¨ãã¦ãã¨ã³ã³ã¼ãããã JWT ãæ°ãã«ä½æãã¾ããããã®å ¬éãã¼ã¨ HS256 ã®å ±æã·ã¼ã¯ã¬ããã¯ãã©ã¡ããã·ã³ãã«ãªæååãªã®ã§ããè¨ãæããã°ãHS256 ã®å ±æã·ã¼ã¯ã¬ããã«ã¯ã©ããªæååã§ã使ç¨ã§ãããã¡ãã RS256 ã¢ã«ã´ãªãºã ã®å ¬éãã¼ã§ããã¾ãã¾ããã
ããã§ãå ã»ã©ã®æ¶ç©ºã®
jwtDecode
é¢æ°ã®ä¾ã«æ»ãã¾ãconst publicKey = '...'; const decoded = jwtDecode(token, publicKey);
ä½ãåé¡ãã¯ããããããã§ããããããã§ãã¼ã¯ã³ãæå¹ã ã¨è¦ãªããã¦ãã¾ãã®ã§ããå ¬éãã¼ã 2 çªç®ã®å¼æ°ã¨ãã¦
jwtDecode
é¢æ°ã«æ¸¡ãããRS256 ã¢ã«ã´ãªãºã ã®å
¬éãã¼ã¨ãã¦ã§ã¯ãªããHS256 ã¢ã«ã´ãªãºã ã®å
±æã·ã¼ã¯ã¬ããã¨ãã¦ä½¿ç¨ããã¾ãããã®åé¡ã¯ JWT ã®æ¤è¨¼ã¢ã«ã´ãªãºã ãé¸æããéãjwtDecode
é¢æ°ããããã¼å
ã® alg
ã¯ã¬ã¼ã ãåç
§ãã¦ããããã«èµ·ããã¾ããæ»æè
ã¯ãã®ã¯ã¬ã¼ã ã次ã®ããã«å¤æ´ãã¾ãããheader: { "alg": "HS256", // <-- changed by the attacker from RS256 "typ": "JWT" }
åè¿°ã®
"alg": "none"
ã¨åæ§ã«ãæ¬ é¥ã®ãããã¾ãã¯ç´ãããã API 㨠alg
ã¯ã¬ã¼ã ã®åç
§ãçµã¿åããããã¨ã§ãæªæããã¦ã¼ã¶ã¼ã«ããæ»æãæåãã¦ãã¾ãããã¾ããããã®æ»æã«å¯¾ãã軽æ¸çã¨ãã¦ã¯ã
jwtDecode
é¢æ°ã«ã¢ã«ã´ãªãºã ãæ示çã«å¼ã渡ãæ¹æ³ããalg
ã¯ã¬ã¼ã ããã§ãã¯ããæ¹æ³ãå
¬éãã¼ ã¢ã«ã´ãªãºã ã¨å
±æã·ã¼ã¯ã¬ãã ã¢ã«ã´ãªãºã ãåãé¢ããã㪠API ã使ç¨ããæ¹æ³ãªã©ãæãããã¾ããè弱㪠HMAC ãã¼
HMAC ã¢ã«ã´ãªãºã ã§ã¯ç½²åã®ä½æã¨æ¤è¨¼ã«ãå ±æã·ã¼ã¯ã¬ããã使ç¨ãã¦ãã¾ããå ±æã·ã¼ã¯ã¬ããããã¹ã¯ã¼ãã¨åããããªãã®ã¨æã£ã¦ããæ¹ãããã£ãããã§ããããé¢ä¿è 以å¤ã«ã¯ç§å¯ã«ãã¦ããå¿ è¦ãããã¨ããç¹ã§ã¯ããã®èªèãééãã§ã¯ããã¾ããããããã両è ã®éã«ãã以ä¸ã®å ±éç¹ã¯ãªãã®ã§ãããã¹ã¯ã¼ãã¯é·ããéè¦ãªç¹æ§ã«ãªãã¾ãããä»ã®ã¿ã¤ãã®ã·ã¼ã¯ã¬ããã¨æ¯ã¹ãã¨ãé·ãã®æå°è¦ä»¶ã¯ç¸å¯¾çã«çãã¨è¨ãã¾ããããã¯ããã¹ã¯ã¼ãã®ä¿åã«ä½¿ç¨ãããããã·ã¥ ã¢ã«ã´ãªãºã (ããã³ã½ã«ã) ã®å½±é¿ã§ãç¸å¿ã®æéããã«ã¼ã ãã©ã¼ã¹æ»æãé²ããã¨ãã§ããããã§ãã
ããã«å¯¾ããJWT ã§ä½¿ç¨ããããã㪠HMAC ã®å ±æã·ã¼ã¯ã¬ããã¯ã¹ãã¼ãéè¦ã§è¨è¨ããã¦ãã¾ããçµæã¨ãã¦ãå¤ãã®ç½²åã»æ¤è¨¼å¦çãå¹ççã«å®è¡ã§ããä¸æ¹ã§ãã«ã¼ã ãã©ã¼ã¹æ»æãåãããããªãã¾ãããã®ãããHS256 / 384 / 512 ã®å ±æã·ã¼ã¯ã¬ããã®é·ãã«ã¯æ大éã®æ³¨æãå¿ è¦ã§ããå ·ä½çã«è¨ãã¨ã JSON Web Algorithms ã§ã¯ããã¼ã®é·ãã¯æä½éãHMAC ã¢ã«ã´ãªãºã ã¨ä½µç¨ããããã·ã¥é¢æ°ã¨åããããæ°ä»¥ä¸ã®ãµã¤ãºã§ãªãã¦ã¯ãªããªãã¨å®ç¾©ããã¦ãã¾ãã
"ãã®ã¢ã«ã´ãªãºã ã¨ä½µç¨ãããã¼ã¯ãããã·ã¥åºå ("HS256" ãªã 256 ããããªã©) ã¨åãµã¤ãºãã¾ãã¯ãã以ä¸ã§ããå¿ è¦ãããã¾ã" - JSON Web Algorithms (RFC 7518), 3.2 HMAC with SHA-2 Functionsã(SHA-2 é¢æ°ã使ç¨ãã HMAC)
å¥ã®è¨ãæ¹ãããã°ãä»ã®ã³ã³ããã¹ããªã使ç¨ã§ãããã¹ã¯ã¼ãã®å¤ãããHMAC ã§ç½²åããã JWT ã¨ä½¿ç¨ããå ´åã«ã¯ãå¿ è¦ãªæ¡ä»¶ãæºãããªããã¨ã«ãªãã¾ãã256 ããã㯠ASCII æå 32 åã«ç¸å½ããããã人ãèªãã§æå³ãæããããªãã¹ã¯ã¼ãã«ãããªããå°ãªãã¨ããã®æ°ä»¥ä¸ã®æåæ°ãã·ã¼ã¯ã¬ããå ã«å«ããããã«ãã¾ãããããã 1 ã¤ã®é¸æè¢ã¨ãã¦ãRS256 ãªã©ãããå¼·åºãã¤æè»æ§ã®é«ãä»ã®å ¬éãã¼ ã¢ã«ã´ãªãºã ã«åãæ¿ããæ¹æ³ãå¹æçã§ããããã¯åãªãä»®å®çãªæ»æã§ã¯ããã¾ãããå¥ã®è¨äºã§ã示ãã¦ãã¾ãããå ±æã·ã¼ã¯ã¬ãããçãããå ´åãHS256 ã¸ã®ãã«ã¼ã ãã©ã¼ã¹æ»æã¯ããç°¡åã«å®è¡ã§ãã¾ãã
æå·åããã³ç½²åã®æ¤è¨¼ã®åæãã¼ã¿ã«é¢ããã¹ã¿ãã¯ã®ãã¹
ç½²åã¯æ¹ãããé²ãå½¹å²ãæããã¾ããã¤ã¾ããç½²åã«ãã¼ã¿ã®è§£èªãé²ãåã¯ããã¾ãããããã¼ã¿ãå¤æ´ãããã¨ãã«ç½²åãç¡å¹ã¨ãªããã¨ã§ãå¤æ´ã®é²æ¢ã«å¹æãçºæ®ãã¾ããä¸æ¹ãæå·åã使ç¨ããã¨ãå ±æãã¼ãå ¬éãã¼ãç¥ããªãéãããã¼ã¿ã解èªãããã¨ãã§ãã¾ããã
å¤ãã®ã¢ããªã±ã¼ã·ã§ã³ã§ã¯ãç½²åæ©è½ã使ç¨ããã ãã§ååã§ãããæ©å¯ã®ãã¼ã¿ã«ã¤ãã¦ã¯æå·åãå¿ è¦ã¨ãªãå ´åãããã¾ããJWT ã§ã¯ãç½²åã¨æå·åã®ä¸¡æ¹ããµãã¼ãããã¾ãã
ããããæãéãããæå·åããããã°æ¹ãããå¿ ãé²ããã¨ãããã®ã§ããå¤ãã®æ¹ãããã¼ã¿ã解èªã§ããªããªããæ»æè ãæ¹ãããã¦æªç¨ãããã¨ãã§ããªãã ãããã¨èãã¦ããã®ã§ãããããããæ®å¿µãªãããæ»æè ã¸ã®èªèãçããæ»æããã»ã¹ã«ããããã¢ã«ã´ãªãºã ã«ã¤ãã¦æ»æè ã®æã¤ç¥èãéå°è©ä¾¡ãã¦ããã¨è¨ããããå¾ã¾ããã
ä¸é¨ã®æå·åã»å¾©å·ã¢ã«ã´ãªãºã ã¯ã渡ããããã¼ã¿ã®æå¹æ§ã«ã¯é¢ä¿ãªããåºåå¦çãå®è¡ãã¾ããããªãã¡ããã¨ãæå·åããããã¼ã¿ãæ¹ããããã¦ããã¨ãã¦ããä½ãããã®ãã¼ã¿ã復å·ããã»ã¹ã«ãã£ã¦åºåãããã¨ãããã¨ã§ããä½ãèããã«å¤æ´ããããã¼ã¿ãªããé常ã¯åºåçµæãæå³ã®ãªããã®ã§ããããã¾ããããæªæããæ»æè ã«ã¨ã£ã¦ã¯ãã·ã¹ãã ã«ä¾µå ¥ããã®ã«ååãªæ段ã¨ãªãå¾ã¾ãããã¨ãã°ã次ã®ãã㪠JWT ãã¤ãã¼ããããã¨ãã¾ãããã
{ "sub": "joe", "admin": false }
ã覧ã«ãªã£ã¦ãããã¨ããã
admin
ã¯ã¬ã¼ã ã¯ã·ã³ãã«ãªãã¼ã«å¤ã§è¡¨ããã¾ãããããæ»æè
ã復å·ãã¼ã¿ã«å¤æ´ãå ããæ¹æ³ãè¦ã¤ãåºãããã®ãã¼ã«å¤ããtrueãã«ãããã¨ãã§ãããªããç¹æ¨©ã¨ã¹ã«ã¬ã¼ã·ã§ã³æ»æã«æåãã¦ãã¾ãå¯è½æ§ãããã¾ããå
·ä½çã«è¨ãã°ãæ»æã«ãã£ã·ãã¨æéãããããããªãã°ãæ»æè
ã¯æå·åããããã¼ã¿ãæ¹ãããæ¾é¡ã«ãªãã¾ãããã¼ã¯ã³ãã·ã¹ãã ã«ãã£ã¦ç¡å¹ã¨å¤æãããå¦çåã«ç ´æ£ããããã¨ãããã¾ããããã®ä»ã®æ»æã¨ãã¦ãæ¢ã«ãµãã¿ã¤ãºããããã¼ã¿ãéããã¦ãããã¨ãåæã¨ãã¦ãããµãã·ã¹ãã ã«å¯¾ããç¡å¹ãªãã¼ã¿ãéãè¾¼ããã¨ã«ããããã°ãé害ãçºçãããããå¥ã®ã¿ã¤ãã®æ»æã®ä¾µå
¥çµè·¯ã¨ãã¦å©ç¨ãããããæ¹æ³ãããã¾ããããããçç±ããã JSON Web Algorithms ã®å®ç¾©ã«ã¯ããã¼ã¿æ´åæ§ã®æ¤è¨¼æ©è½ãåããæå·åã¢ã«ã´ãªãºã ããå«ã¾ãã¦ãã¾ãããã¨ãããã¨ã¯ã使ç¨ãããæå·åã¢ã«ã´ãªãºã ã JSON Web Algorithms ã§æ¿èªãããã¢ã«ã´ãªãºã ã®ããããã§ããéãããã®ã¢ããªã±ã¼ã·ã§ã³ã«é¢ãã¦ãç½²åä»ãã® JWT ã®ä¸ã«æå·åããã JWT ãããã«éããå¿ è¦ã¯å¿ ãããããã¾ããããã ããæ¨æºä»¥å¤ã®ã¢ã«ã´ãªãºã ã使ç¨ã㦠JWT ãæå·åããå ´åã«ã¯ããã®ã¢ã«ã´ãªãºã ã«ãã£ã¦ãã¼ã¿ã®æ´åæ§ã確ä¿ããããã¨ã確èªããããJWT ãå ¥ãåã«ããæãå å´ã«ãã JWT ã«ç½²åãä»ãããã¨ã§ããã¼ã¿ã®æ´åæ§ã確ä¿ããå¿ è¦ãããã¾ãã
å ¥ãåã«ããã JWT ã¯ãä»æ§å ã§æ示çã«ãµãã¼ã対象ã¨ãã¦å®ç¾©ããã¦ãã¾ããä¸è¬çã§ã¯ãªããã®ã®ãä»ã®ã·ããªãªã§ä½¿ç¨ãããã±ã¼ã¹ããããåãã JWT ã使ç¨ãããµã¼ã ãã¼ã㣠ã·ã¹ãã ãéãã¦ã第ä¸è ãçºè¡ãããã¼ã¯ã³ãä¼éããå ´åãªã©ãèãããã¾ã
ããããã·ããªãªã§ã¯ãå ¥ãåã«ããã JWT ã®æ¤è¨¼ã«é¢ãããã¹ãå¤ãçºçãã¾ãã確å®ã«ãã¼ã¿ã®æ´åæ§ãç¶æãããã¼ã¿ãé©åã«å¾©å·ãããããã«ããã«ã¯ãJWT ãæ§æãããã¹ã¦ã®ã¬ã¤ã¤ã¼ã§ããããã¼å ã«å®ç¾©ããã¦ãããã¢ã«ã´ãªãºã ã«é¢é£ãããã¹ã¦ã®æ¤è¨¼ã渡ãå¿ è¦ãããã¾ããã¤ã¾ããå ¥ãåã®ä¸çªå¤å´ã«ãã JWT ã®æ¤è¨¼ã¨å¾©å·ã«æåããã¨ãã¦ããå å´ã® JWT ã®ãã¹ã¦ã§æ¤è¨¼ (ããã³å¾©å·) ãå®è¡ããªããã°ãªãã¾ããããããæ ãã¨ãå ¥ãåã®ä¸çªå¤å´ã«æå·åããã JWT ããããä¸çªå å´ã«ç½²åä»ã JWT ãããå ´åã¯ç¹ã«ãæªæ¤è¨¼ã®ã¾ã¾ã§ãã¼ã¿ã使ç¨ããé¢é£ãããã¾ãã¾ãªã»ãã¥ãªãã£åé¡ãå¼ãèµ·ããã¦ãã¾ãå¯è½æ§ãããã¾ãã
Invalid Curve æ»æ
æ¥åæ²ç·æå·ã¯ãJSON Web Algorithms ã§ãµãã¼ããããå ¬éãã¼ ã¢ã«ã´ãªãºã ã® 1 ã¤ã§ããæ¥åæ²ç·æå·ã¯ãæ°ãä¸å®ä»¥ä¸ã®å¤§ããã«ãªãã¨ç¾å®çãªæéã§çããæ±ããããªããæ¥åæ²ç·ä¸ã®é¢æ£å¯¾æ°åé¡ã¨ããæ°å¦åé¡ã®é£è§£ããå®å ¨æ§ã®æ ¹æ ã¨ããæå·åæ¹å¼ã§ãããã®æ°å¦åé¡ããå ¬éãã¼ãæå·åãããã¡ãã»ã¼ã¸ãå ã®ãã¬ã¼ã³ããã¹ããããç§å¯ãã¼ãå²ãåºãããã®ãé²ãã§ãã¾ããåãã JSON Web Algorithms ã§ãµãã¼ããããå ¬éãã¼ ã¢ã«ã´ãªãºã ã§ãã RSA ã¨æ¯ã¹ã¦ãæ¥åæ²ç·æå·ã¯åã強度ã®æå·ãããçããã¼ã§å®ç¾ã§ãã¾ãã
æå·ã®æ¼ç®ã«å¿ è¦ã¨ãªãæ¥åæ²ç·ã¯ãæéä½ä¸ã§å®ç¾©ããã¾ãã(ãã¹ã¦ã®å®æ°ã§ã¯ãªã) ä¸é£ã®é¢æ£æ°ã«é¢ãã¦æ¼ç®ãè¡ãã¨è¨ãæãããã¨ãå¯è½ã§ããããã¯ãæå·ã®æ¥åæ²ç·ã®æ¼ç®ã«é¢ãããã¹ã¦ã®æ°å¤ãæ´æ°ã§ãããã¨ãæå³ãã¾ãã
æ¥åæ²ç·ã®æ°å¦çæ¼ç®ã®çµæã¯ãã¹ã¦ãæ²ç·ä¸ã®æå¹ãªç¹ã¨ãã¦æ±ãããã¾ããå¥ã®è¨ãæ¹ãããã°ãå®ç¾©ä¸ãæ¥åæ²ç·ã®æ¼ç®çµæã«ç¡å¹ãªç¹ã¯çµ¶å¯¾ã«åå¨ãã¾ããããããç¡å¹ãªç¹ãç®åºãããå ´åã¯ãæ¼ç®ã®å ¥åå¤ã誤ã£ã¦ãããã¨ã«ãªãã¾ããæ¥åæ²ç·æå·ã«é¢ããç®è¡æ¼ç®ã¯ã主ã«ä»¥ä¸ã§æ§æããã¾ãã
- ç¹ã®å ç®: åä¸æ²ç·ä¸ã® 2 ã¤ã®ç¹ãå ç®ãããã¨ã§ãåãæ²ç·ä¸ã® 3 çªç®ã®ç¹ãç®åºãã¾ãã
- ç¹ã® 2 åç®: ããç¹ã«åãç¹ãå ç®ãããã¨ã§ãåä¸æ²ç·ä¸ã®æ°ããªç¹ãç®åºãã¾ãã
- ã¹ã«ã©ã¼åç®: æ²ç·ä¸ã® 1 ã¤ã®ç¹ã«ã¹ã«ã©ã¼å¤ãä¹ç®ãã¾ããããã¯ãããç¹ã«åãç¹ã
åç¹°ãè¿ãã¦å ç®ããã¨å®ç¾©ã§ãã¾ã (k
ã¯ã¹ã«ã©ã¼å¤)ãk
æ¥åæ²ç·æå·ã®æå·å¦çã®æ¼ç®ã«ã¯ãã¹ã¦ãåè¿°ã®ç®è¡æ¼ç®ã使ç¨ããã¾ãããã ããä¸é¨ã®å®è£ æ¹æ³ã§ã¯å ¥åå¤ã®æ¤è¨¼ãè¡ããã¾ãããæ¥åæ²ç·æå·ã§ã¯ãå ¬éãã¼ãæ¥åæ²ç·ä¸ã®ç¹ã表ãã®ã«å¯¾ããç§å¯ãã¼ã¯ã·ã³ãã«ãªæ°å¤ã§ãå°ç¨ã®ãããã¦åºãç¯å²å ããä½æããã¾ããæ¼ç®ã¸ã®å ¥åå¤ãä¸æ£ãªå ´åããã®ç®è¡æ¼ç®ã§ã¯ä¸è¦æå¹ã«è¦ãã¦ãå®ã¯ç¡å¹ãªå¤ãç®åºããããã¨ãããã¾ãã該å½ããæ¼ç®çµæã復å·ãªã©ã®æå·å¦çã®ã³ã³ããã¹ãã§ä½¿ç¨ããã¨ãç§å¯ãã¼ã復å ããã¦ãã¾ãããã¾ããããã®æ»æã¯éå»ã«å®éã«è¡ããããã¨ã®ãããã®ã§ãããããã£ãæ»æ㯠Invalid Curve æ»æã¨å¼ã°ãã¦ãã¾ããå®è£ ã®å®å ¨æ§ãå¼·åããã«ã¯ãå ¬éé¢æ°ã«æ¸¡ããããã¹ã¦ã®å ¥åå¤ã«ã¤ãã¦æå¹æ§ã常ã«ãã§ãã¯ãã¾ããããå ·ä½çã«ã¯ãå ¬éãã¼ããé¸æããæ¥åæ²ç·ä¸ã«ããæå¹ãªç¹ã«ãªã£ã¦ãããã¨ããç§å¯ãã¼ãæå¹ãªå¤ã®ç¯å²å ã§ãããã¨ã確èªãã¾ãã
代æ¿æ»æ
代æ¿æ»æã¨ã¯ãå°ãªãã¨ã 2 種é¡ã®ãã¼ã¯ã³ãæ»æè ãååãããããªæ»æãæãã¾ããæ»æè ã¯åå¾ãããã¼ã¯ã³ã® 1 ã¤ã¾ãã¯ä¸¡æ¹ãæ¬æ¥ã®ç¨éã¨ã¯éãç®çã®ããã«æªç¨ãã¾ãã
代æ¿æ»æã«ã¯ 2 ã¤ã®ã¿ã¤ããããã1 ã¤ã¯åä¸åä¿¡è ã¸ã®æ»æ (ãã©ããã§ã¯ã¯ãã¹ JWT ã¨å¼ãã§ãã)ããã 1 ã¤ã¯ç°ãªãåä¿¡è ã¸ã®æ»æã§ãã
ç°ãªãåä¿¡è
ç°ãªãåä¿¡è ã¸ã®æ»æã§ã¯ãããåä¿¡è ã«å¯¾ãã¦çºè¡ããããã¼ã¯ã³ãå¥ã®åä¿¡è ã«éããã¨ã§æ»æãå¯è½ã«ãªãã¾ããä»®ã«ããµã¼ã ãã¼ãã£ã®ãµã¼ãã¹ã¸ã®ãã¼ã¯ã³ãçºè¡ããèªå¯ãµã¼ãã¼ãããã¨ãã¾ãããããã®èªå¯ãã¼ã¯ã³ã¯ã次ã®ãã¤ãã¼ããå«ãç½²åå ¥ãã® JWT ã§ãã
{ "sub": "joe", "role": "admin" }
ãã®ãã¼ã¯ã³ã API ã«å¯¾ãã¦ä½¿ç¨ãããã¨ã§ãèªè¨¼æ¸ã¿ã¦ã¼ã¶ã¼ã¨ãã¦ãµã¼ãã¹ã«ã¢ã¯ã»ã¹ã§ããããã«ãªãã¾ããããã«ãå°ãªãã¨ããã®ãµã¼ãã¹ã«é¢ããã¦ã¼ã¶ã¼ã®
joe
ã«ç®¡çè
ã¬ãã«ã®ç¹æ¨©ãä¸ãããã¾ãããããããã®ãã¼ã¯ã³ã«ã¯åé¡ãããã¾ããããã¯ãçºè¡è
ã¯ããããçºè¡å
ã¨ãªãåä¿¡è
ãæå®ããã¦ããªãç¹ã§ãããã®ãã¼ã¯ã³ã®çºè¡å¯¾è±¡ã§ããæ¬æ¥ã®åä¿¡è
以å¤ã® API ã§ãæå¹æ§ã®ãã§ãã¯æ¹æ³ã¨ãã¦ç½²åã®ã¿ã使ç¨ããã¦ããå ´åãèãã¦ã¿ã¾ããããåè¿°ã®ä»ã®ãµã¼ãã¹ (API) ã®ãã¼ã¿ãã¼ã¹å
ã«ã joe
ã¨ããã¦ã¼ã¶ã¼ãããã¨ãã¾ãããã®å ´åããã®ãµã¼ãã¹ã«å
ã»ã©ã®ãã¼ã¯ã³ãéä¿¡ããã°ãæ»æè
ã¯å³åº§ã«ç®¡çè
ç¹æ¨©ãå
¥æã§ãã¦ãã¾ãã®ã§ãããã®ãããªæ»æãé²ãã«ã¯ããµã¼ãã¹ãã¨ã«åºæã®ãã¼ãã·ã¼ã¯ã¬ããã使ç¨ããããå ·ä½çãªã¯ã¬ã¼ã ãæå®ãã¦ãã¼ã¯ã³ã®æ¤è¨¼ãè¡ãå¿ è¦ãããã¾ãããã¨ãã°ããã¼ã¯ã³å ã«
aud
ã¯ã¬ã¼ã ã追å ãã対象è
ãæå®ããã®ãä¸æ¡ã§ãããããã¦ããã°ããã¨ãç½²åãæå¹ã§ããåãã·ã¼ã¯ã¬ãããç½²åãã¼ãå
±æããä»ã®ãµã¼ãã¹ã§ãã¼ã¯ã³ã使ãåããã¨ã¯ã§ããªããªãã¾ããåä¸ã®åä¿¡è (ã¯ãã¹ JWT)
ãã®æ»æã¯åè¿°ã®æ»æã¨ä¼¼ã¦ãã¾ãããä»åº¦ã¯ç°ãªãåä¿¡è åãã«çºè¡ããããã¼ã¯ã³ã§ã¯ãªããåãåä¿¡è åãã®ãã¼ã¯ã³ãå©ç¨ãã¾ããåã®ä¾ã¨éãã®ã¯ãæ¬æ¥ã®çºè¡å¯¾è±¡ã¨ã¯ç°ãªã (åä¸ç¤¾å ã¾ãã¯åä¸ãµã¼ãã¹ ãããã¤ãã¼å ã®) ãµã¼ãã¹ã«å¯¾ãã¦æ»æè ããã¼ã¯ã³ãéãç¹ã§ãã
次ã®ãããªãã¤ãã¼ãã®ãã¼ã¯ã³ãããã¨èãã¦ãã ããã
{ "sub": "joe", "perms": "write", "aud": "cool-company/user-database", "iss": "cool-company" }
åã®ä¾ã¨æ¯ã¹ãã¨ãã¯ããã«ã»ãã¥ã¢ãªãã¼ã¯ã³ã§ãçºè¡è (
iss
) ã¯ã¬ã¼ã ã対象è
(aud
) ã¯ã¬ã¼ã ãã¢ã¯ã»ã¹è¨±å¯ (perm
) ã¯ã¬ã¼ã ãå«ã¾ãã¦ãã¾ãããã®ãã¼ã¯ã³ã®çºè¡å¯¾è±¡ã§ãã API ã¯ããã¨ããã¼ã¯ã³ã®ç½²åãæå¹ã§ããæå®ããããã¹ã¦ã®ã¯ã¬ã¼ã ããã§ãã¯ãã¾ãããã®ãããæ»æè
ãã©ãã«ããã¦åãç§å¯ãã¼ã¾ãã¯ã·ã¼ã¯ã¬ããã§ç½²åããããã¼ã¯ã³ãæã«å
¥ãã¦ãããã®ãã¼ã¯ã³ã使ç¨ããæ¬æ¥ã®çºè¡å¯¾è±¡ä»¥å¤ã®ãµã¼ãã¹ãæä½ãããã¨ã¯ã§ãã¾ããããããã対象è ã®
cool-company
ãä»ã®ãããªã㯠ãµã¼ãã¹ãæä¾ãã¦ããã¨ãã¾ãããã® 1 ã¤ã« cool-company/item-database
ãµã¼ãã¹ãããããã¼ã¯ã³ã®ç½²åã«å ãã¦ãã¯ã¬ã¼ã ããã§ãã¯ããããã«æè¿ã¢ããã°ã¬ã¼ããããã°ããã ã¨ãã¾ããããã¨ãããããã®ã¢ããã°ã¬ã¼ãã®æä¸ã«ãæ¤è¨¼å¯¾è±¡ã®ã¯ã¬ã¼ã ãé¸æããæ
å½ãã¼ã ã aud
ã¯ã¬ã¼ã ã®æ¤è¨¼æ¹æ³ã®å¤æã誤ã£ã¦ãã¾ãã¾ãããå®å
¨ä¸è´ã§ãã§ãã¯ãã¹ãã¨ããããcool-company
ã¨ããæååãå«ãé¨åä¸è´ã§æ¤è¨¼ããããæå®ããã®ã§ãããã®çµæãcool-company/user-database
ã¨ããå¥ã® (æ¶ç©ºã®) ãµã¼ãã¹åãã®ãã¼ã¯ã³ã§ããåè¿°ã®ãã§ãã¯è¦ä»¶ãæºãããããã«ãªãã¾ããã¤ã¾ããæ»æè
ã user-database
ãµã¼ãã¹åãã®ãã¼ã¯ã³ã使ç¨ãã¦ãitem-database ãµã¼ãã¹ã«ã¢ã¯ã»ã¹ã§ããããã«ãªã£ã¦ãã¾ãã¾ããããã®ããæ»æè
ã¯ãæ¬å½ã¯ user-database
ã«å¯¾ããæ¸ãè¾¼ã¿ã¢ã¯ã»ã¹è¨±å¯ããæã£ã¦ããªãã®ã«ãitem-database
ãµã¼ãã¹ã¸ã®æ¸ãè¾¼ã¿ã¢ã¯ã»ã¹è¨±å¯ãå¾ãããã®ã§ãã軽æ¸çã¨ãã¹ã ãã©ã¯ãã£ã¹
ãã¦ãããã¾ã§ã¯ JWT ã使ç¨ããä¸è¬çãªæ»ææ¹æ³ã«ã¤ãã¦è¦ã¦ãã¾ããããç¶ãã¦ã¯å種ã®ææ°ãã¹ã ãã©ã¯ãã£ã¹ãç´¹ä»ãã¦ããã¾ããããããã¾ã§æããæ»æã¯ãã¹ã¦ã以éã®æ¨å¥¨äºé ã«å¾ã£ã¦é²æ¢ã§ãã¾ãã
常ã«ã¢ã«ã´ãªãºã ã®æ¤è¨¼ãå®è¡ãã
"alg": "none"
æ»æãããã³ RS256 å
¬éãã¼ã HS256 ã·ã¼ã¯ã¬ããã¨ãã¦ä½¿ç¨ããæ»æã¯ããã®è»½æ¸çã«ãã£ã¦é²æ¢ã§ãã¾ããæ»æè
ã«ç¿»å¼ãããªãããã«ããããã«ã¯ãJWT ã®æ¤è¨¼ãè¡ããã³ã«ãæ¯åæ示çã«ã¢ã«ã´ãªãºã ãé¸æããå¿
è¦ãããã¾ããå¾æ¥ãå¤ãã®ã©ã¤ãã©ãªã§ã¯ããããã¼å
ã® alg
ã¯ã¬ã¼ã ãåç
§ãããã¨ã§æ¤è¨¼ç¨ã®ã¢ã«ã´ãªãºã ãé¸æãã¦ãã¾ãããåè¿°ã®ãããªæ»æãä¸è¬çã«è¦ãããããã«ãªã£ã¦ä»¥æ¥ããããã¼å
ã®è¨è¼ã«ããããããå°ãªãã¨ãé¸æããæ¤è¨¼ç¨ã¢ã«ã´ãªãºã ãæ示çã«æå®ã§ããããã«åã©ã¤ãã©ãªãåãæ¿ãã£ã¦ãã¾ããããããä¸é¨ã®ã©ã¤ãã©ãªã§ã¯ä¾ç¶ã¨ãã¦ãããã¼å
ã®ä»»æã®æå®ã使ç¨ã§ããããã«ãªã£ã¦ããããã常ã«æ示çã«é¸æããã¢ã«ã´ãªãºã ã使ç¨ãããããéçºè
ã注æããå¿
è¦ãããã¾ããé©åãªã¢ã«ã´ãªãºã ã使ç¨ãã
JSON Web Algorithms ä»æ§ã§ã¯ä¸é£ã®æ¨å¥¨ã¢ã«ã´ãªãºã ãå¿ é ã¢ã«ã´ãªãºã ãå®ç¾©ããã¦ãã¾ãããç¹å®ã®ã·ããªãªã«æé©ãªãã®ãé¸æããã®ã¯ãã¯ãã¦ã¼ã¶ã¼ã®è²¬ä»»ã§ãããã¨ãã°ãã¦ã¼ã¶ã¼ã®ãã©ã¦ã¶ã¼ã§ä½¿ç¨ããåä¸ãµã¼ãã¼ã«ããã·ã³ã°ã«ãã¼ã¸ Web ã¢ããªã±ã¼ã·ã§ã³ã®å°è¦æ¨¡ãã¼ã¯ã³ã§ããã°ãHMAC ç½²åä»ãã® JWT ã§ååæ ¼ç´ã§ããããããã¾ãããå対ã«ãID ãã§ãã¬ã¼ã·ã§ã³ã®å®è£ ã·ããªãªã§ãå ±æã·ã¼ã¯ã¬ãã ã¢ã«ã´ãªãºã ãé©ç¨ããå ´åã«ã¯ãããã¦ä¸é½åã§ãããã
å¥ã®èãæ¹ã¨ãã¦ã対象ã®æ¤è¨¼ã¢ã«ã´ãªãºã ãã¢ããªã±ã¼ã·ã§ã³ã«ã¨ã£ã¦è¨±å®¹ã§ãããã®ã§ãªãéãããã¹ã¦ã® JWT ã¯ç¡å¹ã§ããã¨è¨ããã¨ãã§ãã¾ããè¨ãæãããªãããã¼ã¯ã³ã®æ¤è¨¼ãå®è¡ããããã«ãã¼ã¨å¿ è¦ãªæ段ãæãã¦ããã¨ãã¦ããæ¤è¨¼ã¢ã«ã´ãªãºã ãç®çã®ã¢ããªã±ã¼ã·ã§ã³ã«é©åãªãã®ã§ãªããã°ãæ¤è¨¼ã¯ç¡å¹ã ã¨è¨ããããå¾ã¾ããããã®ãã¨ã¯ãå ã»ã©è¿°ã¹ãã常ã«ã¢ã«ã´ãªãºã ã®æ¤è¨¼ãå®è¡ãããã¨ããæ¨å¥¨äºé ã«ãéãã¦ãã¾ãã
常ã«ãã¹ã¦ã®æ¤è¨¼ãå®è¡ãã
è¤æ°ã®ãã¼ã¯ã³ãå ¥ãåã«ãã¦ããå ´åã¯ãåãã¼ã¯ã³ã®ãããã¼ã§å®£è¨ãããæ¤è¨¼ã¹ããããå¿ ããã¹ã¦å®è¡ããå¿ è¦ãããã¾ããããã«è¨ããªããä¸çªå¤å´ã®ãã¼ã¯ã³ã«ã¤ãã¦æ¤è¨¼ã復å·ãè¡ããå å´ã®ãã¼ã¯ã³ã®æ¤è¨¼ãçç¥ããã®ã§ã¯ä¸ååã§ããå ¥ãåã®å å´ã«ããã®ãç½²åä»ã JWT ã ãã ã¨ãã¦ãããã¹ã¦ã®ç½²åãæ¤è¨¼ããªãã¦ã¯ãªãã¾ãããããã¯ãJWT ã使ç¨ããå¤é¨ã®çµç¹ã§çºè¡ãããä»ã® JWT ãä¼éããã¢ããªã±ã¼ã·ã§ã³ã§ããè¦ããããã¹ã§ãã
常ã«æå·å¦çã®å ¥åå¤ãæ¤è¨¼ãã
åæ»æã«é¢ããã»ã¯ã·ã§ã³ã§æ¢ã«ç¤ºããã¨ãããæå·é¢é£ã®ä¸é¨ã®æ¼ç®ã§ã¯ããã®æå·ã®ä»æ§ããå¤ããå ¥åå¤ã®å¦çæ¹æ³ãé©åã«å®ç¾©ããã¦ããªããã¨ãããã¾ããããããç¡å¹ãªå ¥åå¤ãæªç¨ãããã°ãäºæãã¬æ¼ç®çµæãç®åºãããããæ©å¯æ å ±ãæãåãããããã¦ãæ·±å»ãªæ å ±ä¾µå®³ (ç§å¯ãã¼ãæ»æè ã®æã«æ¸¡ããã¨) ã«ã¤ãªããããã¾ããã
åè¿°ã®ä¾ã§æããæ¥åæ²ç·æå·ã®å ´åãªããå ¬éãã¼ã使ç¨ããåã«å¿ ããã¼ã®æå¹æ§ãã©ã¤ãã©ãªã§æ¤è¨¼ (ã¤ã¾ããé¸æãããæ²ç·ä¸ã®æå¹ãªç¹ã表ãã¦ãããã¨ã確èª) ãã¾ãããããã®ç¨®ã®ãã§ãã¯ã¯é常ãåºç¤ã¨ãªãæå·åã©ã¤ãã©ãªã«ãã£ã¦å¦çããã¾ããéçºè ã¯ãé¸æããã©ã¤ãã©ãªã§ããããæ¤è¨¼ãå®è¡ããããã¨ã確èªããããæ¤è¨¼ã®å®è¡ã«å¿ è¦ãªã³ã¼ããã¢ããªã±ã¼ã·ã§ã³ ã¬ãã«ã§è¿½å ããå¿ è¦ãããã¾ãããããæ ãã¨ãç§å¯ãã¼ã®æµåºã«ã¤ãªããããã¾ããã
å¼·åãªãã¼ãé¸æãã
ããã¯ãã¹ã¦ã®æå·åãã¼ã«å½ã¦ã¯ã¾ãæ¨å¥¨äºé ã§ããããã¾ã ã«ç¡è¦ããã¦ããå ´é¢ãå¤ãã®ãç¾ç¶ã§ããæ¢ã«ç¤ºããããã«ãHMAC ã®å ±æã·ã¼ã¯ã¬ããã®é·ãã«é¢ããæå°è¦ä»¶ã¯è¦éãããã¦ãããã¨ãå°ãªãããã¾ããããã ããå ±æã·ã¼ã¯ã¬ããã¯é·ãã®è¦ä»¶ãæºããã ãã§ã¯ä¸ååã§ãå®å ¨ã«ã©ã³ãã ã§ããå¿ è¦ãããã¾ããã©ã³ãã æ§ (ããªãã¡ãã¨ã³ãããã¼ã) ãååã§ãªãé·ããã¼ã¯ãä¾ç¶ã¨ãã¦ãã«ã¼ã ãã©ã¼ã¹æ»æã«å¼±ãããã¼ãæ¨æ¸¬ãããããããããã¾ããããã確å®ã«é¿ããããã«ããã¼çæã©ã¤ãã©ãªã§ã¯ãåæåæã«é©åã«ã·ã¼ããããæå·è«çæ¬ä¼¼ä¹±æ°çæå¨ (PRNG) ã使ç¨ããããã«ãã¾ãããã¼ãã¦ã§ã¢ä¹±æ°çæå¨ã使ç¨ãã¦ããã°ããã§ãããã
ãã®æ¨å¥¨äºé ã¯ãå ±æãã¼ ã¢ã«ã´ãªãºã ã¨å ¬éãã¼ ã¢ã«ã´ãªãºã ã®ä¸¡æ¹ã«å½ã¦ã¯ã¾ãã¾ããããã«ãå ±æãã¼ ã¢ã«ã´ãªãºã ã®å ´åã人ãèªãã§æå³ãæããããªãã¹ã¯ã¼ãã¯é©åã¨ã¯è¦ãªããããè¾æ¸æ»æã«å¯¾ãã¦å¼±ãã¨ããç¹å¾´ãããã¾ãã
ãã¹ã¦ã®ã¯ã¬ã¼ã ãæ®ããæ¤è¨¼ãã
ããã§ç´¹ä»ããæ»æã®ä¸é¨ã¯ãæ¤è¨¼ã®åææ¡ä»¶ã®èª¤ããæªç¨ãããã®ã§ããå ·ä½çãªåé¡ç¹ã¯ãç½²åã®æ¤è¨¼ã復å·ãæ¤è¨¼ã®å¯ä¸ã®æ段ã¨ãã¦ããã¨ããã«ããã¾ããä¸é¨ã®æ»æè ã¯æ£ããç½²åã¾ãã¯æå·åããããã¼ã¯ã³ãæã«å ¥ããé常ã¯ãããæ³å®å¤ã®ã³ã³ããã¹ãã§ç¨ãããã¨ã«ããããã¼ã¯ã³ãæªæããç®çã«å©ç¨ãã¾ããããããæ»æãé²ãããã®æåçã¯ãç½²åã¨ã³ã³ãã³ãã®ä¸¡æ¹ãæå¹ã§ããå ´åã«ã®ã¿ããã¼ã¯ã³ãæå¹ã§ããã¨è¦ãªããã¨ã§ãããã®ãããsub (ã¦ã¼ã¶ã¼ã®èå¥å)ã
exp
(æå¹æé)ãiat
(çºè¡æé)ãaud
(対象è
)ãiss
(çºè¡è
)ãnbf
(æå¹ã«ãªãæ¥æ) ã¨ãã£ãã¯ã¬ã¼ã ãç¹ã«éè¦ãªæå³ãæã¡ãæå®ããã¦ããå ´åã¯å¸¸ã«æ¤è¨¼ãè¡ããªãã¦ã¯ãªãã¾ããããã¼ã¯ã³ãä½æããéã¯ãç°ãªãã³ã³ããã¹ãã§å©ç¨ããããã¨ããªããããååãªæ°ã®ã¯ã¬ã¼ã ã追å ãã¦ããããã«ãã¾ããããä¸è¬çã«ã¯ãsub
ãiss
ãaud
ãexp
ã®åã¯ã¬ã¼ã ã¯å¸¸ã«å½¹ã«ç«ã¤ããããã¼ã¯ã³ã«å«ãã¦ãããã¨ããå§ããã¾ããtyp
ã¯ã¬ã¼ã ã使ç¨ãã¦ãã¼ã¯ã³ã®ã¿ã¤ããåºå¥ãã
typ
ã»ã¨ãã©ã®å ´åã
typ
ã¯ã¬ã¼ã 㯠1 ã¤ã®å¤ (JWT) ããã¨ãã¾ããããã¢ããªã±ã¼ã·ã§ã³ã«åºæã®å種 JWT ãåºå¥ããããã«ããã®ã¯ã¬ã¼ã ã使ç¨ãããã¨ãã§ãã¾ãããã®æ¹æ³ã¯ãå¤ãã®ç¨®é¡ã®ãã¼ã¯ã³ãã·ã¹ãã ã§å¦çããªããã°ãªããªãå ´åã«å½¹ç«ã¡ã¾ãããã®ã¯ã¬ã¼ã ã«ãã£ã¦è¿½å ã®ã¯ã¬ã¼ã ãã§ãã¯ãè¡ããã¨ã§ãç°ãªãã³ã³ããã¹ãã§ã®ãã¼ã¯ã³ã®èª¤ç¨ãé²ãå¹æãããã¾ããJWS æ¨æºã«ã¯ãtyp
ã¯ã¬ã¼ã ã§ã¢ããªã±ã¼ã·ã§ã³åºæã®å¤ãæå®ã§ãããã¨ãæ示ããã¦ãã¾ãããã¼ã¯ã³ãã¨ã«ç°ãªãæ¤è¨¼ã«ã¼ã«ã使ç¨ãã
ããã¯ãããã¾ã§åæãã¦ãããã¹ã ãã©ã¯ãã£ã¹ã®å¤ããç·æ¬ãããã®ã§ãããã¾ãã¾ãªæ»æãé²ãã«ã¯ãçºè¡æ¸ã¿ã®ãã¹ã¦ã®ãã¼ã¯ã³ã«ãããã¦æå¿«ãã¤å ·ä½çãªæ¤è¨¼ã«ã¼ã«ã使ç¨ãã¦ãããã¨ãç¹ã«éè¦ã«ãªãã¾ããããã«ã¯ãtyp ã¯ã¬ã¼ã ãé©å®ä½¿ç¨ãããã¨ãã
iss
ã aud
ã¨ãã£ãå種ã¯ã¬ã¼ã ãæ®ããæ¤è¨¼ãããã¨ã大åã§ãããããã¨åæã«ãç°ãªããã¼ã¯ã³éã§ã¯ã§ããã ããã¼ã使ãåããªãããã«ããããç°ãªãã«ã¹ã¿ã ã¯ã¬ã¼ã ã¾ãã¯ã¯ã¬ã¼ã å½¢å¼ã使ç¨ãããããªããã°ãªãã¾ããããããããã¨ã§ãåä¸ã®ç®çã§ä½¿ç¨ããããã®ãã¼ã¯ã³ãè¦ä»¶ã®ãããã¦ããä¼¼ãå¥ã®ãã¼ã¯ã³ã§ä»£æ¿ã§ããªãããã«ãªãã¾ããã¤ã¾ãããããã種é¡ã®ãã¼ã¯ã³ã«åãç§å¯ãã¼ã使ç¨ãã¦ç½²åããã®ã§ã¯ãªããã¢ã¼ããã¯ãã£ã®ãµãã·ã¹ãã ãã¨ã«å¥ã®ç§å¯ãã¼ã使ç¨ããããã«ãã¾ããããã¾ããæå®ã®å é¨æ¸å¼ãæå®ãããã¨ã§ãã¯ã¬ã¼ã ãããå ·ä½çã«ãããã¨ãå¯è½ã§ãããã¨ãã°ã
iss
ã¯ã¬ã¼ã ã®å ´åãªããçºè¡è
ã¨ãã¦ä¼ç¤¾åãæå®ãã代ããã«ããã®ãã¼ã¯ã³ãçºè¡ãããµãã·ã¹ãã ã® URL ãæå®ãããã¨ã§ããã¼ã¯ã³ã®åå©ç¨ãé£ãããããã¨ãã§ãã¾ããè£è¶³ï¼å°é家㫠JWT å®è£ ãå§ä»»ãã
JWT 㯠OAuth2 ãã¬ã¼ã ã¯ã¼ã¯ä¸ã«åå¨ããã¢ã¤ãã³ãã£ãã£ã¬ã¤ã¤ã¼ã§ãããOpenID Connect ã¹ã¿ã³ãã¼ã ã«ã¯ä¸å¯æ¬ ãªè¦ç´ ã§ããAuth0 㯠OpenID Connect ã«èªå®ãããã¢ã¤ãã³ãã£ãã£ãã©ãããã©ã¼ã ã§ããããã¯ããããªãã Auth0 ãé¸ãã å ´åãåæ§ã«ä»æ§ã«æºæ ãããµã¼ããã¼ãã£ã·ã¹ãã 㨠100% ç¸äºéç¨å¯è½ã§ãããã¨ãæå³ãã¾ãã
OpenID Connect ã®ä»æ§ã¯ãID ãã¼ã¯ã³ã« JWT ãã©ã¼ãããã使ç¨ãããã¨æ±ãã¦ãã¾ããID ãã¼ã¯ã³ã«ã¯ãã¯ã¬ã¼ã å½¢å¼ã§è¡¨ãããã¦ã¼ã¶ã¼ãã¼ã ããã¹ã¯ã¼ãã®ãããªã¦ã¼ã¶ã¼ãããã¡ã¤ã«æ å ±ãå«ã¾ãã¾ãããããã®ã¯ã¬ã¼ã ã¯ã¦ã¼ã¶ã¼ã«é¢ããã¹ãã¼ãã¡ã³ãã§ããããã¼ã¯ã³ä¿æè ãç½²åãæ¤è¨¼ã§ããå ´åãä¿¡ç¨ããããã®ã¨ãã¦æ±ããã¾ãã
OAuth2 ã®ä»æ§ã§ã¯ãã¦ã¼ã¶ã¼ã®ä»£çã§ã¢ããªã±ã¼ã·ã§ã³ã« API ã¸ã®ã¢ã¯ã»ã¹ã許å¯ããããã«ä½¿ç¨ãããã¢ã¯ã»ã¹ãã¼ã¯ã³ã®ãã©ã¼ãããã¯æå®ããã¦ãã¾ãããæ¥çã¯ã¢ã¯ã»ã¹ãã¼ã¯ã³ã«å¯¾ãã JWT ã®ä½¿ç¨ãåºãåãå ¥ãã¦ãã¾ãã
éçºè ã¨ãã¦ããµã¼ãã¹å ã§èªè¨¼é¢é£ã® JWT ã®ç´æ¥æ¤è¨¼ã解èªãå¿é ãã¹ãã§ã¯ããã¾ãããAuth0 ãæä¾ãã¦ããã¢ãã³ãª SDKs ã使ç¨ãããã¨ã§ãJWT ã®é©åãªå®è£ ã¨ä½¿ç¨ãè¡ããã¨ãã§ãã¾ããJWT ã¯ææ°ã®ãã¹ããã©ã¯ãã£ã¹ã«å¾ã£ã¦ãããæ¢ç¥ã®ã»ãã¥ãªãã£ãªã¹ã¯ã«å¯¾å¦ããããã«å®æçã«æ´æ°ããã¦ãã¾ãã
ä¾ãã°ãã·ã³ã°ã«ãã¼ã¸ã¢ããªã±ã¼ã·ã§ã³ã® Auth0 SDK ã¯ã ID ãã¼ã¯ã³ããã¦ã¼ã¶ã¼æ
å ±ãæ½åºããæ¹æ³
ãæä¾ãã¦ãã¾ããauth0.getUser
Auth0 ãã©ãããã©ã¼ã ã試ãã¦ã¿ããå ´åã¯ãããªã¼ã¢ã«ã¦ã³ãã«ãµã¤ã³ã¢ãããã¦æ©éå§ãã¦ã¿ã¾ãããï¼ããªã¼ã¢ã«ã¦ã³ãã§ã¯ã以ä¸ã®æ©è½ãã使ãããã ãã¾ãï¼
- Web, iOS & Android åãã¦ããã¼ãµã«ãã°ã¤ã³
- Twitter ã Facebook çã½ã¼ã·ã£ã«ã¢ã¤ãã³ãã£ãã£ãããã¤ãã¼ï¼ä¸é 2 ã¤ã¾ã§ï¼
- ã¢ã³ãªããããã®ãµã¼ãã¼ã¬ã¹ã«ã¼ã«ãº
JTW ããã®å é¨æ§é ãJWT ã§ä½¿ç¨å¯è½ãªã¢ã«ã´ãªãºã ã®ç¨®é¡ããã®ä»ä¸è¬çãªä½¿ãæ¹ãªã©ã«é¢ãã¦ãã詳細ãç¥ãããå ´åã¯ã JWT ãã³ãããã¯ãã覧ãã ããã
ã¾ã¨ã
JSON Web Token ã¯æå·ãæ´»ç¨ãããã¼ã«ã§ããå種ã®ãã¾ãã¾ãªãã¼ã«ãç¹ã«æ©å¯æ å ±ãæ±ããã®ã¨åãããJWT ã®ä½¿ç¨ã«ã¯æ³¨æãè¦ãã¾ããä¸è¦ããã¨ã·ã³ãã«ãªãããå ±æã·ã¼ã¯ã¬ãããå ¬éãã¼ã®ã¢ã«ã´ãªãºã ãæ£ããé¸æãããããã° JWT ãç°¡åã«ä½¿ç¨ã§ããã¨æã£ã¦ããéçºè ã®æ¹ãããã£ãããããããã¾ãããæ®å¿µãªãããä»åã説æããããã«ãããããèªèã¯æ£ããããã¾ããããã¼ã«ããã¯ã¹å ã®ãã¼ã«ã使ç¨ããããã§ä½ãããéè¦ãªã®ã¯ãããããã®ãã¹ã ãã©ã¯ãã£ã¹ã«å¾ããã¨ã§ãããJWT ãä¾å¤ã§ã¯ãªãã®ã§ããJWT ã®å ´åãå®ç¸¾ããé«å質ãªã©ã¤ãã©ãªã®é¸æããã¤ãã¼ãããã³ãããã¼ã®ã¯ã¬ã¼ã ã®æ¤è¨¼ãé©åãªã¢ã«ã´ãªãºã ã®é¸æã®ã»ããå¼·åãªãã¼ã®çæãå API ã®ç´°é¨ã«å¯¾ãã注æãªã©ãå¿ è¦ã«ãªãã¾ããããã ãã®ãã¹ã ãã©ã¯ãã£ã¹ã«å¯¾å¿ããã®ã¯è·ãéãããã¨æãããå ´åã¯ãä¸é¨ä½æ¥ãå¤é¨ãããã¤ãã¼ã«å§è¨ããã®ãä¸æ¡ã§ãããã®éã«ã¯ãã² Auth0 ã®å©ç¨ããæ¤è¨ãã ãããå¤é¨ã«å§è¨ã§ããªãå ´åã¯ããã®è¨äºã§æããæ¨å¥¨äºé ã«ã¤ãã¦å ¥å¿µã«æ¤è¨ãã¾ããããããã¦ãæå·åã®æ¹æ³ã¯æ±ºãã¦èªä½ããããã¹ããéããå®ç¸¾ããã³ã¼ããå©ç¨ããããã«ãã¦ãã ããã
âJWT ã¯ä¸è¦ã·ã³ãã«ã§ãããæ²¹æãã¦ã¯ããã¾ãããJWT ã使ç¨ããã¨ãã«ã¯ãååã«æ³¨æãæããææ°ã®ãã¹ã ãã©ã¯ãã£ã¹ã«å¾ãã¾ãããâ
Tweet This
About the author
Sebastian Peyrott
Senior Engineer