JSP/SERVLET
2018.10.01 / 21:52

Server to Server ¾îÇø®ÄÉÀ̼ÇÀ» À§ÇÑ Google OAuth 2.0

Chitta
Ãßõ ¼ö 167


google_developers_logo

Google OAuth 2.0 ½Ã½ºÅÛÀº À¥ ¾îÇø®ÄÉÀ̼ǰú ±¸±Û ¼­ºñ½º°£ÀÇ Åë½Å°ú °°Àº ¼­¹ö°£ Åë½ÅÀ» Áö¿øÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ½Ã³ª¸®¿À¸¦ À§Çؼ­´Â °³º° ÃÖÁ¾ »ç¿ëÀÚ ´ë½Å¿¡ ´ç½ÅÀÇ ¾îÇø®ÄÉÀ̼ǿ¡ ¼ÓÇÏ´Â ¼­ºñ½º °èÁ¤(Service Account)°¡ ÇÊ¿äÇÕ´Ï´Ù. ´ç½ÅÀÇ ¾îÇø®ÄÉÀ̼ÇÀº ¼­ºñ½º °èÁ¤À» ÀÌ¿ëÇÏ¿© ±¸±Û API¸¦ È£ÃâÇÒ ¼ö ÀÖÀ¸¸ç ÀÌ °æ¿ì »ç¿ëÀÚ°¡ Á÷Á¢ÀûÀ¸·Î ¿¬°üµÇÁö ¾Ê½À´Ï´Ù. ÀÌ ½Ã³ª¸®¿À´Â ¡°Two-Legged OAuth¡± ¶Ç´Â ¡°2LO¡±·Î ºÒ¸³´Ï´Ù. (ºñ½ÁÇÑ ¿ë¾î·Î ¡°Three-Legged OAuth¡±ÀÇ °æ¿ì¿¡´Â ÃÖÁ¾ »ç¿ëÀÚ°¡ ±¸±Û API¸¦ È£ÃâÇÏ´Â °æ¿ì¸¦ ¸»Çϸç À̶§¿¡ ±ÇÇÑ ¿äû È­¸éÀÌ ¶ã ¼ö ÀÖ½À´Ï´Ù)

ÀϹÝÀûÀ¸·Î, ¾îÇø®ÄÉÀ̼ÇÀÌ ±¸±Û API¸¦ È£ÃâÇÒ ¶§ »ç¿ëÀÚÀÇ Á¤º¸º¸´Ù´Â ¾îÇø®ÄÉÀÌ¼Ç ÀÚüÀÇ Á¤º¸¸¦ °¡Áö°í ÀÛ¾÷ÇÒ ¶§ ¼­ºñ½º °èÁ¤À» »ç¿ëÇÕ´Ï´Ù. ¿¹¸¦ µé¾î µ¥ÀÌÅ͸¦ ¿µ±¸ÀûÀ¸·Î ÀúÀåÇϱâ À§ÇØ Google Cloud Datastore¸¦ »ç¿ëÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀÌ ÀÖ´Ù¸é ¼­ºñ½º °èÁ¤À» »ç¿ëÇÏ¿© ÀÎÁõÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

Google AppsÀÇ µµ¿¡ÀÎ °ü¸®ÀÚ¸¦ ÀÌ¿ëÇÏ¸é µµ¸ÞÀÎÀÇ À¯ÀúµéÀ» ´ëÇ¥ÇÏ¿© »ç¿ëÀÚ Á¤º¸¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â Àüü µµ¸ÞÀÎ ±ÇÇÑÀ» ºÎ¿©ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¹®¼­¿¡¼­´Â ¾îÇø®ÄÉÀ̼ÇÀÌ Google APIs Ŭ¶óÀ̾ðÆ® ¶óÀ̺귯¸® ¶Ç´Â HTTP¸¦ ÀÌ¿ëÇÏ¿© OAuth 2.0 ¼­¹ö°£(Server to Server) È£ÃâÀ» ÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ Á¤¸®ÇÕ´Ï´Ù.

°³¿ä

¼­¹ö°£ »óÈ£ÀÛ¿ëÀ» Áö¿øÇϱâ À§Çؼ­ ¸ÕÀú °³¹ßÀÚ Äֿܼ¡ ÀÖ´Â ´ç½ÅÀÇ ÇÁ·ÎÁ§Æ®ÀÇ ¼­ºñ½º °èÁ¤À» ¸¸µé¾î¾ß ÇÕ´Ï´Ù. ¸¸¾à ´ç½ÅÀÌ Google Apps µµ¸ÞÀÎ ³»ÀÇ »ç¿ëÀÚ Á¤º¸¿¡ Á¢±ÙÇÏ°íÀÚ ÇÑ´Ù¸é µµ¸ÞÀÎ Àüü(domain-wide) Á¢±Ù ±ÇÇÑÀ» ¼­ºñ½º ¾îÄ«¿îÆ®¿¡ ºÎ¿©ÇØ¾ß ÇÕ´Ï´Ù.

