Skip to main content

OAuth ์•ฑ ๋งŒ๋“ค๊ธฐ ๋ชจ๋ฒ” ์‚ฌ๋ก€

๋‹ค์Œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๋”ฐ๋ผ OAuth app์˜ ๋ณด์•ˆ๊ณผ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜์„ธ์š”.

GitHub App์„(๋ฅผ) ๋Œ€์‹  ์‚ฌ์šฉ

๊ฐ€๋Šฅํ•˜๋ฉด OAuth app ๋Œ€์‹  GitHub App์„(๋ฅผ) ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ GitHub Apps์€(๋Š”) OAuth apps๋ณด๋‹ค ์„ ํ˜ธ๋ฉ๋‹ˆ๋‹ค. GitHub Apps์€(๋Š”) ์„ธ๋ถ„ํ™”๋œ ์‚ฌ์šฉ ๊ถŒํ•œ์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋” ์ž˜ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ˆ˜๋ช…์ด ์งง์€ ํ† ํฐ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์†์„ฑ์€ ์•ฑ์˜ ์ž๊ฒฉ ์ฆ๋ช…์ด ์œ ์ถœ๋  ๊ฒฝ์šฐ์— ๋ฐœ์ƒ ๊ฐ€๋Šฅํ•œ ์†์ƒ์„ ์ œํ•œํ•˜์—ฌ ์•ฑ์˜ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

OAuth apps์™€(๊ณผ) ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ GitHub Apps์€(๋Š”) ์—ฌ์ „ํžˆ OAuth 2.0์„ ์‚ฌ์šฉํ•˜๊ณ  OAuth ํ† ํฐ ์œ ํ˜•(์‚ฌ์šฉ์ž ์•ก์„ธ์Šค ํ† ํฐ)์„ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉ์ž ๋Œ€์‹  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ GitHub Apps์€(๋Š”) ์‚ฌ์šฉ์ž์™€ ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

GitHub Apps์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์•ฑ ๋งŒ๋“ค๊ธฐ ์ •๋ณด์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๊ธฐ์กด OAuth app์„(๋ฅผ) GitHub App(์œผ)๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ OAuth ์•ฑ์„ GitHub ์•ฑ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ตœ์†Œ ๋ฒ”์œ„ ์‚ฌ์šฉ

OAuth app์€(๋Š”) ์•ฑ์ด ์˜๋„ํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฒ”์œ„๋งŒ ์š”์ฒญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์˜ ํ† ํฐ์ด ์†์ƒ๋˜๋ฉด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์†์ƒ์˜ ์–‘์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ OAuth ์•ฑ ๊ถŒํ•œ ๋ถ€์—ฌ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ฒ ์ €ํ•˜๊ณ  ์ง€์†์„ฑ ์žˆ๋Š” ๊ถŒํ•œ ๋ถ€์—ฌ

์‚ฌ์šฉ์ž์— ๋กœ๊ทธ์ธํ•œ ํ›„ ์•ฑ ๊ฐœ๋ฐœ์ž๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ์ถ”๊ฐ€ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋กœ๊ทธ์ธ์—๋Š” ๋ฉค๋ฒ„์‹ญ, ์•ก์„ธ์Šค ๋ฐ ํ˜„์žฌ SSO ์ƒํƒœ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๊ฒ€์‚ฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๊ตฌ์„ฑ์ด ๋›ฐ์–ด๋‚˜๊ณ  ๊ณ ์œ ํ•œ id๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์— ๋กœ๊ทธ์ธํ•  ๋•Œ ๋™์ผํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ์‚ฌ์šฉ์ž๋ฅผ ๊ธฐ์–ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์‚ฌ์šฉ์ž๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ €์žฅํ•˜๋ ค๋ฉด ํ•ญ์ƒ ์‚ฌ์šฉ์ž์˜ id๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์›ํ•˜๋Š” ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. GET /user REST API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ id๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ REST API ์—”๋“œํฌ์ธํŠธ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฆฌํฌ์ง€ํ† ๋ฆฌ, ์กฐ์ง ๋ฐ ๊ธฐ์—…์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น id๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋งํฌ๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ์œ ์ง€๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ํ•ธ๋“ค, ์กฐ์ง ์Šฌ๋Ÿฌ๊ทธ ๋˜๋Š” ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ํฌํ•จํ•˜์—ฌ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”.

