Post

[Network] OAuth 2.0์ด๋ž€?

[Network] OAuth 2.0์ด๋ž€?

๐Ÿ“Œย OAuth 2.0์ด๋ž€?

image.png

OAuth 2.0 ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ third-party ์›น ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๊ถŒํ•œ ๋ถ€์—ฌ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ์‚ฌ์šฉ์ž๋Š” OAuth 2.0์„ ํ†ตํ•ด ์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๊ฐ™์€ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ third-party ์›น ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ • ์„œ๋น„์Šค์— ๋กœ๊ทธ์ธ ์‹œ ์นด์นด์˜ค, ๊ตฌ๊ธ€๊ณผ ๊ฐ™์€ ๊ณ„์ •์„ ํ†ตํ•ด ๋กœ๊ทธ์ธํ•œ ๊ฒฝํ—˜์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์ด OAuth 2.0์ด ์‚ฌ์šฉ๋œ ์˜ˆ์‹œ์ด๋‹ค.

๐Ÿ“Œย ์šฉ์–ด ์ •๋ฆฌ

OAuth 2.0์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. Resource Owner: ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž, OAuth 2.0์ด ์‚ฌ์šฉ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ด์šฉํ•˜๋ ค๋Š” ์‚ฌ์šฉ์ž
  2. Client: Resource Owner์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋Š” third party ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, Authorization/Resource Server ์ž…์žฅ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Client์ด๋‹ค.
  3. Authorization Server: ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ์„ ๋ถ€์—ฌ(์ธ๊ฐ€)ํ•˜๊ณ  ์—‘์„ธ์Šค ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ์„œ๋ฒ„
  4. Resource Server: ํ† ํฐ์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๊ฒ€์ฆ ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋ฒ„

OAuth 2.0์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ฃผ์š” ์šฉ์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. Authentication: ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.
  2. Authorization: ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.
  3. Access Token: ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ† ํฐ์ด๋‹ค. ๋งŒ๋ฃŒ ๊ธฐํ•œ์ด ์กด์žฌํ•œ๋‹ค.
  4. Refresh Token: ๋งŒ๋ฃŒ๋œ Access Token์„ ๊ฐฑ์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ† ํฐ์ด๋‹ค.

๐Ÿ“Œย ๋™์ž‘ ๋ฐฉ์‹

image.png

OAuth 2.0์—์„œ ์ธ์ฆ ๋ฐ ์ธ๊ฐ€๋ฅผ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋‚˜, ๊ทธ ์ค‘ Authorization Code Grant ์— ๋Œ€ํ•˜์—ฌ ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋‹จ๊ณ„๋ณ„๋กœ ์‚ดํŽด๋ณด์ž.

1. Resource Owner โ†’ Client: ๋กœ๊ทธ์ธ ์š”์ฒญ

์‚ฌ์šฉ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Client)์— ๋กœ๊ทธ์ธ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

2. Client โ†’ Authorization Server: ๋กœ๊ทธ์ธ ์š”์ฒญ

Client๊ฐ€ Authorization Server์—๊ฒŒ ์ธ์ฆ ๋ฐ ์ธ๊ฐ€๋ฅผ ์š”์ฒญํ•œ๋‹ค. ์š”์ฒญ ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ๋‹ค.

  • client _id: Client๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ณ ์œ ํ•œ ID
  • redirect_uri: ์ธ์ฆ ํ›„ ์‚ฌ์šฉ์ž๋ฅผ ๋ฆฌ๋””๋ ‰์…˜ํ•  URI
  • response_type: code ๋กœ ์„ค์ •ํ•ด์•ผ ํ•˜๋ฉฐ, ์ธ์ฆ์ด ์„ฑ๊ณตํ•˜๋ฉด Authorization Code๋ฅผ ๋ฐ›๋Š”๋‹ค.
  • scope: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค์— ์–ด๋–ค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ •์˜๋œ ๋ฌธ์ž์—ด

3. Authorization Server โ†’ Resource Owner: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ์ œ๊ณต

์ œ๊ณต๋œ ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ์ž๊ฒฉ ์ฆ๋ช…(์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ ๋“ฑ)์„ ์ž…๋ ฅํ•œ๋‹ค.

4. Resource Owner โ†’ Authorization Server: ID/PW ์ œ๊ณต

์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ž๊ฒฉ ์ฆ๋ช…์„ ํ†ตํ•ด ์ธ์ฆ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

5. Authorization Server โ†’ Resource Owner: Authorization Code ๋ฐœ๊ธ‰

