CS

OAuth 2.0 ๊ฐœ๋…๊ณผ ๋™์ž‘ ๊ณผ์ • ์ •๋ฆฌ

sun_young 2025. 1. 31. 15:35
๐Ÿ”Ž OAuth๋ž€? 
ํ•œ ์„œ๋น„์Šค์—์„œ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋กœ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์–ด๋Š ์›น ์‚ฌ์ดํŠธ์—์„œ ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ์ด๋‚˜ ์นด์นด์˜ค ๋กœ๊ทธ์ธ๊ณผ ๊ฐ™์ด ์™ธ๋ถ€ ์ธ์ฆ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ข…์ข… ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ตฌ๊ธ€์ด๋‚˜ ์นด์นด์˜ค์™€ ๊ฐ™์ด ์™ธ๋ถ€ ์ธ์ฆ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์€ OAuth ํ”„๋กœํ† ์ฝœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ธ์ฆ ๋ฐฉ์‹์ด๋‹ค.

 

OAuth๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํŠน์ • ์‹œ์Šคํ…œ์˜ ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ ๊ถŒํ•œ์„ ์œ„์ž„๋ฐ›๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

Authentication (์ธ์ฆ) ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์ด ์ฃผ์žฅํ•˜๋Š” ์‚ฌ๋žŒ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ์‹๋ณ„๊ณผ ์—ฐ๊ด€๋œ ๊ฐœ๋…
Authorization (์ธ๊ฐ€) ํ•ด๋‹น ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ์ ‘๊ทผ๊ณผ ์—ฐ๊ด€๋œ ๊ฐœ๋…

 

OAuth 2.0์˜ ํ•ต์‹ฌ ์ฃผ์ฒด

  1. Resource Owner
    ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ์œ ํ•œ ์‚ฌ์šฉ์ž
  2. Client
    ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์˜ ์ž์›์„ ์ด์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์„œ๋น„์Šค, ๋ณดํ†ต ์šฐ๋ฆฌ๊ฐ€ ๊ฐœ๋ฐœํ•˜๋ ค๋Š” ์„œ๋น„์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  3. Server(Authorization & Resource)
    Resource Owner๋ฅผ ์ธ์ฆํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ด์ฃผ๋Š” ์„œ๋ฒ„๋กœ, Resource Server๋Š” ๊ตฌ๊ธ€, ํŽ˜์ด์Šค๋ถ, ํŠธ์œ„ํ„ฐ์™€ ๊ฐ™์ด ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์„œ๋ฒ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

OAuth 2.0์˜ ๋™์ž‘ ๊ณผ์ •

1~4. Resource Owner๊ฐ€ '๊ตฌ๊ธ€๋กœ ๋กœ๊ทธ์ธ'๊ณผ ๊ฐ™์€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด์„œ ๋กœ๊ทธ์ธ ์š”์ฒญ ํ›„ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณต๋ฐ›๊ณ  ID์™€ PW๋ฅผ ์ž…๋ ฅํ•ด์„œ ๋กœ๊ทธ์ธํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

 

5~6. ์ธ์ฆ์ด ์„ฑ๊ณตํ•˜๋ฉด Authorization Server๋Š” Authorization Code๋ฅผ ๋ฐœ๊ธ‰ํ•˜๋ฉฐ ์ œ๊ณตํ•œ Redirect URI๋กœ ์‚ฌ์šฉ์ž๋ฅผ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œํ‚จ๋‹ค. (6๋ฒˆ ๊ณผ์ •์—์„œ Authorization Code๋ฅผ ํฌํ•จํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œํ‚จ๋‹ค.)

๐Ÿ’กAuthorization Code
ํด๋ผ์ด์–ธํŠธ๊ฐ€ Access Token์„ ํš๋“ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ž„์‹œ ์ฝ”๋“œ์ด๋‹ค. (์ผ๋ฐ˜์ ์œผ๋กœ 1~10๋ถ„ ์ •๋„์˜ ์ˆ˜๋ช… ์‹œ๊ฐ„์„ ๊ฐ€์ง„๋‹ค.)

๋„ค์ด๋ฒ„ API ์„ค์ • ์ผ๋ถ€

์œ„ ์‚ฌ์ง„์—์„œ ์„œ๋น„์Šค URL์€ ๋„ค์ด๋ฒ„ API๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(์šฐ๋ฆฌ ์„œ๋น„์Šค)์˜ URL์ด๋ฉฐ Callback URL์ด ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‹œ Authorization Code๋ฅผ ์ „๋‹ฌํ•˜๋Š” URL์ด๋‹ค. ์ฆ‰, ๋„ค์ด๋ฒ„ ๋กœ๊ทธ์ธ์ด ์„ฑ๊ณตํ•˜๊ฒŒ ๋˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์„ค์ •ํ•œ Callback URL๋กœ Authorization Code๊ฐ€ ์ „๋‹ฌ๋˜๊ฒŒ ๋œ๋‹ค.

 

7~9. ํด๋ผ์ด์–ธํŠธ๋Š” Authorization Code๋ฅผ Authorization Server์— ์ „๋‹ฌํ•˜์—ฌ Access Token์„ ์‘๋‹ต๋ฐ›์€ ํ›„ ๋ฐœ๊ธ‰ ๋ฐ›์€ ํ† ํฐ์„ ์ €์žฅํ•œ๋‹ค. (์ด๋•Œ Access Token์€ ์ œ 3์ž์—๊ฒŒ ์œ ์ถœ๋˜๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— HTTPS ์—ฐ๊ฒฐ์„ ํ†ตํ•ด์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.)