๋ชจ๋“  ์ƒˆ ์ธ์ฆ์— ๋Œ€ํ•œ ์กฐ์ง ์•ก์„ธ์Šค ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•  ๋•Œ, ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ํ† ํฐ์ด ์–ด๋–ค ์กฐ์ง์— ๋Œ€ํ•ด ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ์ถ”์ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์กฐ์ง์—์„œ ์ œ๊ฑฐ๋  ๋•Œ ๋กœ๊ทธ์ธํ•œ ํ›„ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ์ง์—์„œ SAML SSO๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ SAML SSO๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์•ก์„ธ์Šค ํ† ํฐ์€ ํ•ด๋‹น ์กฐ์ง์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ •๊ธฐ์ ์œผ๋กœ GET /user/installations REST API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์•ก์„ธ์Šค ํ† ํฐ์ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์กฐ์ง์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์กฐ์ง์— ์•ก์„ธ์Šคํ•  ๊ถŒํ•œ์ด ์—†๋Š” ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž๊ฐ€ SAML SSO๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ์กฐ์ง์— ๋‹ค์‹œ ๊ฐ€์ž…ํ•  ๋•Œ๊นŒ์ง€ ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ์กฐ์ง ์†Œ์œ  ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๋ฐฉ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub App ์„ค์น˜์— ๋Œ€ํ•œ REST API ์—”๋“œํฌ์ธํŠธ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์กฐ์ง ๋ฐ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ์ €์žฅ

id ํ•„๋“œ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ID๋ฅผ ์ถ”์ ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ๊ฐ ์‚ฌ์šฉ์ž๊ฐ€ ์šด์˜ํ•˜๋Š” ์กฐ์ง ๋˜๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์—ญํ• ์„ ์ „ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ค‘์š”ํ•œ ์ •๋ณด๊ฐ€ ๋ˆ„์ถœ๋˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

  1. ์‚ฌ์šฉ์ž๋Š” SAML SSO๊ฐ€ ํ•„์š”ํ•œ Mona ์กฐ์ง์— ์žˆ์œผ๋ฉฐ SSO๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„ ์•ฑ์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์•ฑ์€ ์‚ฌ์šฉ์ž๊ฐ€ Mona ๋‚ด์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์‚ฌ์šฉ์ž๋Š” Mona์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋ถ„์„์„ ์œ„ํ•ด ์•ฑ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‚˜์ค‘์— ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์—…์„ ์ „ํ™˜ํ•˜๊ณ  Mona ์กฐ์ง์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์— ์•ก์„ธ์Šคํ•  ๋•Œ ์‚ฌ์šฉ์ž ๊ณ„์ •์—์„œ Mona ์กฐ์ง์˜ ์ฝ”๋“œ ๋ฐ ๋ถ„์„์„ ๊ณ„์† ๋ณผ ์ˆ˜ ์žˆ๋‚˜์š”?

๋”ฐ๋ผ์„œ ์•ฑ์ด ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์›๋ณธ์„ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์•ฑ์ด ์กฐ์ง์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ์œ„ํ˜‘์ด๋ฉฐ ์•ฑ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ณดํ˜ธํ•œ๋‹ค๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์•ฑ์„ ๊ธˆ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์˜ ์•ฑ ์•ก์„ธ์Šค ๊ถŒํ•œ ํ™•์ธ

