JWT(Json Web Token)À» ÀÌ¿ëÇÑ ¸ð¹ÙÀÏ ÀÎÁõ
ÅäÅ« ¹æ½ÄÀÇ ¸ð¹ÙÀÏ À¯Àú ÀÎÁõ¿¡ ´ëÇØ Àß Á¤¸®µÇ¾î ÀÖ´Â ±ÛÀÌ ÀÖ¾î ¹ø¿ªÇϸç Á¤¸®Çغ»´Ù.
Ãâó: The Ultimate Guide to Mobile API Security
¸ð¹ÙÀÏ API º¸¾ÈÀÇ ¹®Á¦Á¡
°¡Àå ±âÃÊÀûÀÎ API º¸¾ÈÀÇ ÇüÅ´ HTTP Basic Authentication(HTTP ±âº» ÀÎÁõ)ÀÌ´Ù. ÀÌ ¹æ½ÄÀº ¸Å¿ì °£°áÇÏ°Ô ÀÛµ¿Çϱ⠶§¹®¿¡ API ¼¹ö¸¦ ¸¸µå´Â »ç¶÷À̳ª API¸¦ È°¿ëÇÒ °³¹ßÀÚ ¸ðµÎ¿¡°Ô Æí¸®ÇÔÀ» Á¦°øÇØÁØ´Ù.
±âº»ÀûÀÎ ÀÛµ¿¹æ½ÄÀº ´ÙÀ½°ú °°´Ù.
- °³¹ßÀÚ¿¡°Ô APIÅ°(º¸Åë ID¿Í PW)°¡ ÁÖ¾îÁø´Ù. ÀÌ APIÅ°´Â ´ÙÀ½°ú °°Àº ÇüŸ¦ º¸ÀδÙ.
- 3bb743bbd45d4eb8ae31e16b9f83c9ba:ffb7d6369eb84580ad2e52ca3fc06c9d.
- °³¹ßÀÚ´Â ¹ß±Þ¹ÞÀº APIÅ°¸¦ ÀÚ½ÅÀÇ ¼¹ö ³» ¾ÈÀüÇÑ °÷¿¡ º¸°üÇØ¾ß ÇÒ Ã¥ÀÓÀÌ ÀÖ´Ù.
- °³¹ßÀÚ´Â APIÅ°¸¦ HTTP ÀÎÁõ Çì´õ¿¡ ´ã¾Æ API ¼¹ö¿¡ request¸¦ ³¯¸°´Ù.
- Request¸¦ cURL·Î ³ªÅ¸³»¸é ´ÙÀ½°ú °°´Ù.
$ curl --user 3bb743bbd45d4eb8ae31e16b9f83c9ba:ffb7d6369eb84580ad2e52ca3fc06c9d https://api.example.com/v1/test
- cURLÅøÀº APIÀÎÁõ°ªÀ» ¹Þ¾Æ¿Í base64 ÀÎÄÚµùÀ» °ÅÃÄ ´ÙÀ½°ú °°Àº ÇüÅÂÀÇ HTTP ÀÎÁõ Çì´õ¸¦ ¸¸µé¾î ³½´Ù.
- Basic M2JiNzQzYmJkNDVkNGViOGFlMzFlMTZiOWY4M2M5YmE6Zm¡¦
- API ¼¹ö¿¡¼´Â ÀÌ ÇÁ·Î¼¼½º¸¦ ¿ª¼øÀ¸·Î ÇàÇÑ´Ù. ¼¹ö¿¡¼ HTTPÇì´õ¸¦ ã¾Æ³»¸é, base64 µðÄÚµùÀ» ÇÏ¿© APIÅ°·ÎºÎÅÍ ID¿Í PW¸¦ »Ì¾Æ³»°í °ËÁõÀ» ÇÑ µÚ¿¡ ÀÀ´äÀ» °è¼Ó ÁøÇàÇÒ °ÍÀÎÁö °áÁ¤ÇÑ´Ù.
HTTP ±âº» ÀÎÁõ ¹æ½ÄÀº °£°áÇÏ¸é¼ ÈǸ¢ÇÑ ÀÎÁõ¹æ½ÄÀÌ´Ù. °³¹ßÀÚ´Â APIÅ°¸¦ ¹ß±Þ¹Þ´Â °Í ¸¸À¸·Î API¼ºñ½º¸¦ °£ÆíÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.
HTTP ±âº» ÀÎÁõ ¹æ½ÄÀÌ ¸ð¹ÙÀÏ ¾Û¿¡ ÀûÇÕÇÏÁö ¾ÊÀº ÀÌÀ¯´Â APIÅ°¸¦ ¸ð¹ÙÀÏ ±â±â ³»¿¡ ¾ÈÀüÇÏ°Ô ÀúÀåÇÏ´Â À̽´ ¶§¹®ÀÌ´Ù. ¶ÇÇÑ HTTP ±âº» ÀÎÁõ ¹æ½ÄÀº RawÇÑ APIÅ°¸¦ ¸Å ¿äû¶§¸¶´Ù »ç¿ëÇØ¾ß ÇϹǷÎ, ½Ã°£ÀÌ °¥¼ö·Ï Ãë¾àÁ¡ °ø°Ý¿¡ ³ëÃâµÉ °¡´É¼ºÀÌ ³ô¾ÆÁø´Ù. ¶ÇÇÑ APIÅ°°¡ ³»ÀåµÈ ä·Î ¹èÆ÷µÈ ¾ÛÀ» ¸®¹ö½º ¿£Áö´Ï¾î¸µ Çϸé APIÅ°¸¦ ¾Ë¾Æ³»´Â °ÍÀÌ °¡´ÉÇØÁö±â ¶§¹®¿¡ API ¼ºñ½º°¡ ¾Ç¿ëµÉ ¼ÒÁö°¡ ÀÖ´Ù. ´ëºÎºÐÀÇ °æ¿ì ´Ù¼ö¿¡°Ô ¹èÆ÷µÇ´Â ¸ð¹ÙÀÏ ¾Û ³»¿¡ ¾ÈÀüÇÏ°Ô APIÅ°¸¦ º¸°üÇÏ´Â ¹æ¹ýÀº ¾ø´Ù°í º¼ ¼ö ÀÖ´Ù. ??¹®¿¡ HTTP ±âº» ÀÎÁõ ¹æ½ÄÀº À¥ ºê¶ó¿ìÀú³ª ¸ð¹ÙÀÏ ¾Û°ú °°Àº ½Å·ÚÇϱâ Èûµç ȯ°æ¿¡ ÀûÇÕÇÑ ÀÎÁõ ¹æ½ÄÀº ¾Æ´Ï´Ù.
¸ð¹ÙÀÏ APIº¸¾È¿¡ OAuth2 µµÀÔÇϱâ
OAuth2´Â ½Å·ÚÇϱ⠾î·Á¿î ±â±â(¸ð¹ÙÀÏ)¿¡¼ »ç¿ëµÇ´Â API ¼ºñ½ºÀÇ º¸¾ÈÀ» À§ÇÑ ÈǸ¢ÇÑ ÇÁ·ÎÅäÄÝÀÌ´Ù. ¶ÇÇÑ ¸ð¹ÙÀÏ »ç¿ëÀÚ¸¦ ÀÎÁõÇÒ ¼ö ÀÖ´Â ¼ö´ÜÀ¸·Î ÅäÅ« ÀÎÁõ¹æ½ÄÀ» Á¦°øÇÑ´Ù. »ç¿ëÀÚÀÇ °üÁ¡¿¡¼ OAuth2 ÅäÅ« ÀÎÁõÀº ´ÙÀ½°ú °°ÀÌ ÁøÇàµÈ´Ù.(OAuth2´Â ÀÌ ÇÁ·Î¼¼½º¸¦ Password Grant Flow¶ó°í ºÎ¸¥´Ù.)
- »ç¿ëÀÚ°¡ ¸ð¹ÙÀÏ ¾ÛÀ» ½ÇÇàÇÏ°í, IDȤÀº ¸ÞÀÏ ÁÖ¼Ò¿Í ºñ¹Ð¹øÈ£¸¦ ÀÔ·ÂÇϴ âÀÌ ¶á´Ù.
- ¸ð¹ÙÀÏ ¾Û¿¡¼ ÀÔ·Â ¹ÞÀº »ç¿ëÀÚÀÇ Á¤º¸¸¦ POST ¹æ½ÄÀ¸·Î API ¼¹ö·Î º¸³½´Ù.(SSL)
- À¯Àú ÀÎÁõ°ªÀ» °ËÁõÇÏ°í ÀÏÁ¤ ½Ã°£ÀÌ Áö³ª¸é ¸¸·áµÉ ¾×¼¼½º ÅäÅ«À» »ý¼ºÇÑ´Ù.
- ¹ß±Þ?ÂÀ? ¾×¼¼½º ÅäÅ«À» ¸ð¹ÙÀÏ ±â±â¿¡ ÀúÀåÇÑ´Ù. APIÅäÅ«°ú ¸¶Âù°¡Áö·Î º¸¾ÈÀÌ Àû¿ëµÇ´Â ¾ÈÀüÇÑ Àå¼Ò¿¡ º¸°üÇØ¾ß Çϸç, API ¼ºñ½º¿¡ Á¢±ÙÇÒ ¶§ ÀÌ ÅäÅ«À» »ç¿ëÇÑ´Ù.
- ¾×¼¼½º ÅäÅ«ÀÌ ¸¸·áµÇ¸é ´õÀÌ»ó ÀÛµ¿ÇÏÁö ¾ÊÀ¸¸ç, ID ȤÀº ¸ÞÀÏ ÁÖ¼Ò¿Í ºñ¹Ð¹øÈ£¸¦ ÀÔ·ÂÇϴ âÀ» ´Ù½Ã ¶ç¿î´Ù.
OAuth2°¡ API º¸¾È¿¡ ÁÁÀº ÀÌÀ¯´Â APIÅ° ÀÚü¸¦ ¾ÈÀüÇÏÁö ¾ÊÀº ȯ°æ¿¡ ÀúÀåÇÒ ÇÊ¿ä°¡ ¾ø±â ¶§¹®ÀÌ´Ù. ´ë½Å¿¡ ¾×¼¼½º ÅäÅ«À» »ý¼ºÇÏ¿© ¾ÈÀüÇÏÁö ¾ÊÀº ȯ°æ¿¡ Àӽ÷ΠÀúÀåÇسõ±â¸¸ ÇÏ¸é µÈ´Ù. °ø°ÝÀÚ°¡ ¾×¼¼½º ÅäÅ«¿¡ Á¢±ÙÇÒ ¼ö ÀÖ°Ô µÇ´õ¶óµµ ÀÏÁ¤ ½Ã°£ÀÌ Áö³ª¸é ¸¸·áµÇ±â ??¹®¿¡ ÀáÀçÀûÀÎ ÇÇÇظ¦ ÁÙÀÏ ¼ö ÀÖ´Ù.
OAuth2¿¡¼ API¿¡ Á¢±ÙÇÒ ¶§ ÇÊ¿äÇÑ ¾×¼¼½º ÅäÅ«À» ¹ß±Þ ¹Þ¾Ò´Ù¸é, ¸ð¹ÙÀÏ ±â±â ¾îµò°¡¿¡ ÀúÀåÀ» ÇØ¾ß ÇÑ´Ù. ÅäÅ« ÀúÀå¼Ò´Â °³¹ßÀ» ÁøÇàÇÏ´Â Ç÷§Æû¿¡ µû¶ó Á¤ÇØÁø´Ù. ¿¹¸¦ µé¾î ¾Èµå·ÎÀÌµå ¾ÛÀ» °³¹ßÇÏ°í ÀÖ´Ù¸é ¸ðµç ¾×¼¼½º ÅäÅ«À» SharedPreference¿¡ ÀúÀåÇÒ °ÍÀÌ´Ù. iOSÀÇ °æ¿ì ¾×¼¼½º ÅäÅ«À» Keychain¿¡ ÀúÀåÇÏ°Ô µÈ´Ù. ÀÌ¿¡ °üÇØ StackOverflow¿¡ Àß Á¤¸®µÈ ³»¿ëÀÌ ÀÖ´Ù.
¾×¼¼½º ÅäÅ«
¾×¼¼½º ÅäÅ«Àº JWT(JSON Web Token)¸¦ ÁÖ·Î »ç¿ëÇϴµ¥, JWT´Â ´ÙÀ½°ú °°Àº Ư¡À» °®´Â´Ù.
- Ŭ¶óÀ̾ðÆ®·Î ¹ßÇàµÉ ¼ö ÀÖ´Ù.
- ´ç½ÅÀÌ »ý¼ºÇß´Ù´Â »ç½ÇÀ» Áõ¸íÇÒ ¼ö ÀÖ´Ù.(¼¸í)
- ÀÏÁ¤ ½Ã°£ µÚ¿¡ ÀÚµ¿À¸·Î ¸¸·áµÈ´Ù.
- JSONŸÀÔÀ¸·Î º¯¼ö Á¤º¸¸¦ ÀúÀåÇÒ ¼ö ÀÖ´Ù.
- ¼¹ö¿¡¼ Äõ¸®ÇÏÁö ¾Ê¾Æµµ »ç¿ëÀÚ¸¦ ·ÎÄÿ¡¼ °ËÁõÇÒ ¼ö Àֱ⠶§¹®¿¡ API È£ÃâÀÇ È½¼ö¸¦ ÁÙÀÏ ¼ö ÀÖ´Ù.
JWT´Â ´ÙÀ½°ú °°Àº ¹æ½ÄÀ¸·Î Ç×»ó ¾ÏÈ£È ¼¸íÀ» »ç¿ëÇÑ´Ù(Cryptographically signed).
- º¸¾ÈÀ» À§ÇØ ·£´ý ¹®ÀÚ¿À» »ý¼ºÇÏ°í, API ¼¹ö¿¡ ÀúÀåÇÑ´Ù. 40ÀÚ Á¤µµ¸é ÀûÇÕÇÏ´Ù.
- »õ JWT¸¦ ¸¸µé ¶§ ÀÌ ¹®ÀÚ¿À» JWT¶óÀ̺귯¸®·Î Àü´ÞÇÏ¿© ÀúÀåÇÒ JSONµ¥ÀÌÅÍ(ID, ±ÇÇÑ µî)°ú ÇÔ²² ÅäÅ«¿¡ ¼¸íÇÑ´Ù.
- ÅäÅ«ÀÌ »ý¼ºµÇ¸é ´ÙÀ½°ú °°ÀÌ ³ªÅ¸³´Ù.
- header.claims.signature
- Çì´õ¿Í Ŭ·¹ÀÓ ±×¸®°í ¼¸íÀº base64·Î ÀÎÄÚµù µÈ ±ä ¹®ÀÚ¿ ÇüÅ·Π³ªÅ¸³´Ù.
¸ð¹ÙÀÏ Å¬¶óÀ̾ðÆ®¿¡¼µµ JWT¿¡ ÀúÀåµÈ ³»¿ëÀ» º¼ ¼ö ÀÖ´Ù. JWT¶óÀ̺귯¸®°¡ ÀÖÀ¸¸é JWT³»ºÎÀÇ JSONµ¥ÀÌÅ͸¦ ½±°Ô È®ÀÎÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ÀúÀåµÈ µ¥ÀÌÅÍ´Â ÀϹÝÀûÀ¸·Î ´ÙÀ½°ú °°Àº ÇüÅ·Π³ªÅ¸³´Ù.
{
"user_id": "e3457285-b604-4990-b902-960bcadb0693",
"scope": "can-read can-write"
}
JWT´Â ÅäÅ« ¸¸·á ±â´ÉÀ» ±âº»ÀûÀ¸·Î Áö¿øÇϱ⠶§¹®¿¡ ÅäÅ«¸¸À» °¡Áö°í ÅäÅ«ÀÇ À¯È¿¼ºÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. µû¶ó¼ JWT ¶óÀ̺귯¸®¸¦ »ç¿ëÇÑ´Ù¸é APIÈ£Ãâ ¾øÀ̵µ ·ÎÄÿ¡¼ JWTÀÇ À¯È¿¼ºÀ» °Ë»çÇÒ ¼ö ÀÖ´Ù. JWTÀÎÁõ ½Ã½ºÅÛÀº ¼¹ö´Ü¿¡¼µµ ÈǸ¢ÇÑ ÀÛ¾÷À» ¼öÇàÇÑ´Ù. ¿¹¸¦ µé¾î ´ÙÀ½°ú °°Àº JWT¸¦ ¸ð¹ÙÀÏ ¾Û¿¡ ¹ß±ÞÇß´Ù°í °¡Á¤Çغ¸ÀÚ.
{
"user_id": "e3457285-b604-4990-b902-960bcadb0693",
"scope": "can-read can-write"
}
±×¸®°í ¸ð¹ÙÀÏ ¸Ö¿þ¾î³ª ÇØÄ¿°¡ ÅäÅ«À» ´ÙÀ½°ú °°ÀÌ Á¶ÀÛÇß´Ù.
{
"user_id": "e3457285-b604-4990-b902-960bcadb0693",
"scope": "can-read can-write can-delete"
}
À§¿Í °°ÀÌ »èÁ¦ ±ÇÇÑÀ» Á¶ÀÛÇÏ¿© ºÎ¿©ÇßÀ» °æ¿ì API ¼¹ö¿¡¼µµ µ¿ÀÛÇÒ °ÍÀΰ¡? ´äÀº ¾Æ´Ï´Ù. API ¼¹ö°¡ JWT¸¦ ¼ö½ÅÇÏ°í °ËÁõÇÒ ¶§ ´ÙÀ½°ú °°Àº ÀÛ¾÷À» ¼öÇàÇϱ⠶§¹®ÀÌ´Ù.
- ¼¹ö¸¸ ¾Ë°í ÀÖ´Â ºñ¹Ð ¹®ÀÚ¿À» »ç¿ëÇØ ÅäÅ«ÀÌ ÈѼյÇÁö ¾Ê¾Ò´ÂÁö üũÇÑ´Ù(¾Õ¼ º¸¾Ò´ø ¾ÏÈ£¼¸íÀ» ÀÌ¿ë).
- JWT°¡ Á¶À۵Ǿú´Ù¸é ÀÌ ´Ü°è¸¦ Åë°úÇÏÁö ¸øÇÑ´Ù.
- JWTÀÇ ¸¸·á ½Ã°£À» üũÇÏ¿© ¾ÆÁ÷ À¯È¿ÇÑ JWTÀÎÁö °ËÁõÇÑ´Ù.
- ¿À·¡ µÈ JWT¸¦ ÀÌ¿ëÇØ API ¿äûÀ» ÇÑ´Ù¸é °ÅºÎµÈ´Ù.
JWTÀÇ ÀÌ·¯ÇÑ ±â´ÉÀº ÀÎÁõ / ¸¸·á / º¸¾ÈÀ» ¸Å¿ì °£°áÇÏ°Ô ¸¸µé¾î ÁØ´Ù. JWT¸¦ ÀÌ¿ëÇØ ¼ºñ½º¸¦ °³¹ßÇÒ ¶§ ¸í½ÉÇØ¾ß ÇÒ Á¡Àº ¿ÀÁ÷ ÇϳªÀÌ´Ù. À¯ÃâµÇ¾îµµ »ó°ü¾ø´Â Á¤º¸¸¸ ÀúÀåÇÑ´Ù.
ÀÛµ¿¹æ½Ä
- À¯Àú°¡ ¾ÛÀ» ½ÇÇà
- ¾ÛÀÌ ÀÎÁõ Á¤º¸¸¦ ¿ä±¸ÇÔ
- OAuth2ÀÇ ¾ÏÈ£ ºÎ¿© ŸÀÔ ½ºÅ°¸¶¸¦ »ç¿ëÇØ »ç¿ëÀÚ ÀÎÁõÀ» Çϱ⠶§¹®¿¡ ID¿Í PW°¡ ÇÊ¿äÇÏ´Ù.
- »ç¿ëÀÚ°¡ ÀÎÁõ Á¤º¸¸¦ ÀÔ·ÂÇÔ
- ¾ÛÀÌ API ¼¹ö·Î POST request¸¦ º¸³¿
- OAuth2 ÇÁ·Î¼¼½º°¡ ½ÃÀ۵Ǵ ºÎºÐ
- ´Ü¼øÈ÷ API ¼¹ö·Î HTTP Post ¿äû¸¸ Àü¼Û
- API ¼¹ö¿¡¼ À¯Àú ÀÎÁõ
- »ç¿ëÀÚÀÇ °èÁ¤°ú PW°¡ ÀÏÄ¡ÇÏ´ÂÁö È®ÀÎ
- API ¼¹ö¿¡¼ ¸ð¹ÙÀÏ ¾Û¿¡ ÀúÀåÇÒ JWT¸¦ »ý¼º
- OAuth2 ÀÎÁõÀ» Åë°úÇ߱⠶§¹®¿¡ ¾×¼¼½º ÅäÅ«À» ¹ß±ÞÇØ ¸ð¹ÙÀÏ ¾ÛÀ¸·Î Àü´Þ
- ID¿Í »ç¿ëÀÚ ±ÇÇÑ ±×¸®°í ¾Û¿¡¼ ¹Ù·Î Á¢±ÙÇÒ ÇÊ¿ä°¡ ÀÖ´Â ¾î¶² Á¤º¸µç JSONŸÀÔÀ¸·Î ´ã´Â´Ù.
- JWT¸¦ »ý¼ºÇßÀ¸¸é, ¾ÛÀ¸·Î ¾Æ·¡¿Í °°Àº ÇüÅÂÀÇ JSON Response¸¦ º¸³½´Ù.
{ "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJEUExSSTVUTEVNMjFTQzNER0xHUjBJOFpYIiwiaXNzIjoiaHR0cHM6Ly9hcGkuc3Rvcm1wYXRoLmNvbS92MS9hcHBsaWNhdGlvbnMvNWpvQVVKdFZONHNkT3dUVVJEc0VDNSIsImlhdCI6MTQwNjY1OTkxMCwiZXhwIjoxNDA2NjYzNTEwLCJzY29wZSI6IiJ9.ypDMDMMCRCtDhWPMMc9l_Q-O-rj5LATalHYa3droYkY", "token_type": "bearer", "expires_in": 3600 }
- JSON Response´Â ¼¼ °³ÀÇ Çʵ带 °®´Â´Ù. ù ¹ø° Çʵå´Â ¾×¼¼½º ÅäÅ«ÀÌ´Ù. ÀÌ ÅäÅ«Àº API ¿äû ½Ã ÀÎÁõÀ» ÇÒ ¶§ »ç¿ëÇÏ°Ô µÈ´Ù.
- µÎ ¹ø° Çʵå´Â ÅäÅ« ŸÀÔÀÌ´Ù. ÀÌ°ÍÀº ¾Û¿¡ ¾î¶² Á¾·ùÀÇ ÅäÅ«À» Á¦°øÇß´ÂÁö ¾Ë·ÁÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. ¿©±â¼´Â OAuth2ÀÇ Bearer TokenÀ» Á¦°øÇß´Ù.
- ¼¼ ¹ø° Çʵå´Â ¸¸·á±âÇÑ ÇʵåÀÌ´Ù. ÀÌ Çʵå´Â ÃÊ ´ÜÀ§·Î Ç¥½ÃµÇ±â ¶§¹®¿¡ À§ ÅäÅ«Àº 3600ÃÊ(1½Ã°£)µÚ¿¡ ¸¸·áµÉ °ÍÀÌ´Ù.
- Ŭ¶óÀ̾ðÆ® ´Ü¿¡¼´Â JSON Response¸¦ ¹Þ¾Æ¿Í ¾×¼¼½º ÅäÅ«À» ÆÄ½Ì ÇÑ µÚ¿¡ ¾ÈÀüÇÑ ±â±â ³»ºÎÀÇ °ø°£¿¡ ÀúÀåÇÑ´Ù.
- ¾Û¿¡¼ ¼¹ö·Î ÀÎÁõµÈ ¿äûÀ» º¸³½´Ù.
- ÀúÀåµÈ JWT¸¦ »ç¿ëÇØ HTTP ÀÎÁõ Çì´õ¸¦ ¸¸µé°í API ¿äûÀ» º¸³» »ç¿ëÀÚ¸¦ ÀÎÁõÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.
- ¿¹¸¦ µé¾î cURLÀ» ÀÌ¿ëÇØ Bearer ŸÀÔÀÇ ÅäÅ«À» º¸³½´Ù¸é ´ÙÀ½°ú °°Àº ÇüŸ¦ º¸ÀÏ °ÍÀÌ´Ù.
$ curl -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJEUExSSTVUTEVNMjFTQzNER0xHUjBJOFpYIiwiaXNzIjoiaHR0cHM6Ly9hcGkuc3Rvcm1wYXRoLmNvbS92MS9hcHBsaWNhdGlvbnMvNWpvQVVKdFZONHNkT3dUVVJEc0VDNSIsImlhdCI6MTQwNjY1OTkxMCwiZXhwIjoxNDA2NjYzNTEwLCJzY29wZSI6IiJ9.ypDMDMMCRCtDhWPMMc9l_Q-O-rj5LATalHYa3droYkY" https://api.example.com/v1/test
- ¿©±â¿¡¼ ÀÎÁõ Çì´õ ºÎºÐÀº ´ÙÀ½°ú °°´Ù.
Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJEUExSSTVUTEVNMjFTQzNER0xHUjBJOFpYIiwiaXNzIjoiaHR0cHM6Ly9hcGkuc3Rvcm1wYXRoLmNvbS92MS9hcHBsaWNhdGlvbnMvNWpvQVVKdFZONHNkT3dUVVJEc0VDNSIsImlhdCI6MTQwNjY1OTkxMCwiZXhwIjoxNDA2NjYzNTEwLCJzY29wZSI6IiJ9.ypDMDMMCRCtDhWPMMc9l_Q-O-rj5LATalHYa3droYkY
- ÀÌ ¿äûÀ» ¹ÞÀº ¼¹ö´Ü¿¡¼´Â ´ÙÀ½°ú °°Àº È°µ¿À» ¼öÇàÇÏ°Ô µÈ´Ù.
- HTTP ÀÎÁõ Çì´õ °ªÀ» °Ë»çÇÏ¿© Bearer°¡ µé¾îÀÖÀ½À» È®ÀÎÇÑ´Ù.
- µÚ¿¡ µû¶ó¿À´Â ¹®ÀÚ¿ °ªÀ» °¡Á®¿Í ¾×¼¼½º ÅäÅ«À¸·Î ÀνÄÇÑ´Ù.
- JWT¶óÀ̺귯¸®¸¦ »ç¿ëÇØ ¾×¼¼½ºÅäÅ«ÀÌ À¯È¿Çϸç, ¼¸íµÇ¾îÀÖ°í, ¸¸·áµÇÁö ¾Ê¾Ò´ÂÁö °Ë»çÇÏ°í °ËÁõÇÑ´Ù.
- »ç¿ëÀÚÀÇ ID¿Í ±ÇÇÑÀ» È®ÀÎÇÑ´Ù.
- »ç¿ëÀÚÀÇ °èÁ¤À» µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍ °¡Á®¿Â´Ù.
- ¸ðµç °ÍÀÌ Åë°úµÈ´Ù¸é API ¿äû¿¡ ¸Â´Â ÀÀ´äÀ» ÇØÁØ´Ù.