5๋ฒˆ๋ถ€ํ„ฐ 9๋ฒˆ๊นŒ์ง€์˜ ๊ณผ์ •์„ ํ†ตํ•ด (Authorization Code๋ฅผ ๋ฐœ๊ธ‰ ๋ฐ›๊ณ  ์ด๋ฅผ ํ†ตํ•ด Access Token์„ ๋ฐœ๊ธ‰ ๋ฐ›๋Š” ๊ณผ์ •) Access Token์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋‹ค. Authorization Code๋ฅผ ํ”„๋ก ํŠธ์—”๋“œ๋กœ ์ „๋‹ฌํ•˜๊ณ  ํ”„๋ก ํŠธ์—”๋“œ๋Š” ์ด๋ฅผ ๋ฐฑ์—”๋“œ๋กœ ์ „๋‹ฌํ•œ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ „๋‹ฌ ๋ฐ›์€ ๋ฐฑ์—”๋“œ๋Š” Authorization Code๋ฅผ Authorization Server์— ์ „๋‹ฌํ•˜๋ฉฐ Access Token์„ ๋ฐœ๊ธ‰๋ฐ›๋Š”๋‹ค. ์ด๋ ‡๊ฒŒ Access Token์€ ์šฐ๋ฆฌ ์„œ๋น„์Šค์™€ OAuth ์„œ๋น„์Šค์˜ ๋ฐฑ์ฑ„๋„์—์„œ๋งŒ ์ „์†ก๋˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๊ฒฉ์ž๊ฐ€ Access Token์„ ๊ฐ€๋กœ์ฑ„๊ธฐ ์–ด๋ ต๋‹ค.

 

11~14. Resource Owner๊ฐ€ Resource Server์˜ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์š”์ฒญํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์ €์žฅํ•ด๋‘” Access Token์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๊ณ  Resource Owner์—๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

OAuth 2.0์˜ ์Šค์ฝ”ํ”„

์Šค์ฝ”ํ”„๋ผ๋Š” ๊ฐœ๋…์„ ํ†ตํ•ด ์œ ์ € ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘๊ทผ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์œ„ ์‚ฌ์ง„์˜ ์‚ฌ์šฉ API ๋ถ€๋ถ„์ด ์Šค์ฝ”ํ”„์— ํ•ด๋‹นํ•˜๋Š”๋ฐ ๋„ค์ด๋ฒ„์—์„œ ์‚ฌ์ „์— ์™ธ๋ถ€์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ œ๊ณตํ•˜๋Š” ์ •๋ณด ์ค‘ ์šฐ๋ฆฌ ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์ •๋ณด๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. (์ด๋•Œ ๋„ค์ด๋ฒ„๋Š” Resource Server์— ํ•ด๋‹นํ•œ๋‹ค.)

→ ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌํ˜„ ์‹œ scope : name, email ์ด๋Ÿฐ ํ˜•์‹์œผ๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

 

๋”๋ณด๊ธฐ

[์ฐธ๊ณ ]
https://hudi.blog/oauth-2.0/

 

OAuth 2.0 ๊ฐœ๋…๊ณผ ๋™์ž‘์›๋ฆฌ

2022๋…„ 07์›” 13์ผ์— ์ž‘์„ฑํ•œ ๊ธ€์„ ๋ณด์ถฉํ•˜์—ฌ ์ƒˆ๋กœ ํฌ์ŠคํŒ…ํ•œ ๊ธ€์ด๋‹ค. OAuth ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ ์šฐ๋ฆฌ์˜ ์„œ๋น„์Šค๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ๊ตฌ๊ธ€์˜ ์บ˜๋ฆฐ๋”์— ์ผ์ •์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ํŽ˜์ด์Šค๋ถ, ํŠธ์œ„ํ„ฐ์— ๊ธ€์„ ๋‚จ๊ธฐ๋Š” ๊ธฐ๋Šฅ์„

hudi.blog

https://iam.furo.one/post/concept-oauth

 

Furo

๋“ค์–ด๊ฐ€๊ธฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ๊ณผ ์ธ์ฆ์˜ ์˜์—ญ์„ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, OAuth, JWT, SSO ๋“ฑ์˜ ํ•ต์‹ฌ์ ์ธ ์ธ์ฆ ํ‘œ์ค€์— ์ต์ˆ™ํ•ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ธ์ฆ ์Šคํƒ์„ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ์ง์ ‘

iam.furo.one

https://www.cloudflare.com/ko-kr/learning/access-management/what-is-oauth/

https://ksh-coding.tistory.com/62

 

Spring Security + JWT๋ฅผ ์ด์šฉํ•œ ์ž์ฒด Login & OAuth2 Login(๊ตฌ๊ธ€, ๋„ค์ด๋ฒ„, ์นด์นด์˜ค) API ๊ตฌํ˜„ (5) - OAuth๋ž€? / OAuth

๋ณธ๊ฒฉ์ ์œผ๋กœ, OAuth2 ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์—, OAuth๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. 1. OAuth(Open Authorization)๋ž€? OAuth์˜ ์‚ฌ์ „์  ์ •์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. OAuth๋Š” ์ธํ„ฐ๋„ท ์‚ฌ์šฉ์ž๋“ค์ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ œ๊ณตํ•˜์ง€

ksh-coding.tistory.com