์‚ฌ์šฉ์ž์˜ OAuth ์•ฑ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ์ง ๋˜๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ์˜ ๊ตฌ์„ฑ์›๋งŒ ์•ฑ์„ ์‚ฌ์šฉํ•˜๊ธธ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์— ๋กœ๊ทธ์ธํ•  ๋•Œ ์‚ฌ์šฉ์ž์˜ ๋ฉค๋ฒ„ ์ž๊ฒฉ ์ƒํƒœ๋ฅผ ๊ฒ€์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ์„ฑ์›์ธ ์กฐ์ง ๋ชฉ๋ก์„ ์ฐพ์œผ๋ ค๋ฉด "์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์กฐ์ง ๋‚˜์—ด" ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์•ฑ์—์„œ ์Šน์ธ๋œ ์กฐ์ง ๋ชฉ๋ก๊ณผ ๋Œ€์กฐํ•˜์—ฌ ์ด ๋ชฉ๋ก์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์กฐ์ง์— ๋Œ€ํ•œ REST API ์—”๋“œํฌ์ธํŠธ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์•ฑ์˜ ์ž๊ฒฉ ์ฆ๋ช… ๋ณดํ˜ธ

ํด๋ผ์ด์–ธํŠธ ์•”ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ฑ์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ณ  ์‚ฌ์šฉ์ž ์•ก์„ธ์Šค ํ† ํฐ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ† ํฐ์€ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ API ์š”์ฒญ์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ฑ์˜ ํด๋ผ์ด์–ธํŠธ ์•”ํ˜ธ์™€ ์ƒ์„ฑ๋œ ๋ชจ๋“  ํ† ํฐ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ† ๋ฆฌ์ง€ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ์ƒ๋Œ€์  ๋ณด์•ˆ ์ˆ˜์ค€์€ ํ†ตํ•ฉ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์‹คํ–‰๋˜๋Š” ํ”Œ๋žซํผ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ ์ค‘์ธ ํ”Œ๋žซํผ์— ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์Šคํ† ๋ฆฌ์ง€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€

์•ฑ์ด ๋””๋ฐ”์ด์Šค ํ๋ฆ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ, ์•ฑ์˜ ์‚ฌ์šฉ์ž ์•ก์„ธ์Šค ํ† ํฐ์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ OAuth ์•ฑ ๊ถŒํ•œ ๋ถ€์—ฌ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์•ฑ์ด ๊ธฐ๋ฐ€ ํด๋ผ์ด์–ธํŠธ์ธ ๊ฒฝ์šฐ, ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€์„ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด, ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€์„ ํ‚ค ์ž๊ฒฉ ์ฆ๋ช… ๋ชจ์Œ(์˜ˆ: Azure Key Vault)์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์•”ํ˜ธํ™”๋œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋˜๋Š” ๋น„๋ฐ€๋กœ ์„œ๋ฒ„์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

์•ฑ์ด ํผ๋ธ”๋ฆญ ํด๋ผ์ด์–ธํŠธ(์‚ฌ์šฉ์ž ๋””๋ฐ”์ด์Šค์—์„œ ์‹คํ–‰๋˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ, CLI ์œ ํ‹ธ๋ฆฌํ‹ฐ, ์‹ฑ๊ธ€ ํŽ˜์ด์ง€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ)์ธ ๊ฒฝ์šฐ, ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฝ”๋“œ์—์„œ ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€์„ ์ œ๊ณตํ•ด์•ผ ํ•˜๋ฉฐ, PKCE๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ ํ๋ฆ„์„ ๋ณด๋‹ค ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์—์„œ ์ƒ์„ฑํ•œ ํ† ํฐ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์ฒด ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œํ•œํ•  ๊ณ„ํš์ด๋ผ๋ฉด ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํผ๋ธ”๋ฆญ ํด๋ผ์ด์–ธํŠธ๋Š” ์‰ฝ๊ฒŒ ์Šคํ‘ธํ•‘์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋‚˜ ์•ฑ์˜ ํด๋ผ์ด์–ธํŠธ ID๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์œ  ์—†์ด ๋””๋ฐ”์ด์Šค ํ๋ฆ„์„ ํ™œ์„ฑํ™”ํ•˜์ง€ ๋งˆ์„ธ์š”.

