OAuth 2.0 ์™€ Authorization Code Grant ๐Ÿ”‘

Lzhtkยท2025๋…„ 8์›” 3์ผ

๐Ÿ” OAuth 2.0์˜ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ์™€ Authorization Code Grant ํ๋ฆ„์„ ์•Œ์•„๋ณด์ž โ•

  • ํ˜„๋Œ€ ์›น ์„œ๋น„์Šค์—์„œ ์†Œ์…œ ๋กœ๊ทธ์ธ์ด๋‚˜ ์™ธ๋ถ€ API ์ ‘๊ทผ์„ ๊ตฌํ˜„ํ•  ๋•Œ ํ”ํžˆ ์‚ฌ์šฉ๋˜๋Š” ์ธ๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋ฐ”๋กœ OAuth 2.0์ด๋‹ค.
  • ์ด๋ฒˆ์— OAuth 2.0์˜ ํ•ต์‹ฌ ๊ฐœ๋…์ธ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ์™€ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ธ์ฆ ๋ฐฉ์‹์ธ Authorization Code Grant ํ๋ฆ„์„ ์•Œ์•„๋ณด์ž.
  • OAuth 2.0์€ ์ธ์ฆ(Authentication)๋ณด๋‹ค๋Š” ์ธ๊ฐ€(Authorization)์— ์ดˆ์ ์„ ๋‘” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

๐Ÿงฑ OAuth 2.0์˜ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ

  • OAuth 2.0์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ 4๊ฐ€์ง€ ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
์ปดํฌ๋„ŒํŠธ์„ค๋ช…
Resource Owner์ž์› ์†Œ์œ ์ž. ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ž(User)
Client์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๋ ค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (ex. ๋‚ด ์„œ๋น„์Šค)
Authorization Server์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ํ† ํฐ ๋ฐœ๊ธ‰์„ ๋‹ด๋‹น (ex. Google, Kakao, Naver)
Resource Server๋ณดํ˜ธ๋œ ์ž์›( API ๋“ฑ )์„ ๋ณด๊ด€ํ•˜๋ฉฐ, Access Token( Bearer Token )์œผ๋กœ ์ ‘๊ทผ ์ œ์–ด - Authorization Server์™€ ๊ฐ™์„ ์ˆ˜๋„ ์žˆ์Œ

EX )

๋‚ด ๋ธ”๋กœ๊ทธ์— ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋ถ™์˜€๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

  • Resource Owner : ๋ธ”๋กœ๊ทธ์— ๋กœ๊ทธ์ธํ•˜๋ ค๋Š” ์‚ฌ์šฉ์ž
  • Client : ๋‚ด ๋ธ”๋กœ๊ทธ ์„œ๋น„์Šค
  • Authorization Server : Google OAuth ์„œ๋ฒ„
  • Resource Server : Google์˜ ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ API

๐ŸŒŠ Authorization Code Grant Flow

  • Authorization Code Grant๋Š” OAuth 2.0์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํ๋ฆ„์ด๋ฉฐ, ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ ์‹œ์ 

    • ๋ณด์•ˆ์ด ์ค‘์š”ํ•œ ์„œ๋น„์Šค์ผ ๊ฒฝ์šฐ
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋น„๊ณต๊ฐœ ํด๋ผ์ด์–ธํŠธ ์‹œํฌ๋ฆฟ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„์ผ ๊ฒฝ์šฐ

๋‹จ๊ณ„๋ณ„ ์„ค๋ช… โญ

1๏ธโƒฃ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ์š”์ฒญ

  • ํด๋ผ์ด์–ธํŠธ( ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ )๋Š” ์ธ๊ฐ€ ์š”์ฒญ URL์„ ๊ตฌ์„ฑํ•˜์—ฌ ์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €๋ฅผ Authorization Server๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•œ๋‹ค.