์‚ฌ์šฉ์ž ์ธ์ฆ์— ์„ฑ๊ณตํ•˜๋ฉด Authorization Server๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ Authorization Code๋ฅผ ๋ฐœ๊ธ‰ํ•œ๋‹ค. ์ด ์ฝ”๋“œ๋Š” Client๊ฐ€ Access Token์„ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ž„์‹œ ์ฝ”๋“œ์ด๋‹ค.

6. Resource Owner โ†’ Client: Redirect URI๋กœ ๋ฆฌ๋””๋ ‰์…˜

Authorization Server๋Š” ์‚ฌ์šฉ์ž๋ฅผ Redirect URI๋กœ ๋ฆฌ๋””์„น์…˜ํ•˜๋ฉฐ, ์ด ๋•Œ URI์— Authorization Code๋ฅผ ํฌํ•จ์‹œํ‚จ๋‹ค.

7. Client โ†’ Authorization Server: Access Token ์š”์ฒญ

Client๊ฐ€ Authorization Code๋ฅผ ํ†ตํ•ด Access Token์„ ์š”์ฒญํ•œ๋‹ค. ์š”์ฒญ์— ํฌํ•จ๋˜์–ด์•ผ ํ•˜๋Š” ์ •๋ณด๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • grant_type: authorization_code ๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•œ๋‹ค.
  • code: ๋ฐœ๊ธ‰๋œ Authorization Code๋กœ ์„ค์ •ํ•œ๋‹ค.
  • redirect_uri
  • client_id
  • client_secret

8. Authorization Server โ†’ Client: Access Token ๋ฐœ๊ธ‰

Authorization Server๊ฐ€ ์š”์ฒญ์„ ๊ฒ€์ฆํ•œ ํ›„ Client์—๊ฒŒ Access Token์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค. ์ด ์‹œ์ ์— Refresh Token๋„ ๊ฐ™์ด ๋ฐœ๊ธ‰๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

9. Client โ†’ Resource Owner: ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์•Œ๋ฆผ

Client๋Š” ๋ฐœ๊ธ‰๋œ Access Token์„ DB ๋“ฑ์— ์ €์žฅํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋กœ๊ทธ์ธ์ด ์„ฑ๊ณต๋˜์—ˆ์Œ์„ ์•Œ๋ฆฐ๋‹ค.

10. Resource Owner โ†’ Client: ์„œ๋น„์Šค ์š”์ฒญ

์‚ฌ์šฉ์ž๊ฐ€ Client๋ฅผ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•œ๋‹ค.

11. Client โ†’ Resource Server: Access Token์œผ๋กœ API ํ˜ธ์ถœ

Client๋Š” Resource Server์— API ํ˜ธ์ถœ ์‹œ Access Token์„ ํ•จ๊ป˜ ์ „์†กํ•˜์—ฌ ์ธ์ฆ ๋ฐ ์ธ๊ฐ€๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

12. Resource Server โ†’ Client: Access Token ๊ฒ€์ฆ ๋ฐ ์„œ๋น„์Šค ์ œ๊ณต ์Šน์ธ

Resource Server๋Š” ๋ฐ›์€ Access Token์ด ๋งŒ๋ฃŒ๋˜์—ˆ๋Š”์ง€, scope์™€ ๊ถŒํ•œ์ด ์ ์ ˆํ•œ์ง€ ํ™•์ธํ•œ๋‹ค. ์œ ํšจ์„ฑ ๊ฒ€์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•  ์ค€๋น„๋ฅผ ํ•œ๋‹ค.

13. Resource Server โ†’ Client: ๋ฆฌ์†Œ์Šค ์ œ๊ณต

๊ฒ€์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด Resource Server๋Š” ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

๐Ÿ“Œย ์žฅ์ 

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

๐Ÿ“Œย ๋‹จ์ 

  • ๋ณธ์งˆ์ ์œผ๋กœ ์ธ๊ฐ€ ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ์ฆ‰, ์ธ์ฆ์„ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ธ์ฆ์„ ์œ„ํ•œ ์ถ”๊ฐ€์ ์ธ ํ”„๋กœํ† ์ฝœ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”๋ฅผ ์œ„ํ•ด SSL/TLS๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • Authorization Server์— ์˜์กด์ ์ด๋ฉฐ, ๋”ฐ๋ผ์„œ ์„œ๋ฒ„์— ๋ณด์•ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ถŒํ•œ ์œ„์ž„์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ“Œย ์ฐธ๊ณ 

https://hudi.blog/OAuth-2.0/

https://guide.ncloud-docs.com/docs/b2bpls-OAuth2

This post is licensed under CC BY 4.0 by the author.