JavaScript È°¿ëÆÁ
2018.09.23 / 16:00

JWT(JSON Web Token) À̶õ?

hangawee
Ãßõ ¼ö 179

ÀÎÁõ°ú ÅäÅ« ±×¸®°í JWT?

ÃÖ±Ùµé¾î º¸¾È ¹× ÀÎÁõÀ» À§Çؼ­ JWT¸¦ »ç¿ëÇÏ°Ô µÇ¾ú´Ù.
±×·¡¼­ »ç¿ë¸¸ ÇÏ´Ù°¡ À̹ø¿¡ JWT¿¡ ´ëÇÑ °³³ä°ú ±¸Á¶, »ç¿ë¹ý°ú ¹®Á¦Á¡ µîÀ» ¾Ë¾Æº¸°íÀÚ ÇÑ´Ù.


ÀÏ¹Ý ÅäÅ« ±â¹ÝÀÇ ÀÎÁõ°ú Ŭ·¹ÀÓ(Claim) ÅäÅ« ±â¹Ý ÀÎÁõ

ÀÏ¹Ý ÅäÅ« ±â¹ÝÀº °ú°Å¿¡ ¸¹ÀÌ »ç¿ëÇÏ´ø ¹æ½ÄÀÌ´Ù.
ÁÖ·Î Àǹ̰¡ ¾ø´Â ¹®ÀÚ¿­(Random string) ±â¹ÝÀ¸·Î ±¸¼ºµÇ¾î ÀÖÀ¸¸ç ¾Æ·¡¿Í °°ÀÌ Ç¥ÇöÀÌ µÈ´Ù

1
a9ace025c90c0da2161075da6ddd3492a2fca776

±×¸®°í »ç¿ëÇÒ ¶§´Â ¾Æ·¡¿Í °°Àº jsonÀ¸·Î º¸³»´Â ¹æ½ÄÀ¸·Î »ç¿ëÇÏ°Ô µË´Ï´Ù.

1
2
3
4
5
6
7
8
9
{
"code": 0,
"msg": null,
"response":{
"token": "a9ace025c90c0da2161075da6ddd3492a2fca776",
"now": 1512446940,
"expired_at": 1512448740
}
}

±×·±µ¥ ÀÌ·± ÀÏ¹Ý ÅäÅ«Àº ´Ü¼øÇÑ ¹®ÀÚ¿­À̱⠶§¹®¿¡ Á¤º¸¸¦ ´ã°Å³ª ÇÒ ¼ö ¾ø´Ù.
Å©°Ô º¸ÀÚ¸é ¾Æ·¡¿Í °°Àº ¹®Á¦Á¡À» °¡Áö°í ÀÖ´Ù.

  • ¹ß±ÞµÈ ÅäÅ«¿¡ ´ëÇؼ­ ¸¸·á¸¦ ½Ãų ¼ö´ÜÀÌ ¾ø´Ù.
  • ¹ß±ÞµÈ ÅäÅ«À» °Ë»çÇϰųª ó¸®ÇÒ ¶§¸¶´Ù DB¿¡ Á¢±ÙÇÏ¿© °Ë»çÇÒ °æ¿ì ºÎ´ãÀÌ »ý±ä´Ù.
  • »ç¿ëÀÚ ·Î±×¾Æ¿ô µîÀ¸·Î ÀÎÇÑ ÅäÅ«À» °ü¸®ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¾ø´Ù.

ÀÌ¿Í °°Àº ¹®Á¦¸¦ ¾î´ÀÁ¤µµ ÇØ°áÇÒ ¼ö ÀÖ´Â °ÍÀÌ Å¬·¹ÀÓ(Claim) ±â¹Ý ÅäÅ« ¹æ½ÄÀÌ´Ù.

Ŭ·¹ÀÓ(Claim)À̶õ »ç¿ëÀÚ Á¤º¸³ª µ¥ÀÌÅÍ ¼Ó¼º µîÀ» ÀǹÌÇÑ´Ù.
±×·¡¼­ Ŭ·¹ÀÓ ÅäÅ«À̶ó Çϸé ÅäÅ« ¾È¿¡ Àú·± Á¤º¸¸¦ ´ã°í ÀÖ´Â ÅäÅ«À̶ó »ý°¢ÇÏ¸é µÈ´Ù.
¿¹¸¦ µé¸é ¾Æ·¡¿Í °°ÀÌ Á¤º¸¸¦ ´ã°í ÀÖ´Â °ÍÀ» Ŭ·¹ÀÓ ±â¹ÝÀ̶ó ÇÒ ¼ö ÀÖ´Ù.

1
2
3
4
5
{
"id":"mhlab",
"role":["admin","hr"],
"company":"hexlant"
}