2๏ธโƒฃ ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ๋™์˜

  • ์‚ฌ์šฉ์ž๊ฐ€ Google ๋กœ๊ทธ์ธ ํ›„, ์ •๋ณด ์ œ๊ณต์— ๋™์˜ํ•˜๋ฉด

3๏ธโƒฃ ์ธ๊ฐ€ ์ฝ”๋“œ ์ˆ˜์‹ 

  • Authorization Server๋Š” ํด๋ผ์ด์–ธํŠธ์˜ redirect_uri๋กœ ์ธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

4๏ธโƒฃ ์ธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด Access Token ์š”์ฒญ

  • ํด๋ผ์ด์–ธํŠธ๋Š” ์ด ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด Authorization Server์— Access Token์„ ์š”์ฒญํ•œ๋‹ค. ( POST ์š”์ฒญ )

5๏ธโƒฃ Access Token ์‘๋‹ต

  • Authorization Server๋Š” Access Token์„ ์‘๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

6๏ธโƒฃ ๋ณดํ˜ธ ์ž์› ์ ‘๊ทผ

  • ์ด์ œ ํด๋ผ์ด์–ธํŠธ๋Š” Access Token์„ ์‚ฌ์šฉํ•˜์—ฌ Resource Server์— API ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

์š”์•ฝ โœ…

์‚ฌ์šฉ์ž -> ์ธ์ฆ -> Authorization Server -> ์ธ๊ฐ€ ์ฝ”๋“œ ๋ฐœ๊ธ‰
-> Client -> Access Token ๋ฐœ๊ธ‰ -> API ์ ‘๊ทผ


๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ ๐Ÿ”

์œ„ํ—˜ ์š”์†Œ๋Œ€์‘ ๋ฐฉ์•ˆ
์ฝ”๋“œ ํƒˆ์ทจstate ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ CSRF ๋ฐฉ์ง€
Token ๋…ธ์ถœHTTPS ํ•„์ˆ˜, ํด๋ผ์ด์–ธํŠธ ์‹œํฌ๋ฆฟ ์„œ๋ฒ„์— ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€
ํ† ํฐ ๋งŒ๋ฃŒRefresh Token ์‚ฌ์šฉํ•˜์—ฌ ์žฌ๋ฐœ๊ธ‰
์ธ์ฆ ์œ„์กฐ์ธ์ฆ ์ฝ”๋“œ๋Š” 1ํšŒ์šฉ, ์งง์€ ์œ ํšจ์‹œ๊ฐ„ ์ ์šฉ

์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ? ๐Ÿคทโ€โ™€๏ธ

  • ์›น ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ๋ฐฑ์•ค๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœ ์ค‘์ผ ๊ฒฝ์šฐ
  • ๊ตฌ๊ธ€/๋„ค์ด๋ฒ„/์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ
  • ํ† ํฐ๊ณผ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ค„์•ผ ํ•  ๊ฒฝ์šฐ

๋งˆ๋ฌด๋ฆฌ ๐Ÿ”š

OAuth 2.0์˜ ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ ์—ญํ• ๊ณผ Authorization Code ํ๋ฆ„์˜ ์ˆœ์„œ๋ฅผ ์•Œ์•„๋ณด์•˜๋‹ค.
Authorization Code Grant๋Š” ๋ณด์•ˆ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ ๋ฉด์—์„œ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์ด๋ฏ€๋กœ ์ด๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ OAuth ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•  ๋•Œ ํฐ ํž˜์ด ๋  ๊ฒƒ์ด๋‹ค โ•
์š”์ฆ˜์€ ๋งŽ์€ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ OAuth 2.0 ์ธ์ฆ ๊ณผ์ •์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•˜์—ฌ์ฃผ์ง€๋งŒ, ๊ทธ ๋‚ด๋ถ€์—์„œ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ํ”ผํ•˜๊ณ , ํ•„์š” ์‹œ ์œ ์—ฐํ•œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค๐Ÿค—

0๊ฐœ์˜ ๋Œ“๊ธ€