ํผ๋ธ”๋ฆญ ํด๋ผ์ด์–ธํŠธ์—์„œ ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์šฐ๋ ค๋œ๋‹ค๋ฉด, ๋””๋ฐ”์ด์Šค ํ๋ฆ„๋ณด๋‹ค๋Š” PKCE๊ฐ€ ํฌํ•จ๋œ ๊ถŒํ•œ ๋ถ€์—ฌ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค. ๋””๋ฐ”์ด์Šค ํ๋ฆ„์—๋Š” ๋ฆฌ๋””๋ ‰์…˜ URI๊ฐ€ ์ „ํ˜€ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ณต๊ฒฉ์ž๊ฐ€ ๋””๋ฐ”์ด์Šค ํ๋ฆ„์„ ์•…์šฉํ•˜์—ฌ ์›๊ฒฉ์œผ๋กœ ์•ฑ์„ ๊ฐ€์žฅํ•˜๋Š” ํ”ผ์‹ฑ ๊ณต๊ฒฉ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์ œ์•ฝ๋œ ํ™˜๊ฒฝ(CLI, IoT ๋””๋ฐ”์ด์Šค, ํ—ค๋“œ๋ฆฌ์Šค ์‹œ์Šคํ…œ ๋“ฑ)์—์„œ ์•ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋””๋ฐ”์ด์Šค ํ๋ฆ„์„ ํ™œ์„ฑํ™”ํ•˜์ง€ ๋งˆ์„ธ์š”.

์‚ฌ์šฉ์ž ์•ก์„ธ์Šค ํ† ํฐ

์•ฑ์ด ์›น ์‚ฌ์ดํŠธ ๋˜๋Š” ์›น์•ฑ์ธ ๊ฒฝ์šฐ ๋ฐฑ ์—”๋“œ์—์„œ ํ† ํฐ์„ ์•”ํ˜ธํ™”ํ•˜๊ณ  ํ† ํฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ๊ณผ ๊ด€๋ จ๋œ ๋ณด์•ˆ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑ ์•ก์„ธ์Šค ํ† ํฐ๊ณผ ๋ณ„๋„์˜ ์œ„์น˜์— ์ƒˆ๋กœ ๊ณ ์นจ ํ† ํฐ์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์•ฑ์ด ๋„ค์ดํ‹ฐ๋ธŒ ํด๋ผ์ด์–ธํŠธ, ํด๋ผ์ด์–ธํŠธ ์ชฝ ์•ฑ ๋˜๋Š” ์‚ฌ์šฉ์ž ๋””๋ฐ”์ด์Šค์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ(์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š์Œ) ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” ์•ฑ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ† ํฐ๋„ ๋ณดํ˜ธํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ ํ”Œ๋žซํผ์— ๊ถŒ์žฅ๋˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ํ† ํฐ์„ ์ €์žฅํ•˜๊ณ  ์Šคํ† ๋ฆฌ์ง€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ๋ณด์•ˆ์ด ์™„์ „ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ ์ ˆํ•œ ํ† ํฐ ํ˜•์‹ ์‚ฌ์šฉํ•˜๊ธฐ

OAuth apps์€(๋Š”) ์ธ์ฆ๋œ API ์š”์ฒญ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์•ก์„ธ์Šค ํ† ํฐ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์€ ์ธ์ฆ์„ ์œ„ํ•ด personal access token ๋˜๋Š” GitHub ์•”ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๋ณด์•ˆ ์œ„๋ฐ˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ณ„ํš ์ˆ˜๋ฆฝ