ÀÌ·± Ŭ·¹ÀÓÀ» ±â¹ÝÇÑ ÅäÅ« Áß °¡Àå ´ëÇ¥ÀûÀÎ °ÍÀÌ ¹Ù·Î JWT´Ù.


What is JWT?

JWT(Json Web Token)Àº À§¿¡¼­ À̾߱â ÇÑ Å¬·¹ÀÓ ±â¹Ý ÅäÅ«À̸ç, À̸§¿¡¼­ ¾Ë ¼ö ÀÖ´Â °Íó·³ JSONÀ» ÀÌ¿ëÇÑ ÅäÅ«ÀÌ°í À¥ Ç¥ÁØ(RFC 7519)¸¦ ±¸ÇöÇÑ °ÍÀÌ´Ù.
ÀÚ¼¼ÇÑ °ÍÀº JWT °ø½ÄÆäÀÌÁö¿¡¼­ È®ÀÎ °¡´ÉÇÏ´Ù.

JWT´Â Çì´õ(header)ÆäÀ̷εå(payload)¼­¸í(signature) ¼¼ °¡Áö·Î ³ª´²Á® ÀÖÀ¸¸ç, ¾Æ·¡¿Í °°Àº ÇüÅ·Π±¸¼ºµÇ¾î ÀÖ´Ù.

1
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

°¢ ±¸ºÐÀº . ±¸ºÐÀÚ·Î ³ª´² Ç¥ÇöµÇ¸ç, °¢ °ªÀº BASE64·Î ÀÎÄÚµù µÇ¾î ÀÖ´Ù.


Çì´õ¿¡´Â typ¿Í alg µÎ °¡Áö Á¤º¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù.

  • typ
    • ÅäÅ«ÀÇ Å¸ÀÔÀ» ÁöÁ¤ (jwt)
  • alg
    • ÇØ½Ì ¾Ë°í¸®ÁòÀ» ÁöÁ¤
    • ÁÖ·Î HMAC SHA256 ¶Ç´Â RSA¸¦ »ç¿ëÇϸç ÀÌ ¾Ë°í¸®ÁòÀº ¼­¸í(signature)¿¡¼­ »ç¿ëÇÑ´Ù.

Çì´õ ÇüÅ´ ¾Æ·¡¿Í °°´Ù.


Payload

ÆäÀ̷εå¶ó ºÒ¸®´Â ºÎºÐ¿¡´Â ÅäÅ«¿¡¼­ »ç¿ëÇÒ Á¤º¸°¡ ´ã°ÜÀÖ°í À̸¦ À§¿¡¼­ ¼³¸íÇÑ Å¬·¹ÀÓÀ̶ó ºÎ¸£´Â °ÍµéÀÌ ÀúÀåµÇ¾î ÀÖ´Ù.
Key/Value ¹æ½ÄÀ¸·Î ÀÌ·ïÁ®ÀÖÀ¸¸ç (JSON°ú À¯»ç) ´Ù¼öÀÇ Á¤º¸¸¦ ³ÖÀ» ¼ö ÀÖ´Ù.
ÀÌ Å¬·¹ÀÓÀº ÃÑ ¼¼ °¡Áö·Î ³ª´¶´Ù.


µî·ÏµÈ Ŭ·¹ÀÓ (Registered Claim)

µî·ÏµÈ Ŭ·¹ÀÓÀº ÅäÅ« Á¤º¸¸¦ Ç¥ÇöÇϱâ À§ÇØ ÀÌ¹Ì Á¤ÇØÁø µ¥ÀÌÅÍ Á¾·ùÀ̸ç, ¸ðµÎ ¼±ÅÃÀûÀ¸·Î ÀÛ¼º °¡´ÉÇÏ´Ù.
Á¾·ù´Â ¾Æ·¡¿Í °°´Ù.

  • iss: ÅäÅ« ¹ß±ÞÀÚ (issuer)
  • sub: ÅäÅ« Á¦¸ñ (subject)
  • aud: ÅäÅ« ´ë»óÀÚ (audience)
  • exp: ÅäÅ«ÀÇ ¸¸·á½Ã°£ (expiraton)
    • NumericDate Çü½ÄÀ¸·Î µÇ¾îÀÖ¾î¾ß ÇÑ´Ù (Ex: 1480849147370)
  • nbf: ÅäÅ« È°¼º ³¯Â¥
    • ÀÌ ³¯Â¥°¡ Áö³ª±â Àü ÅäÅ«Àº È°¼ºÈ­ µÇÁö ¾Ê´Â´Ù.
  • iat: ÅäÅ«ÀÌ ¹ß±ÞµÈ ½Ã°£ (issued at)
    • ÀÌ °ªÀ» »ç¿ëÇÏ¿© ÅäÅ« ¹ß±Þ ÀÌÈÄ ¾ó¸¶³ª ½Ã°£ÀÌ Áö³µ´ÂÁö¸¦ ¾Ë ¼ö ÀÖ´Ù.
  • jti: JWTÀÇ °íÀ¯ ½Äº°ÀÚ
    • Áߺ¹ ¹æÁö¸¦ À§ÇØ »ç¿ëÇϸç, ÀÏȸ¿ë ÅäÅ«(Access Token µî)¿¡ »ç¿ëÇÑ´Ù.


