01 JWT¼ò½é
JWTÈ«³ÆÎªJSON Web Token,½«json¹¤¾ß×÷ÎªÔØÌåÀ´´«ÊäÐÅÏ¢£¬£¬£¬£¬£¬£¬£¬Ò»Ñùƽ³£±»ÓÃÔÚÉí·ÝÌṩÕߺͷþÎñÌṩÕß¼äת´ï±»ÈÏÖ¤µÄÓû§Éí·ÝÐÅÏ¢£¬£¬£¬£¬£¬£¬£¬ÒÔ±ãÓÚ´Ó×ÊÔ´·þÎñÆ÷»ñÈ¡×ÊÔ´£¬£¬£¬£¬£¬£¬£¬Ò²¿ÉÒÔÔöÌíÒ»Ð©ÌØÁíÍâÓªÒµÂß¼Ëù±ØÐèÉùÃ÷ÐÅÏ¢£¬£¬£¬£¬£¬£¬£¬¸Ãtoken¿É±»Ö±½ÓÓÃÓÚÈÏÖ¤£¬£¬£¬£¬£¬£¬£¬Ò²¿ÉÓÃ×÷¼ÓÃÜ¡£¡£¡£¡£¡£

JSON WebÁîÅÆ£¨JWT£©ÊÇÒ»ÖÖ±ê×¼»¯µÄÃûÌ㬣¬£¬£¬£¬£¬£¬ÓÃÓÚÔÚϵͳ֮¼ä·¢Ë;ÓɼÓÃÜÊðÃûµÄJSONÊý¾Ý¡£¡£¡£¡£¡£ÀíÂÛÉÏJWT¿ÉÒÔ°üÀ¨ÈκÎÀàÐ͵ÄÊý¾Ý£¬£¬£¬£¬£¬£¬£¬µ«×î³£ÓÃÓÚ¾ÙÐÐÉí·ÝÈÏÖ¤¡¢»á»°´¦Öóͷ£ºÍ»á¼û¿ØÖÆ¡£¡£¡£¡£¡£Óë¹Å°åµÄ»á»°ÁîÅÆ²î±ð£¬£¬£¬£¬£¬£¬£¬·þÎñÆ÷ÐèÒªµÄËùÓÐÊý¾Ý¶¼´æ´¢ÔÚJWT×Ô¼ºµÄ¿Í»§¶Ë¡£¡£¡£¡£¡£ÕâʹµÃJWT³ÉΪ¸ß¶ÈÂþÑÜÊ½ÍøÕ¾µÄÈÈÃÅÑ¡Ôñ£¬£¬£¬£¬£¬£¬£¬ÔÚÕâÐ©ÍøÕ¾ÖУ¬£¬£¬£¬£¬£¬£¬Óû§ÐèÒªÓë¶à¸öºó¶Ë·þÎñÆ÷¾ÙÐÐÎÞ·ì½»»¥¡£¡£¡£¡£¡£
1.1 JWTÃûÌÃ
JWTÓÉ3²¿·Ö×é³É£ºÍ·²¿¡¢ÔغɺÍÊðÃû¡£¡£¡£¡£¡£ÕâЩ²¿·ÖÖ®¼äÓõãºÅÀë¸ô£¬£¬£¬£¬£¬£¬£¬ÈçÏÂËùʾ£º
eyJraWQiOiI5MTM2ZGRiMy1jYjBhLTRhMTktYTA3ZS1lYWRmNWE0NGM4YjUiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJwb3J0c3dpZ2dlciIsImV4cCI6MTY0ODAzNzE2NCwibmFtZSI6IkNhcmxvcyBNb250b3lhIiwic3ViIjoiY2FybG9zIiwicm9sZSI6ImJsb2dfYXV0aG9yIiwiZW1haWwiOiJjYXJsb3NAY2FybG9zLW1vbnRveWEubmV0IiwiaWF0IjoxNTE2MjM5MDIyfQ.SYZBPIBg2CRjXAJ8vCER0LA_ENjII1JakvNQoP-Hw6GG1zfl4JyngsZReIfqRvIAEi5L4HV0q7_9qGhQZvy9ZdxEJbwTxRs_6Lb-fZTDpW6lKYNdMyjw45_alSCZ1fypsMWz_2mTpQzil0lOtps5Ei_z7mM7M8gCwe_AGpI53JxduQOaB5HkT5gVrv9cKu9CsW5MS6ZbqYXpGyOG5ehoxqm8DL5tFYaW3lB50ELxi0KsuTKEbD0t5BCl0aCR2MBJWAbN-xeLwEenaqBiwPVvKixYleeDQiBEIylFdNNIMviKRgXiYuAvMziVPbwSgkZVHeEdF5MQP1Oe2Spac-6IfA
JWTµÄÍ·²¿ºÍÔØºÉ²¿·Ö×Åʵ¾ÍÊÇÓÃbase64url±àÂëµÄJSON¹¤¾ß¡£¡£¡£¡£¡£ÆäÖÐÍ·²¿°üÀ¨¹ØÓÚÁîÅÆ×Ô¼ºµÄÔªÊý¾Ý£¬£¬£¬£¬£¬£¬£¬¶øÔغɰüÀ¨¹ØÓÚÓû§µÄÏÖʵ¡°ÉùÃ÷¡±¡£¡£¡£¡£¡£¿£¿£¿£¿£¿ÉÒÔ¶ÔÉÏÊöÁîÅÆµÄÔØºÉ¾ÙÐнâÂ룬£¬£¬£¬£¬£¬£¬Ð§¹ûÈçÏ£º
{
"iss": "portswigger",
"exp": 1648037164,
"name": "Carlos Montoya",
"sub": "carlos",
"role": "blog_author",
"email": "carlos@carlos-montoya.net",
"iat": 1516239022
}
´ó´ó¶¼ÇéÐÎÏ£¬£¬£¬£¬£¬£¬£¬ÈκÎÓÐȨ»á¼ûÁîÅÆµÄÈ˶¼¿ÉÒÔÇáËɵضÁÈ¡»òÐÞ¸ÄÕâЩÊý¾Ý¡£¡£¡£¡£¡£Òò´ËÈκλùÓÚJWT»úÖÆµÄÇå¾²ÐÔ¶¼ÑÏÖØÒÀÀµÓÚÃÜÂëÊðÃû¡£¡£¡£¡£¡£
1.2 JWTÊðÃû
½ÒÏþÁîÅÆµÄ·þÎñÆ÷ͨ³£Í¨¹ý¶ÔÍ·²¿ºÍÔØºÉÅÌËã¹þÏ£ÖµÀ´ÌìÉúÊðÃû¡£¡£¡£¡£¡£ÓÐʱ»á¶Ô±¬·¢µÄ¹þÏ£Öµ¾ÙÐмÓÃÜ´¦Öóͷ£¡£¡£¡£¡£¡£¿ÉÊÇÎÞÂÛÄÄÖÖ·½·¨£¬£¬£¬£¬£¬£¬£¬Õâ¸öÀú³Ì¶¼Éæ¼°Ò»¸öÉñÒþÃØÔ¿¡£¡£¡£¡£¡£ÈôÊÇÃÜԿδ֪£¬£¬£¬£¬£¬£¬£¬¾ÍÎÞ·¨Îª¸ø¶¨µÄÍ·²¿ºÍÔØºÉÌìÉúÓÐÓõÄÊðÃû¡£¡£¡£¡£¡£ÕâÏÖʵÉϾÍΪ·þÎñÆ÷ÌṩÁËÒ»ÖÖÑéÖ¤ÁîÅÆ½ÒÏþÒÔÀ´Êý¾ÝÊÇ·ñ±»¸Ä¶¯µÄ»úÖÆ£¬£¬£¬£¬£¬£¬£¬ÓÉÓÚÈκζÔÍ·²¿»òÔØºÉ²¿·ÖµÄÐ޸ͼ»áʹÊðÃû²»ÔÙÆ¥Åä¡£¡£¡£¡£¡£
02 JWT¡¢JWSÓëJWE
JWT¹æ·¶µÄÔ¼ÊøÏÖʵÉÏÊǺÜÊÇÓÐÏ޵ġ£¡£¡£¡£¡£ÓÉÓÚËüÖ»½ç˵Á˽«ÐÅÏ¢£¨¡°ÉùÃ÷¡±£©ÌåÏÖΪ¿ÉÒÔÔÚË«·½Ö®¼ä´«ÊäµÄJSON¹¤¾ßµÄÃûÌᣡ£¡£¡£¡£ÔÚÏÖʵʹÓÃÖУ¬£¬£¬£¬£¬£¬£¬JWT²¢Ã»ÓÐÕæÕý×÷Ϊһ¸ö×ÔÁ¦µÄʵÌåʹÓᣡ£¡£¡£¡£JWT¹æ·¶ÓÉJSON WebÊðÃû(JWS)ºÍJSON Web¼ÓÃÜ(JWE)¹æ·¶×é³É£¬£¬£¬£¬£¬£¬£¬ÅäºÏ½ç˵ÁËÏÖʵʵÏÖJWTµÄÏêϸҪÁì¡£¡£¡£¡£¡£