±×´ÙÀ½ ´ç½ÅÀÇ ¾îÇø®ÄÉÀ̼ÇÀÌ OAuth 2.0 ÀÎÁõ ¼­¹ö·ÎºÎÅÍ ¿¢¼¼½ºÅäÅ«À» ¿äûÇϱâ À§ÇØ  ¼­ºñ½º °èÁ¤ ÀÚ°ÝÀ» ÀÌ¿ëÇÏ¿© ÀÎÁõ API ¿äûÀ» ¸¸µì´Ï´Ù.

¸¶Áö¸·À¸·Î  ´ç½ÅÀÇ ¾îÇø®ÄÉÀ̼ÇÀº ±¸±Û API¸¦ È£ÃâÇÒ ¼ö ÀÖ´Â ¿¢¼¼½ºÅäÅ«À» »ç¿ëÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.

Ãßõ : ´ç½ÅÀÇ ¾îÇø®ÄÉÀ̼ÇÀº ÀÌ·¯ÇÑ ÀÛ¾÷À» ´ç½ÅÀÌ »ç¿ëÇÏ´Â ¾ð¾î¿¡ ÀûÀýÇÑ ±¸±Û API Ŭ¶óÀ̾ðÆ® ¶óÀ̺귯¸®¸¦ »ç¿ëÇϰųª HTTP¸¦ Á÷Á¢ ÀÌ¿ëÇÏ¿© OAuth 2.0 ½Ã½ºÅÛ°ú Åë½ÅÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ¼­¹ö°£ Åë½ÅÀ» ÅëÇÑ ÀÎÁõ °úÁ¤¿¡¼­ ¾Ïȣȭ »çÀÎÀÌ µÈ JSON Web Tokens (JWTs)¸¦ ¸¸µé¾î »ç¿ëÇÏ°Ô µÇ°í ÀÌ ºÎºÐ¿¡¼­ ´ç½ÅÀÇ ¾îÇø®ÄÉÀ̼ÇÀÇ º¸¾È¿¡ Ä¡¸íÀûÀÎ ¿µÇâÀ» ³¢Ä¥ ¼ö ÀÖ´Â ½É°¢ÇÑ ¿¡·¯°¡ ¹ß»ýÇϱ⠽±½À´Ï´Ù.

ÀÌ·± ÀÌÀ¯·Î ¿ì¸®´Â ±¸±Û API Ŭ¶óÀ̾ðÆ® ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ¿© ´ç½ÅÀÇ ¾îÇø®ÄÉÀÌ¼Ç Äڵ忡¼­ ¾Ïȣȭ °ü·Ã 󸮸¦ ½Å°æ¾²Áö ¾Ê±â¸¦ °­·ÂÇÏ°Ô ÃßõÇÕ´Ï´Ù.

¼­ºñ½º °èÁ¤ ¸¸µé±â

¼­ºñ½º °èÁ¤ ÀÚ°ÝÀº À¯´ÏÅ©ÇÏ°Ô »ý¼ºµÈ À̸ÞÀÏÁÖ¼Ò(email address)¿Í ÃÖ¼ÒÇÑ ÇÑ°³ÀÇ °ø°³/ºñ¹Ð Å°½Ö(public/private key pair)ÀÌ Æ÷ÇԵ˴ϴÙ. ¸¸¾à¿¡ µµ¸ÞÀÎ Àüü À§ÀÓÀ» È°¼ºÈ­ ÇÑ´Ù¸é Ŭ¶óÀ̾ðÆ® ¾ÆÀ̵ð(client id) ¿ª½Ã ¼­ºñ½º °èÁ¤ ÀÚ°Ý¿¡ Æ÷ÇԵǾî¾ß ÇÕ´Ï´Ù.

´ç½ÅÀÇ ¾îÇø®ÄÉÀ̼ÇÀÌ ±¸±Û ¾Û ¿£Áø(Google App Engine)¿¡¼­ µ¹¾Æ°£´Ù¸é ¼­ºñ½º °èÁ¤Àº ´ç½ÅÀÇ ÇÁ·ÎÁ§Æ®°¡ »ý¼ºµÉ ¶§ ÀÚµ¿À¸·Î ¼³Á¤µË´Ï´Ù.

