Server to Server ¾îÇø®ÄÉÀ̼ÇÀ» À§ÇÑ Google OAuth 2.0
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)¸¦ Á¤ÀÇÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. [Âü°í]
´ç½ÅÀÇ ¾îÇø®ÄÉÀ̼ÇÀÌ ±¸±Û ¾Û¿£Áø ¶Ç´Â ±¸±Û ÄÄǻƮ¿£Áø ¿¡¼ µ¿ÀÛÇÏÁö ¾Ê´Â´Ù¸é ±¸±Û °³¹ßÀÚ Äֿܼ¡¼ ÀÌ·¯ÇÑ ÀÚ°ÝÀ» ȹµæÇÏ¿©¾ß ÇÕ´Ï´Ù. ¼ºñ½º °èÁ¤ ÀÚ°ÝÀ» »ý¼ºÇϱâ À§Çؼ, ȤÀº ÀÌ¹Ì »ý¼ºµÈ °ø°³µÈ ÀÚ°ÝÀ» º¸±â À§Çؼ´Â ´ÙÀ½À» ¼öÇàÇÕ´Ï´Ù.
- °³¹ßÀÚ ÄÜ¼Ö ±ÇÇÑ(Permission) ÆäÀÌÁöÀÇ ¼ºñ½º °èÁ¤ ¼½¼Ç(Service accounts section)¿¡ ÁøÀÔÇÕ´Ï´Ù.
2. ¼ºñ½º °èÁ¤ ¸¸µé±â ¹öÆ°À» ´©¸¨´Ï´Ù.
3. ¼ºñ½º °èÁ¤ ¸¸µé±â â¿¡¼ ¼ºñ½º °èÁ¤ÀÇ À̸§À» ÀÔ·ÂÇÏ°í, »õ ºñ°ø°³ Å° Á¦°øÀ» ¼±ÅÃÇÕ´Ï´Ù. ¸¸¾à ±¸±Û ¾Û½º µµ¸ÞÀÎ Àüü ÀÎÁõÀ» Çã¿ëÇÏ·Á¸é Google Apps µµ¸ÞÀÎ Àüü À§ÀÓ »ç¿ëÀ» üũÇÏ½Ã¸é µË´Ï´Ù. ±×¸®°í ¸¸µé±â¸¦ Ŭ¸¯ÇÕ´Ï´Ù.
´ç½ÅÀÇ »õ·Î¿î °ø°³/ºñ°ø°³ Å° ½ÖÀÌ »ý¼ºµÇ¸ç ´ç½ÅÀÇ ÄÄÇ»ÅÍ¿¡ ´Ù¿î·Îµå µË´Ï´Ù. ÀÌ°ÍÀº ´Ü ÇϳªÀÇ º¹»çº»À̱⿡ ´ç½ÅÀº ¾ÈÀüÇÏ°Ô ÀÌ Å°¸¦ º¸°üÇÒ Àǹ«°¡ ÀÖ½À´Ï´Ù.
´ç½ÅÀº ¾ðÁ¦µçÁö ÀÌ °³¹ßÀÚ Äֿܼ¡ µ¹¾Æ¿Í¼ À̸ÞÀÏ ÁÖ¼Ò, Å° 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 µ¥ÀÌÅͺ£À̽º¿¡ Á¸ÀçÇÏ´Â ¸®½ºÆ®¸¦ ºÒ·¯¿À´Â ÄÚµå´Â ´ÙÀ½°ú °°½À´Ï´Ù.