๋ณด์•ˆ ์œ„๋ฐ˜์„ ์ ์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณ„ํš์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ฑ์˜ ํด๋ผ์ด์–ธํŠธ ์•”ํ˜ธ๊ฐ€ ์†์ƒ๋œ ๊ฒฝ์šฐ ์ƒˆ ์•”ํ˜ธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ƒˆ ์•”ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์•ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ์ด์ „ ์•”ํ˜ธ๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์•ก์„ธ์Šค ํ† ํฐ์ด ์†์ƒ๋œ ๊ฒฝ์šฐ ํ•ด๋‹น ํ† ํฐ์„ ์ฆ‰์‹œ ์ฒ ํšŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ OAuth ๊ถŒํ•œ ๋ถ€์—ฌ์— ๋Œ€ํ•œ REST API ์—”๋“œํฌ์ธํŠธ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ •๊ธฐ์ ์ธ ์ทจ์•ฝ์„ฑ ๊ฒ€์‚ฌ ์ˆ˜ํ–‰

์•ฑ์— ๋Œ€ํ•œ ์ •๊ธฐ์ ์ธ ์•ฝ์  ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•ฑ์˜ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ŠคํŠธํ•˜๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์ฝ”๋“œ ๊ฒ€์‚ฌ ๋ฐ ๋น„๋ฐ€ ๊ฒ€์‚ฌ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฝ”๋“œ ๊ฒ€์‚ฌ ์ •๋ณด ๋ฐ ๋น„๋ฐ€ ๊ฒ€์‚ฌ ์ •๋ณด์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ ์ ˆํ•œ ํ™˜๊ฒฝ ์„ ํƒํ•˜๊ธฐ

์•ฑ์ด ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„ ํ™˜๊ฒฝ์ด ์•ˆ์ „ํ•œ์ง€, ์•ฑ์— ๋Œ€ํ•ด ์˜ˆ์ƒ๋˜๋Š” ํŠธ๋ž˜ํ”ฝ ๋ณผ๋ฅจ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์•ˆ์ „ํ•œ ๋ฐฉ์‹์œผ๋กœ ์„œ๋น„์Šค ์‚ฌ์šฉํ•˜๊ธฐ

์•ฑ์—์„œ ์ œ3์ž ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์•ˆ์ „ํ•œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์•ฑ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ์„œ๋น„์Šค์—๋Š” ๊ณ ์œ ํ•œ ๋กœ๊ทธ์ธ ๋ฐ ์•”ํ˜ธ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์•ฑ์€ SaaS ์„œ๋น„์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฉ”์ผ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค์™€ ๊ฐ™์€ ์„œ๋น„์Šค ๊ณ„์ •์„ ๊ณต์œ ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  • ๊ด€๋ฆฌ ์—…๋ฌด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ง์›๋งŒ ์•ฑ์„ ํ˜ธ์ŠคํŠธํ•˜๋Š” ์ธํ”„๋ผ์— ๋Œ€ํ•œ ๊ด€๋ฆฌ์ž ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋กœ๊น… ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ์ถ”๊ฐ€

์•ฑ์— ๋Œ€ํ•œ ๋กœ๊น… ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ณด์•ˆ ๋กœ๊ทธ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ์ด๋ฒคํŠธ
  • ์„œ๋น„์Šค ๊ตฌ์„ฑ ๋ณ€๊ฒฝ ๋‚ด์šฉ
  • ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ
  • ์‚ฌ์šฉ์ž ๋ฐ ๊ทธ๋ฃน ๊ถŒํ•œ ๋ณ€๊ฒฝ
  • ๊ด€๋ฆฌ์ž๋กœ ์—ญํ•  ์ƒ์Šน

๋กœ๊ทธ๋Š” ๊ฐ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ์ผ๊ด€๋œ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ๊ธฐ๋ก๋œ ๋ชจ๋“  ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž, IP ์ฃผ์†Œ, ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ๊ธฐ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์‚ญ์ œ ํ™œ์„ฑํ™”

๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด ์ง€์› ๋‹ด๋‹น์ž์—๊ฒŒ ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ ์ „ํ™”๋ฅผ ๊ฑธ ํ•„์š”๊ฐ€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์ฐธ๊ณ  ์ž๋ฃŒ