¸¸¾à ´ç½ÅÀÇ ¾îÇø®ÄÉÀ̼ÇÀÌ ±¸±Û ÄÄǻƮ ¿£Áø(Google Compute Engine)¿¡¼­ µ¹¾Æ°£´Ù¸é ÇÁ·ÎÁ§Æ® »ý¼º½Ã ¼­ºñ½º °èÁ¤Àº ÀÚµ¿À¸·Î ¼³Á¤µÇÁö¸¸ ¾îÇø®ÄÉÀ̼ÇÀÌ Á¢±ÙÇÏ°íÀÚ ÇÏ´Â Á¢±Ù ¹üÀ§(Scope)¸¦ Á¤ÀÇÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. [Âü°í]

´ç½ÅÀÇ ¾îÇø®ÄÉÀ̼ÇÀÌ ±¸±Û ¾Û¿£Áø ¶Ç´Â ±¸±Û ÄÄǻƮ¿£Áø ¿¡¼­ µ¿ÀÛÇÏÁö ¾Ê´Â´Ù¸é ±¸±Û °³¹ßÀÚ Äֿܼ¡¼­ ÀÌ·¯ÇÑ ÀÚ°ÝÀ» ȹµæÇÏ¿©¾ß ÇÕ´Ï´Ù. ¼­ºñ½º °èÁ¤ ÀÚ°ÝÀ» »ý¼ºÇϱâ À§Çؼ­, ȤÀº ÀÌ¹Ì »ý¼ºµÈ °ø°³µÈ ÀÚ°ÝÀ» º¸±â À§Çؼ­´Â ´ÙÀ½À» ¼öÇàÇÕ´Ï´Ù.

  1. °³¹ßÀÚ Äܼ֠±ÇÇÑ(Permission) ÆäÀÌÁöÀÇ ¼­ºñ½º °èÁ¤ ¼½¼Ç(Service accounts section)¿¡ ÁøÀÔÇÕ´Ï´Ù.

google_api_oauth_01

2. ¼­ºñ½º °èÁ¤ ¸¸µé±â ¹öÆ°À» ´©¸¨´Ï´Ù.

google_api_oauth_02

3. ¼­ºñ½º °èÁ¤ ¸¸µé±â Ã¢¿¡¼­ ¼­ºñ½º °èÁ¤ÀÇ À̸§À» ÀÔ·ÂÇÏ°í, »õ ºñ°ø°³ Å° Á¦°øÀ» ¼±ÅÃÇÕ´Ï´Ù. ¸¸¾à ±¸±Û ¾Û½º µµ¸ÞÀÎ Àüü ÀÎÁõÀ» Çã¿ëÇÏ·Á¸é Google Apps µµ¸ÞÀÎ Àüü À§ÀÓ »ç¿ëÀ» üũÇÏ½Ã¸é µË´Ï´Ù. ±×¸®°í ¸¸µé±â¸¦ Ŭ¸¯ÇÕ´Ï´Ù.

google_api_oauth_03

´ç½ÅÀÇ »õ·Î¿î °ø°³/ºñ°ø°³ Å° ½ÖÀÌ »ý¼ºµÇ¸ç ´ç½ÅÀÇ ÄÄÇ»ÅÍ¿¡ ´Ù¿î·Îµå µË´Ï´Ù. ÀÌ°ÍÀº ´Ü ÇϳªÀÇ º¹»çº»À̱⿡ ´ç½ÅÀº ¾ÈÀüÇÏ°Ô ÀÌ Å°¸¦ º¸°üÇÒ Àǹ«°¡ ÀÖ½À´Ï´Ù.

´ç½ÅÀº ¾ðÁ¦µçÁö ÀÌ °³¹ßÀÚ Äֿܼ¡ µ¹¾Æ¿Í¼­ À̸ÞÀÏ ÁÖ¼Ò, Å° ID¿Í °°Àº Á¤º¸¸¦ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶Ç´Â Ãß°¡·Î °ø°³/ºñ°ø°³ Å°¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. °³¹ßÀÚ Äֿܼ¡¼­ÀÇ ¼­ºñ½º °èÁ¤ ÀÚ°Ý¿¡ ´ëÇÑ ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº [Âü°í]¸¦ È®ÀÎÇØÁÖ¼¼¿ä.