°ø°³ Ŭ·¹ÀÓ (Public Claim)

°ø°³ Ŭ·¹ÀÓÀº ¼­·Î Ãæµ¹ÀÌ ÀϾÁö ¾Ê´Â À̸§À» °¡Áö°í ÀÖ¾î¾ßÇÑ´Ù.
±×·¡¼­ URL ÇüÅ·ΠÀÛ¼ºÇÏ¸ç ¿¹½Ã´Â ¾Æ·¡¿Í °°´Ù.

1
{ "https://hexlant.com": true }


ºñ°ø°³ Ŭ·¹ÀÓ (Private Claim)

ºñ°ø°³ Ŭ·¹ÀÓÀº ½ÇÁ¦ »ç¿ëÀ» ÇÏ´Â °³¹ßÀÚ°¡ ÁöÁ¤ÇÏ´Â °ÍÀ¸·Î ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®°¡ ¼­·Î Á¤ÀÇÇÏ¿© »ç¿ëÇϴ Ŭ·¹ÀÓÀ» ÀǹÌÇÑ´Ù.
¾Æ·¡¿Í °°ÀÌ »ç¿ëÇϱ⵵ ÇÑ´Ù.

1
{ "token_type": "access" }

°á·ÐÀûÀ¸·Î ÆäÀ̷εå´Â ¾Æ·¡¿Í °°ÀÌ ±¸¼ºµÈ´Ù.


Signature

¼­¸íÀº À§¿¡¼­ ¸¸µç Header¿Í Payload ÀÇ °¢ °ªÀ» BASE64·Î ÀÎÄÚµù ÇÏ°í, ±× °ªÀ» ºñ¹ÐÅ°¸¦ ÀÌ¿ëÇØ Çì´õ¿¡¼­ Á¤ÀÇÇÑ ¾Ë°í¸®ÁòÀ¸·Î (HS256À̳ª SHA256 µî) ÇؽÌÀ» ÇÏ°í, ÀÌ °ªÀ» ´Ù½Ã BASE64·Î ÀÎÄÚµùÇÏ¿© »ý¼ºÇÑ´Ù.


JWT Debugger

JWT °ø½Ä ÆäÀÌÁö¿¡¼­´Â JWT¸¦ °£´ÜÇÏ°Ô µð¹ö±ë Çغ¼ ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù.
ÀÌ°÷¿¡¼­ »ç¿ë °¡´ÉÇÏ´Ù.

»çÀÌÆ®¿¡¼­ È®ÀÎÇÏ¸é ¾Ë ¼ö ÀÖ´Â °Íó·³ ¼­¸í¿¡¼­ Å° °ªÀ» º¯°æÇÏ¸é ¾Æ·¡ÀÇ »çÁøó·³ ¼­¸íÀÇ BASE64 °ªÀÌ º¯°æµÇ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.


JWT¸¦ »ç¿ëÇÒ °æ¿ì¡¦

À§¿¡¼­ ¾Ë ¼ö ÀÖ´Â °Íó·³ ¸¸¾à ÅäÅ« °ªÀ» ´©±º°¡ ¼öÁ¤ÇÒ °æ¿ì ¾Æ·¡ÀÇ »çÁøó·³ Debuuger¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ´Â °Íó·³ º¯Á¶°¡ µÈ °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

±×¸®°í JWT ÅäÅ« ÆäÀ̷ε忡´Â BASE64·Î ÀÎÄÚµù¸¸ µÉ »Ó ÀÌ°ÍÀ» ´Ù½Ã µðÄÚµùÇÏ¿© Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù.
±×·¡¼­ °¡±ÞÀû ÅäÅ«¿¡´Â Áß¿ä Á¤º¸¸¦ ´ãÁö ¾Ê´Â °ÍÀ» ÃßõÇÑ´Ù.


Á¤¸®

À̷νá JWT¸¦ ¾Ë¾Æº¸¾Ò´Ù.
´ÙÀ½ Æ÷½ºÆÿ¡¼­´Â JWT¸¦ ¾î¶² ½ÄÀ¸·Î È°¿ëÇÏ´ÂÁö¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸µµ·Ï ÇÏ°Ú´Ù.