Ò²¾ÍÊÇ˵£¬£¬£¬£¬£¬£¬£¬JWTͨ³£ÊÇÖ¸JWS»òJWEÁîÅÆ£¬£¬£¬£¬£¬£¬£¬JWEͬÀí£¬£¬£¬£¬£¬£¬£¬Ö»ÊÇÁîÅÆµÄÏÖʵÄÚÈÝÊǾÓɼÓÃܵġ£¡£¡£¡£¡£
2.1 JWT¹¥»÷
JWT¹¥»÷ÊÇÖ¸Óû§Ïò·þÎñÆ÷·¢ËÍÐ޻ڸĵÄJWT£¬£¬£¬£¬£¬£¬£¬Ö´ÐжñÒâ²Ù×÷¡£¡£¡£¡£¡£Í¨³£ÇéÐÎÏ£¬£¬£¬£¬£¬£¬£¬½ÏÁ¿³£¼ûµÄÊÇð³äÒѾͨ¹ýÉí·ÝÈÏÖ¤µÄÓû§£¬£¬£¬£¬£¬£¬£¬ÈƹýÈÏÖ¤ºÍ»á¼û¿ØÖÆ¡£¡£¡£¡£¡£ÈôÊǹ¥»÷ÕßÄܹ»ÓÃí§ÒâÖµ½¨Éè×Ô¼ºµÄÓÐÓÃÁîÅÆ£¬£¬£¬£¬£¬£¬£¬ËûÃǾÍÄܹ»ÌáÉý×Ô¼ºµÄȨÏÞ»òð³äÆäËûÓû§£¬£¬£¬£¬£¬£¬£¬´Ó¶øÍêÈ«½ÓÊÜÕâЩÓû§µÄÕË»§¡£¡£¡£¡£¡£
2.2 ¹¥»÷ÔÀí
JWTÎó²îͨ³£ÊÇÓÉÓÚÓ¦ÓóÌÐò×Ô¼º¶ÔJWTµÄ´¦Öóͷ£ÓÐȱÏݶø±¬·¢µÄ¡£¡£¡£¡£¡£ÓëJWTÓйصÄÖÖÖֹ淶ÔÚÉè¼ÆÉÏÏà¶ÔÎÞа£¬£¬£¬£¬£¬£¬£¬ÀýÈçÔÊÐíÍøÕ¾¿ª·¢Ö°Ô±×ÔÐоöÒéÐí¶àʵÏÖϸ½Ú¡£¡£¡£¡£¡£µ«ÕâÒ²¿ÉÄÜ»áÒý·¢Ò»Ð©Çå¾²ÎÊÌâ¡£¡£¡£¡£¡£ÕâЩʵÏÖȱÏÝͨ³£Òâζ×ÅJWTµÄÊðÃûûÓб»×¼È·ÑéÖ¤¡£¡£¡£¡£¡£×ÝÈ»ÑÏ¿á¼ì²éÊðÃû£¬£¬£¬£¬£¬£¬£¬¹¥»÷ÕßÒ²¿ÉÒÔͨ¹ýÁîÅÆµÄÔØºÉ¸Ä¶¯×ª´ï¸øÓ¦ÓóÌÐòµÄÖµ¡£¡£¡£¡£¡£ÊðÃûÊÇ·ñ¿ÉÒÔÐÅÈÎÔںܺéÁ÷ƽÉÏҲȡ¾öÓÚ·þÎñÆ÷µÄÃØÔ¿ÊÇ·ñÈÔÈ»ÊÇÇå¾²µÄ¡£¡£¡£¡£¡£ÈôÊÇÕâ¸öÃÜÔ¿±»Ð¹Â¶»òÕßÆÆ½â£¬£¬£¬£¬£¬£¬£¬ÄÇô¹¥»÷Õ߾ͿÉÒÔΪí§ÒâÁîÅÆÌìÉúÓÐÓõÄÊðÃû£¬£¬£¬£¬£¬£¬£¬´Ó¶ø¹¥ÏÝÕû¸ö»úÖÆ¡£¡£¡£¡£¡£
2.3 JWTÊðÃûÑéÖ¤
ƾ֤Éè¼Æ£¬£¬£¬£¬£¬£¬£¬Ò»Ñùƽ³£ÇéÐÎÏ·þÎñÆ÷²»´æ´¢ÈκιØÓÚ½ÒÏþµÄJWTµÄÐÅÏ¢¡£¡£¡£¡£¡£Òò´Ëÿ¸öÁîÅÆ¶¼ÊÇÒ»¸öÍêÈ«×ÔÁ¦µÄʵÌå¡£¡£¡£¡£¡£ËäÈ»ÕâÑù×öÓÐÐí¶àÓŵ㣬£¬£¬£¬£¬£¬£¬µ«Ò²µ¼ÖÂÁËÒ»¸öÒþ»¼£¬£¬£¬£¬£¬£¬£¬¼´·þÎñÆ÷ÏÖʵÉϲ»ÖªµÀ¹ØÓÚÁîÅÆµÄÔʼÄÚÈÝ£¬£¬£¬£¬£¬£¬£¬ÉõÖÁ²»ÖªµÀÔʼÊðÃûÊÇʲô¡£¡£¡£¡£¡£ÕýÒòÔÆÔÆ£¬£¬£¬£¬£¬£¬£¬ÈôÊÇ·þÎñÆ÷ûÓÐ׼ȷЧÑéÊðÃû£¬£¬£¬£¬£¬£¬£¬Ò²¾ÍÎÞ·¨×èÖ¹¹¥»÷Õß¶ÔÁîÅÆµÄÆäËû²¿·Öí§Òâ¸Ä¶¯¡£¡£¡£¡£¡£
ÀýÈ磬£¬£¬£¬£¬£¬£¬Ò»¸ö°üÀ¨ÒÔÏÂÉùÃ÷µÄJWTÈçÏ£º
{
"username": "carlos",
"isAdmin": false
}
ÈôÊÇ·þÎñÆ÷ÊÇÆ¾Ö¤usernameÀ´Ê¶±ð»á»°£¬£¬£¬£¬£¬£¬£¬ÄÇô¹¥»÷Õß¾ÍÄܹ»Í¨¹ýÐÞ¸ÄÓû§ÃûÀ´Ã°³äÆäËûÒѵǼµÄÓû§¡£¡£¡£¡£¡£Í¬Ñù£¬£¬£¬£¬£¬£¬£¬ÈôÊÇisAdminÖµ±»ÓÃÓÚ»á¼û¿ØÖÆ£¬£¬£¬£¬£¬£¬£¬¹¥»÷ÕßÒ²¿ÉÒÔÌáͨ¹ý¸Ä¶¯Õâ¸öÖµÀ´ÊµÏÖÌáȨ¡£¡£¡£¡£¡£
03 JWTÏà¹ØÎó²îÀàÐÍ
3.1 ½ÓÊÜí§ÒâÊðÃû
JWT¿âͨ³£»£»£»£»£»áÌṩһ¸öÑéÖ¤ÁîÅÆµÄÒªÁ죬£¬£¬£¬£¬£¬£¬Í¬Ê±Ìṩ¶ÔÆä½âÂëµÄÒªÁì¡£¡£¡£¡£¡£ÀýÈ磬£¬£¬£¬£¬£¬£¬¹ØÓÚNode.js¿âjsonwebtokenÀ´Ëµ£¬£¬£¬£¬£¬£¬£¬ÕâÁ½¸öÒªÁì»®·ÖÊÇverify()ºÍdecode()¡£¡£¡£¡£¡£
µ«ÓÐʱ¿ª·¢Ö°Ô±»á»ìÏýÕâÁ½¸öÒªÁ죬£¬£¬£¬£¬£¬£¬Ö»°Ñ´«ÈëµÄÁîÅÆ´«¸ødecode()ÒªÁì¡£¡£¡£¡£¡£ÕâÏÖʵÉÏÒâζ×ÅÓ¦ÓóÌÐò»ù´¡¾ÍûÓжÔÊðÃû¾ÙÐÐÑéÖ¤¡£¡£¡£¡£¡£
3.2 ½ÓÊÜδÊðÃûµÄÁîÅÆ
JWTÍ·²¿»¹°üÀ¨Ò»¸öalg²ÎÊý¡£¡£¡£¡£¡£¸Ã²ÎÊýµÄ×÷ÓþÍÊǸæËß·þÎñÆ÷¶ÔÁîÅÆ¾ÙÐÐÊðÃûʱʹÓõÄÊÇÄÄÖÖËã·¨£¬£¬£¬£¬£¬£¬£¬»»¾ä»°Ëµ¾ÍÊÇÔÚÑéÖ¤ÊðÃûʱÐèҪʹÓÃÄÄÖÖËã·¨¡£¡£¡£¡£¡£
{
"alg": "HS256",
"typ": "JWT"
}
µ«ÊµÖÊÉÏÕâÖÖÒªÁì±£´æÇå¾²Òþ»¼£¬£¬£¬£¬£¬£¬£¬ÓÉÓÚ·þÎñÆ÷Ö»ÄÜÒþʽµØÐÅÈÎÌṩÁîÅÆµÄÓû§µÄÊäÈë£¨×¢ÖØ£¬£¬£¬£¬£¬£¬£¬ÕâЩÊäÈëÊÜ¿ØÓÚ¸ÃÓû§£©£¬£¬£¬£¬£¬£¬£¬¶ø¸ÃÁîÅÆ»ù´¡Ã»Óб»ÑéÖ¤¹ý¡£¡£¡£¡£¡£»£»£»£»£»»¾ä»°Ëµ¹¥»÷Õß¿ÉÒÔÖ±½ÓÓ°Ïì·þÎñÆ÷¼ì²éÁîÅÆÊÇ·ñÖµµÃÐÅÈεķ½·¨¡£¡£¡£¡£¡£
JWT¼È¿ÉÒÔʹÓÃһϵÁвî±ðµÄËã·¨¾ÙÐÐÊðÃû£¬£¬£¬£¬£¬£¬£¬Ò²¿ÉÒÔ²»ÊðÃû¡£¡£¡£¡£¡£ÔÚÕâÖÖÇéÐÎÏ£¬£¬£¬£¬£¬£¬£¬alg²ÎÊý±»ÉèÖÃΪNone£¬£¬£¬£¬£¬£¬£¬ÌåÏÖËùνµÄ "²»Çå¾²µÄJWT"¡£¡£¡£¡£¡£ÓÉÓÚÕâÖÖÇéÐÎÏÔ×ű£´æÇå¾²ÎÊÌ⣬£¬£¬£¬£¬£¬£¬Òò´Ë·þÎñÆ÷ͨ³£»£»£»£»£»á¾Ü¾øÃ»ÓÐÊðÃûµÄÁîÅÆ¡£¡£¡£¡£¡£µ«ÓÉÓÚÕâÖÖ¹ýÂËÒÀÀµÓÚ×Ö·û´®ÆÊÎö£¬£¬£¬£¬£¬£¬£¬ÒÔÊǹ¥»÷Õß¿ÉÒÔʹÓûìÏýÊÖÒÕÈÆ¹ýÕâЩ¹ýÂËÆ÷£¬£¬£¬£¬£¬£¬£¬Èç»ìÏý´óдºÍ·ÇÔ¤ÆÚµÄ±àÂëµÈ¡£¡£¡£¡£¡££¨ÐèÒª×¢ÖØµÄÊÇ£¬£¬£¬£¬£¬£¬£¬×ÝÈ»ÁîÅÆÊÇδÊðÃûµÄ£¬£¬£¬£¬£¬£¬£¬Ôغɲ¿·ÖÒ²±ØÐèÒÔµãºÅ×îºó¡£¡£¡£¡£¡££©
3.3 ±©Á¦ÆÆ½âÃÜÔ¿
ijЩÊðÃûËã·¨£¬£¬£¬£¬£¬£¬£¬ÀýÈçHS256£¨HMAC + SHA-256£©£¬£¬£¬£¬£¬£¬£¬»áÏñÃÜÂëÒ»ÑùʹÓÃÒ»¸öí§ÒâµÄ¡¢×ÔÁ¦µÄ×Ö·û´®×÷ΪÉñÒþÃØÔ¿¡£¡£¡£¡£¡£ÐèÒª°ü¹ÜÕâ¸öÃØÔ¿²»±»ÈÝÒײµ½»ò±©Á¦ÆÆ½â£¬£¬£¬£¬£¬£¬£¬²»È»¹¥»÷ÕßÄÜÒÔí§ÒâµÄÍ·²¿ºÍÔØºÉÖµÀ´½¨ÉèJWT£¬£¬£¬£¬£¬£¬£¬È»ºóÓÃÃÜÔ¿ÖØÐ¸øÁîÅÆÊðÃû¡£¡£¡£¡£¡£
ÔÚʵÏÖJWTÓ¦ÓÃʱ£¬£¬£¬£¬£¬£¬£¬¿ª·¢Ö°Ô±ÓÐʱ»áÒÅÍü¸Ä±äĬÈÏ»òռλµÄÃÜÂ룬£¬£¬£¬£¬£¬£¬ÉõÖÁ¿ÉÄܸ´ÖƺÍÕ³ÌùÔÚÍøÉÏÕÒµ½µÄ´úÂëÆ¬¶Ï£¬£¬£¬£¬£¬£¬£¬È»ºóÒÅÍü¸Ä±ä×÷ΪʾÀýÌṩµÄÓ²±àÂëµÄÃÜÂë¡£¡£¡£¡£¡£ÔÚÕâÖÖÇéÐÎÏ£¬£¬£¬£¬£¬£¬£¬¹¥»÷ÕßʹÓÃÊ¢ÐеÄÃÜÂë±¾£¬£¬£¬£¬£¬£¬£¬¿ÉÒÔÇáËɶԷþÎñÆ÷µÄÉϰ¶Æ¾Ö¤¾ÙÐб©Á¦ÆÆ½â¡£¡£¡£¡£¡£
3.4 JWTÍ·²¿²ÎÊý×¢Èë
ƾ֤JWS¹æ·¶£¬£¬£¬£¬£¬£¬£¬Ö»ÓÐÍ·²¿²ÎÊýalgÊDZØÐèµÄ¡£¡£¡£¡£¡£È»¶øÏÖʵÖÐJWTÍ·²¿£¨Ò²³ÆÎªJOSEÍ·²¿£©Í¨³£°üÀ¨ÆäËû¼¸¸ö²ÎÊý¡£¡£¡£¡£¡£ÒÔÏÂÊǹ¥»÷ÕßÌØÊâ¸ÐÐËȤµÄ²ÎÊý£º
jwk£¨JSON Web Key£©£ºÌṩһ¸öÌåÏÖÃÜÔ¿µÄǶÈëʽJSON¹¤¾ß¡£¡£¡£¡£¡£
jku£¨JSON Web Key Set URL£©£ºÌṩһ¸öURL£¬£¬£¬£¬£¬£¬£¬·þÎñÆ÷¿ÉÒÔ´ÓÖлñȡһ×é°üÀ¨×¼È·ÃÜÔ¿µÄÃÜÔ¿¡£¡£¡£¡£¡£
kid£¨Key ID£©£ºÌṩһ¸öID£¬£¬£¬£¬£¬£¬£¬ÔÚÓжà¸öÃÜÔ¿¿É¹©Ñ¡ÔñµÄÇéÐÎÏ£¬£¬£¬£¬£¬£¬£¬·þÎñÆ÷¿ÉÒÔʹÓøÃIDÀ´Ê¶±ð׼ȷµÄÃÜÔ¿¡£¡£¡£¡£¡£Æ¾Ö¤ÃÜÔ¿µÄÃûÌÿÉÄÜÉÐÓÐÒ»¸öÆ¥ÅäµÄkid²ÎÊý¡£¡£¡£¡£¡£
ÈçÉÏ£¬£¬£¬£¬£¬£¬£¬ÕâЩÓû§¿É¿ØÖƵIJÎÊýÓÃÓÚ¸æËßÎüÊÕ·½·þÎñÆ÷ÔÚÑéÖ¤ÊðÃûʱʹÓÃÄÄЩÃÜÔ¿¡£¡£¡£¡£¡£
3.5 jwk²ÎÊý×¢Èë
JSON WebÊðÃû£¨JWS£©¹æ·¶ÐÎòÁËÒ»¸ö¿ÉÑ¡µÄjwkÍ·²¿²ÎÊý£¬£¬£¬£¬£¬£¬£¬·þÎñÆ÷¿ÉÒÔÓÃËü½«Æä¹«Ô¿Ö±½ÓǶÈëJWKÃûÌõÄÁîÅÆ×Ô¼º¡£¡£¡£¡£¡£JWK£¨JSON WebÃÜÔ¿£©ÊÇÒ»ÖÖ±ê×¼»¯µÄÃûÌ㬣¬£¬£¬£¬£¬£¬ÓÃÓÚ½«ÃÜÔ¿ÌåÏÖΪJSON¹¤¾ß¡£¡£¡£¡£¡£
JWTÍ·²¿Ê¾ÀýÈçÏ£º
{
"kid": "ed2Nf8sb-sD6ng0-scs5390g-fFD8sfxG",
"typ": "JWT",
"alg": "RS256",
"jwk": {
"kty": "RSA",
"e": "AQAB",
"kid": "ed2Nf8sb-sD6ng0-scs5390g-fFD8sfxG",
"n": "yy1wpYmffgXBxhAUJzHHocCuJolwDqql75ZWuCQ_cb33K2vh9m"
}
}
ÀíÏëÇéÐÎÏ£¬£¬£¬£¬£¬£¬£¬·þÎñÆ÷Ó¦¸ÃֻʹÓÃÓÐÏ޵Ĺ«Ô¿°×Ãûµ¥À´ÑéÖ¤JWTÊðÃû¡£¡£¡£¡£¡£È»¶øÉèÖùýʧµÄ·þÎñÆ÷ÓÐʱ»áʹÓÃjwk²ÎÊýÖÐǶÈëµÄÈκÎÃÜÔ¿À´ÑéÖ¤ÊðÃû¡£¡£¡£¡£¡£
Òò´Ë¹¥»÷Õß¿ÉÒÔʹÓÃÕâÖÖÐÐΪ£¬£¬£¬£¬£¬£¬£¬ÓÃ×Ô¼ºµÄRSA˽Կ¶ÔÐ޻ڸĵÄJWT¾ÙÐÐÊðÃû£¬£¬£¬£¬£¬£¬£¬È»ºóÔÚjwkÍ·²¿ÖÐǶÈë¶ÔÓ¦µÄ¹«Ô¿¡£¡£¡£¡£¡£
ËäȻҲ¿ÉÒÔÔÚBurpÖÐÊÖ¶¯Ìí¼Ó»òÐÞ¸Äjwk²ÎÊý£¬£¬£¬£¬£¬£¬£¬µ«JWT±à¼Æ÷À©Õ¹ÌṩÁËÒ»¸öºÜÊÇÀû±ãµÄ¹¦Ð§£¬£¬£¬£¬£¬£¬£¬ÓÃÓÚ×ÊÖúÑо¿Ö°Ô±²âÊÔÕâ¸öÎó²î£º
ÔÚ¼ÓÔØ¸ÃÀ©Õ¹ºó£¬£¬£¬£¬£¬£¬£¬ÔÚBurpµÄÖ÷Ñ¡ÏÀ¸ÖУ¬£¬£¬£¬£¬£¬£¬×ªµ½JWT Editor KeysÑ¡Ï¡£¡£¡£¡£¡£
½¨ÉèÒ»¸öеÄRSAÃÜÔ¿¡£¡£¡£¡£¡£
ÏòBurp Repeater·¢ËÍÒ»¸ö°üÀ¨JWTµÄÇëÇ󡣡£¡£¡£¡£
ÔÚÐÂÎÅ±à¼Æ÷ÖУ¬£¬£¬£¬£¬£¬£¬Çл»µ½À©Õ¹ÌìÉúµÄJSON Web TokenÑ¡Ï£¬£¬£¬£¬£¬£¬£¬²¢ÒÔÄãϲ»¶µÄ·½·¨ÐÞ¸ÄÁîÅÆµÄÔØºÉ¡£¡£¡£¡£¡£
µã»÷Attack°´Å¥£¬£¬£¬£¬£¬£¬£¬È»ºóÑ¡ÔñEmbedded JWK¡£¡£¡£¡£¡£µ±ÊÕµ½ÌáÐÑʱ£¬£¬£¬£¬£¬£¬£¬Ñ¡ÔñÐÂÌìÉúµÄRSAÃÜÔ¿¡£¡£¡£¡£¡£
·¢ËÍÇëÇ󣬣¬£¬£¬£¬£¬£¬²âÊÔ·þÎñÆ÷µÄÏìÓ¦ÇéÐΡ£¡£¡£¡£¡£
ÓÐЩ·þÎñÆ÷²¢²»»áÖ±½ÓʹÓÃjwkÍ·²¿²ÎÊýÀ´Ç¶È빫Կ£¬£¬£¬£¬£¬£¬£¬¶øÊÇʹÓÃjku£¨JWK Set URL£©Í·²¿²ÎÊýÀ´ÒýÓÃÒ»¸ö°üÀ¨ÃÜÔ¿µÄJWK Set¡£¡£¡£¡£¡£µ±ÑéÖ¤ÊðÃûʱ£¬£¬£¬£¬£¬£¬£¬·þÎñÆ÷»á´ÓÕâ¸öURLÖлñÈ¡Ïà¹ØµÄÃÜÔ¿¡£¡£¡£¡£¡£
ÏÖʵÉÏËùνJWK Set¾ÍÊÇÒ»¸öJSON¹¤¾ß£¬£¬£¬£¬£¬£¬£¬ÆäÖаüÀ¨Ò»×éÌåÏÖÃÜÔ¿µÄJWK£¬£¬£¬£¬£¬£¬£¬ÀýÈ磺
{
"keys": [
{
"kty": "RSA",
"e": "AQAB",
"kid": "75d0ef47-af89-47a9-9061-7c02a610d5ab",
"n": "o-yy1wpYmffgXBxhAUJzHHocCuJolwDqql75ZWuCQ_cb33K2vh9mk6GPM9gNN4Y_qTVX67WhsN3JvaFYw-fhvsWQ"
},
{
"kty": "RSA",
"e": "AQAB",
"kid": "d8fDFo-fS9-faS14a9-ASf99sa-7c1Ad5abA",
"n": "fc3f-yy1wpYmffgXBxhAUJzHql79gNNQ_cb33HocCuJolwDqmk6GPM4Y_qTVX67WhsN3JvaFYw-dfg6DH-asAScw"
}
]
}
ÏñÕâÑùµÄJWK¼¯ÓÐʱ»áͨ¹ýÒ»¸ö±ê×¼µÄ¶Ëµã¶ÔÍâ¹ûÕæ£¬£¬£¬£¬£¬£¬£¬Èç/.known/jwks.json£¬£¬£¬£¬£¬£¬£¬¹¥»÷ÕßÓÐʱ¿ÉÒÔʹÓÃURLÆÊÎöµÄ²î±ðÀ´ÈƹýÕâÖÖ¹ýÂË»úÖÆ¡£¡£¡£¡£¡£
3.7 kid²ÎÊý×¢Èë
·þÎñÆ÷¿ÉÄÜ»áʹÓöà¸ö¼ÓÃÜÃÜÔ¿À´Îª²î±ðÀàÐ͵ÄÊý¾Ý¾ÙÐÐÊðÃû¡£¡£¡£¡£¡£³öÓÚÕâ¸öÔµ¹ÊÔÓÉ£¬£¬£¬£¬£¬£¬£¬JWTµÄÍ·²¿¿ÉÄܰüÀ¨Ò»¸ökid£¨ÃÜÔ¿ID£©²ÎÊý£¬£¬£¬£¬£¬£¬£¬ÓÃÀ´×ÊÖú·þÎñÆ÷ʶ±ðÔÚÑéÖ¤ÊðÃûʱҪʹÓõÄÃÜÔ¿¡£¡£¡£¡£¡£
ÑéÖ¤ÃÜԿͨ³£±»´æ´¢ÎªJWK Set¡£¡£¡£¡£¡£ÔÚÕâÖÖÇéÐÎÏ£¬£¬£¬£¬£¬£¬£¬·þÎñÆ÷¿ÉÒÔÖ±½ÓѰÕÒÓëÁîÅÆ¾ßÓÐÏàͬkid²ÎÊýµÄJWK¡£¡£¡£¡£¡£È»¶øJWS¹æ·¶²¢Ã»ÓÐΪÕâ¸öID½ç˵ÏêϸµÄ½á¹¹£¬£¬£¬£¬£¬£¬£¬ËüÖ»ÊÇ¿ª·¢Ö°Ô±í§ÒâÑ¡ÔñµÄÒ»¸ö×Ö·û´®¡£¡£¡£¡£¡£ÀýÈç¿ÉÒÔʹÓÃkid²ÎÊýÀ´Ö¸ÏòÊý¾Ý¿âÖеÄÒ»¸öÌØ¶¨ÌõÄ¿£¬£¬£¬£¬£¬£¬£¬ÉõÖÁÎļþÃû³Æ¡£¡£¡£¡£¡£
ÈôÊǸòÎÊýÊܵ½Ä¿Â¼±éÀúµÄÓ°Ï죬£¬£¬£¬£¬£¬£¬¹¥»÷Õß¾ÍÓпÉÄÜÆÈʹ·þÎñÆ÷ʹÓÃÆäÎļþϵͳÖеÄí§ÒâÎļþ×÷ΪÑéÖ¤ÃÜÔ¿¡£¡£¡£¡£¡£
{
"kid": "../../path/to/file",
"typ": "JWT",
"alg": "HS256",
"k": "asGsADas3421-dfh9DGN-AFDFDbasfd8-anfjkvc"
}
ÈôÊÇ·þÎñÆ÷Ò²Ö§³ÖʹÓöԳÆË㷨ΪJWTÊðÃû£¬£¬£¬£¬£¬£¬£¬¹¥»÷Õß¿ÉÒÔ½«kid²ÎÊýÖ¸ÏòÒ»¸ö¿ÉÕ¹ÍûµÄ¾²Ì¬Îļþ£¬£¬£¬£¬£¬£¬£¬È»ºóÓÃÒ»¸öÓë¸ÃÎļþÄÚÈÝÏàÆ¥ÅäµÄÉñÃØÀ´¸øJWTÊðÃû£¬£¬£¬£¬£¬£¬£¬¼òÆÓµÄÒªÁìÖ®Ò»ÊÇʹÓÃ/dev/null¡£¡£¡£¡£¡£¸ÃÎļþÊÇÒ»¸ö¿ÕÎļþ£¬£¬£¬£¬£¬£¬£¬¶Áȡʱ½«·µ»Ønull£¬£¬£¬£¬£¬£¬£¬¿ÉÒÔÓÃÒ»¸öBase64±àÂëµÄnull×Ö½ÚÀ´¸øÁîÅÆÊðÃû½«»ñµÃÒ»¸öÓÐÓõÄÊðÃû¡£¡£¡£¡£¡£
ÈôÊÇ·þÎñÆ÷½«ÆäÑéÖ¤ÃÜÔ¿´æ´¢ÔÚÊý¾Ý¿âÖУ¬£¬£¬£¬£¬£¬£¬kidÍ·²¿²ÎÊýÒ²ÊÇÒ»¸öDZÔÚµÄSQL×¢Èë¹¥»÷µÄÔØÌå¡£¡£¡£¡£¡£
3.8ÆäËûJWTÍ·²¿²ÎÊý
cty£¨ÄÚÈÝÀàÐÍ£©£ºÓÃÀ´ÉùÃ÷JWTÔØºÉÖÐÄÚÈݵÄýÌåÀàÐÍ¡£¡£¡£¡£¡£Í¨³£ÇéÐÎÏ»áÊ¡ÂԸòÎÊý£¬£¬£¬£¬£¬£¬£¬µ«µ×²ãÆÊÎö¿â¿ÉÄÜÕÕ¾ÉÖ§³ÖËü¡£¡£¡£¡£¡£ÈôÊǹ¥»÷ÕßÒѾÕÒµ½ÁËÈÆ¹ýÊðÃûÑéÖ¤µÄÒªÁ죬£¬£¬£¬£¬£¬£¬¿ÉÄÜ»áʵÑé×¢Èëcty²ÎÊý£¬£¬£¬£¬£¬£¬£¬½«ÄÚÈÝÀàÐ͸ÄΪtext/xml»òapplication/x-java-serialized-object£¬£¬£¬£¬£¬£¬£¬ÕâÓпÉÄÜΪXXEºÍ·´ÐòÁл¯¹¥»÷ÌṩеÄÏòÁ¿¡£¡£¡£¡£¡£
x5c£¨X.509Ö¤ÊéÁ´£©£ºÓÃÓÚת´ïÓÃÓÚ¶ÔJWT¾ÙÐÐÊý×ÖÊðÃûµÄX.509¹«Ô¿Ö¤Êé»òÖ¤ÊéÁ´¡£¡£¡£¡£¡£Õâ¸öÍ·²¿²ÎÊý¿ÉÓÃÓÚ×¢Èë×Ôǩ֤Ê飬£¬£¬£¬£¬£¬£¬ÀàËÆÓÚÉÏÃæÌÖÂÛµÄjwkÍ·²¿×¢Èë¹¥»÷¡£¡£¡£¡£¡£ÓÉÓÚX.509ÃûÌü°ÆäÀ©Õ¹µÄÖØ´óÐÔ£¬£¬£¬£¬£¬£¬£¬ÆÊÎöÕâЩ֤ÊéÒ²ºÜ¿ÉÄÜ»áÒýÈëÎó²î¡£¡£¡£¡£¡£
3.9 JWTËã·¨»ìÏý
×ÝÈ»·þÎñÆ÷ʹÓÃÁ˹¥»÷ÕßÎÞ·¨ÆÆ½âµÄÇ¿ÃÜÂ룬£¬£¬£¬£¬£¬£¬¶Ô·½ÈÔÈ»¿ÉÒÔʹÓÿª·¢Ö°Ô±Ã»ÓÐÔ¤ÍÆ²âµÄËã·¨ÊðÃûÁîÅÆÀ´Î±ÔìÓÐÓõÄJWT£¬£¬£¬£¬£¬£¬£¬Õâ¾ÍÊÇËùνµÄËã·¨»ìÏý¹¥»÷¡£¡£¡£¡£¡£
04 ·ÀÓùJWT¹¥»÷
ʹÓÃ×îеĿâÀ´´¦Öóͷ£JWT£¬£¬£¬£¬£¬£¬£¬²¢È·±£¿£¿£¿£¿£¿ª·¢Ö°Ô±¶ÔÏà¹ØÇå¾²ÎÊÌâ×ã¹»Ïàʶ¡£¡£¡£¡£¡£ÏÖ´ú´úÂë¿âµÄʹÓýµµÍÁËÔÚ´úÂëʵÏÖÖÐÒýÈëÇå¾²Îó²îµÄ¿ÉÄÜÐÔ£¬£¬£¬£¬£¬£¬£¬µ«ÓÉÓÚÏà¹Ø¹æ·¶¹ÌÓеÄÎÞаÐÔ£¬£¬£¬£¬£¬£¬£¬Ò²²¢·ÇÍòÎÞһʧ¡£¡£¡£¡£¡£
È·±£¶ÔÊÕµ½µÄÈκÎJWT¾ÙÐÐÑÏ¿áµÄÊðÃûÑéÖ¤£¬£¬£¬£¬£¬£¬£¬²¢Ë¼Á¿±ßÑØÇéÐΣ¬£¬£¬£¬£¬£¬£¬ÈçʹÓ÷ÇÔ¤ÆÚµÄËã·¨ÊðÃûµÄJWT¡£¡£¡£¡£¡£
ΪjkuÍ·²¿ÌṩÔÊÐíÖ÷»ú°×Ãûµ¥£¬£¬£¬£¬£¬£¬£¬²¢ÑÏ¿áÖ´ÐС£¡£¡£¡£¡£
È·±£²»»áÊܵ½kidÍ·²¿²ÎÊý·¾¶´©Ô½»òSQL×¢ÈëµÄÓ°Ïì¡£¡£¡£¡£¡£
05 ²Î¿¼Á´½Ó
https://portswigger.net/web-security/jwt
https://blog.csdn.net/cdyunaq/article/details/122561096
- Òªº¦´Ê±êÇ©£º
- ¼ì²âÓë·À»¤ÄÜÁ¦ JWT¹¥»÷ÀàÐÍ

¾©¹«Íø°²±¸ 11010802026257ºÅ