¼­ºñ½º °èÁ¤ÀÇ À̸ÞÀÏ ÁÖ¼Ò¸¦ Àû¾î³õ°í ¼­ºñ½º °èÁ¤ÀÇ P12 ºñ¹ÐÅ° ÆÄÀÏÀ» ´ç½ÅÀÇ ¾îÇø®ÄÉÀ̼ÇÀÌ Á¢±ÙÇÒ ¼ö ÀÖ´Â À§Ä¡¿¡ ÀúÀåÇϽʽÿÀ. ´ç½ÅÀÇ ¾îÇø®ÄÉÀ̼ÇÀÌ ÀÎÁõ API È£ÃâÀ» ¸¸µå´Âµ¥ À̰͵éÀÌ ÇÊ¿äÇÕ´Ï´Ù.

Âü°í : ´ç½ÅÀº °³¹ß ȯ°æ°ú ÇÁ·Î´ö¼Ç ȯ°æ ¸ðµÎ¿¡¼­ ÀÌ ºñ¹ÐÅ°¸¦ ¾ÈÀüÇÏ°Ô º¸°üÇÏ°í °ü¸®ÇØ¾ß ÇÕ´Ï´Ù. ±¸±ÛÀº ´ç½ÅÀÇ ºñ¹ÐÅ°ÀÇ º¹»çº»À» º¸°üÇÏÁö ¾Ê½À´Ï´Ù. ´ÜÁö °ø°³Å°¸¸À» °¡Áö°í ÀÖ½À´Ï´Ù.

ÀÎÁõ API È£ÃâÀ» ÁغñÇϱâ

±¸±Û¿¡¼­´Â ±¸±Û API È£ÃâÀ» À§ÇÑ ¶óÀ̺귯¸®·Î Java¸¦ ºñ·ÔÇÑ ´Ù¾çÇÑ ¾ð¾î¸¦ Áö¿øÇÏ°í ÀÖ½À´Ï´Ù. [Âü°í]¸¦ È®ÀÎÇØÁÖ¼¼¿ä.

±¸±Û °³¹ßÀÚ Äֿܼ¡¼­ À̸ÞÀÏ ÁÖ¼Ò¿Í ºñ¹ÐÅ°¸¦ ȹµæÇÑ µÚ JAVA¿ë ±¸±Û API Ŭ¶óÀ̾ðÆ® ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÏ¿© ¼­ºñ½º °èÁ¤ ÀÚ°Ý ¹× ¾îÇø®ÄÉÀ̼ÇÀÌ ¿¢¼¼½º¸¦ ¿øÇÏ´Â ¹üÀ§¸¦ Á¤ÀÇÇϴ GoogleCredentialÀ» »ý¼ºÇÕ´Ï´Ù.

¸¸¾à µµ¸ÞÀÎ Àüü À§ÀÓÀ» Æ÷ÇÔÇÑ ¼­ºñ½º ¾îÄ«¿îÆ®ÀÌ°í ƯÁ¤ À¯Àú·Î °¡ÀåÇÏ¿© »ç¿ëÇÏ°í ½ÍÀ» °æ¿ì GoogleCredential ÆÑÅ丮ÀÇ setServiceAccountUser ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© »ç¿ëÀÚ °èÁ¤ÀÇ À̸ÞÀÏ ÁÖ¼Ò¸¦ ƯÁ¤ÇØ Áֽñ⠹ٶø´Ï´Ù.

ÀÌÁ¦ ÀÌ·¸°Ô ¸¸µé¾îÁø GoogleCredential °´Ã¼¸¦ »ç¿ëÇÏ¿© ´ç½ÅÀÇ ¾îÇø®ÄÉÀ̼ǿ¡¼­ ±¸±Û API¸¦ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù.

±¸±Û API È£Ãâ

GoogleCredential °´Ã¼¸¦ »ç¿ëÇÏ¿© ±¸±Û API¸¦ ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù.

1. GoogleCredential °´Ã¼¸¦ »ç¿ëÇÏ¿© ´ç½ÅÀÌ »ç¿ëÇÏ°íÀÚ ÇÏ´Â APIÀÇ ¼­ºñ½º °´Ã¼¸¦ »ý¼ºÇÕ´Ï´Ù.

2. ¼­ºñ½º °´Ã¼°¡ Á¦°øÇÏ´Â ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ¿© ¿øÇÏ´Â APIÀÇ ¿äûÀ» »ý¼ºÇÕ´Ï´Ù. ¿¹¸¦ µé¾î exciting-example-123 ÇÁ·ÎÁ§Æ®ÀÇ Å¬¶ó¿ìµå SQL µ¥ÀÌÅͺ£À̽º¿¡ Á¸ÀçÇÏ´Â ¸®½ºÆ®¸¦ ºÒ·¯¿À´Â ÄÚµå´Â ´ÙÀ½°ú °°½À´Ï´Ù.

Âü°í : Using OAuth 2.0 to Access Google APIs