Hello Ocean! ๐ŸŒผ

[OAuth 2.0] OAuth 2.0์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž! ๋ณธ๋ฌธ

Web

[OAuth 2.0] OAuth 2.0์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž!

bba_dda 2022. 1. 4. 19:26
๋ฐ˜์‘ํ˜•

ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์ค‘์— ์†Œ์…œ๋กœ๊ทธ์ธ ๊ตฌํ˜„์ด ํ•„์š”ํ•ด์„œ ์ด ๊ธฐ์ˆ ์— ๋Œ€ํ•ด ์ฒ˜์Œ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ทธ๋ƒฅ ๋ฌดํ„ฑ๋Œ€๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ๋ณด๋‹ค, ์–˜๊ฐ€ ๋ฌด์—‡์ด๊ณ  ์™œ ํ•„์š”ํ•œ์ง€์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด๊ณ  ์‚ฌ์šฉํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋‹ค.

 

OAuth 2.0์€ ๋ฌด์—‡์ธ๊ฐ€?

์ผ๋‹จ, ์–˜๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„์•ผ ํ•œ๋‹ค.

OAuth 2.0์˜ ๊ณต์‹๋ฌธ์„œ ์ฒซ ๋ฌธ๋‹จ์— ์†Œ๊ฐœ๊ฐ€ ๋‚˜์™€์žˆ๋‹ค.

OAuth 2.0 is the industry-standard protocol for authorization.
OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices.

์ •๋ฆฌํ•˜์ž๋ฉด,

Authorization(์ธ์ฆ)์„ ์œ„ํ•œ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์ด๋ฉฐ,

web, ๋ชจ๋ฐ”์ผ ๋ฐ ๊ธฐํƒ€ ๋“ฑ๋“ฑ์—์„œ ํŠน์ •ํ•œ authorizatioin(์ธ์ฆ)์„ ์ œ๊ณตํ•  ๋•Œ, client ๊ฐœ๋ฐœ์ž์˜ ํŽธ์˜์„ฌ์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด, ์–˜๊ฐ€ ์™œ ํ•„์š”ํ• ๊นŒ?

OAuth ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

๋‚ด ์ด๋ฆ„์„ ๋”ด Bada๋ผ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

Bada๋Š” ์‚ฌ์šฉ์ž์˜ ๊ตฌ๊ธ€ ๊ณ„์ •์˜ ์—ฐ๋ฝ์ฒ˜ ๋ชฉ๋ก์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด์„œ, Bada๊ฐ€ ์‚ฌ์šฉ์ž์˜ ํ—ˆ๋ฝ์„ ๋ฐ›์•„ ์‚ฌ์šฉ์ž์˜ ๊ตฌ๊ธ€ id, pw๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์ด ์˜ณ์„๊นŒ? ์ ˆ๋Œ€ ์•„๋‹ˆ๋‹ค!

 

๋ฌธ์ œ์ ์€ ํฌ๊ฒŒ ๋‘ ๊ฐœ์ด๋‹ค.

1) Bada๋Š” ์—ฐ๋ฝ์ฒ˜ ๋ชฉ๋ก ๋ฟ ์•„๋‹ˆ๋ผ, ๊ตฌ๊ธ€ ๋‚ด์˜ ์‚ฌ์šฉ์ž์˜ ๋ชจ~๋“  ์ •๋ณด์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

2) Bada๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ์„œ ๋ฐ›์€ ๊ตฌ๊ธ€ pw๋ฅผ ํ‰๋ฌธ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค.

→ ๋งํ•  ํ•„์š”๋„ ์—†์ด ๋ณด์•ˆ์— ๋งค์šฐ ์ทจ์•ฝํ•˜๋‹ค.

 

๊ทธ๋ž˜์„œ, ์‚ฌ์šฉ์ž์˜ ๊ตฌ๊ธ€ pw๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š๊ณ ๋„, ๊ตฌ๊ธ€์˜ ์—ฐ๋ฝ์ฒ˜ ๋ชฉ๋ก ์ •๋ณด์— ๋Œ€ํ•ด ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” Authorization Framework๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค. 

 

์ด ๊ฒƒ์ด OAuth์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ์ด๋‹ค.

OAuth 2.0 ํ๋ฆ„

Client Application    : Bada

Authorization Server : ๊ตฌ๊ธ€(์ธ์ฆ)

Resource Server       : ๊ตฌ๊ธ€(์ •๋ณด ์ œ๊ณต)

Resource Owner      : ์‚ฌ์šฉ์ž

 

1. Client Application๋“ค์€, Authorization Server์— Access Token์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.

2. Resource Owner๋“ค์€ Authorization Server์— ๋กœ๊ทธ์ธํ•˜๊ณ , Client Application์ด ํŠน์ • ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋™์˜ํ•˜๋ฉด ๋œ๋‹ค.

3. ๋ฐœ๊ธ‰๋ฐ›์€ Access Token์ด ์žˆ์œผ๋ฉด, Client Application์€ Resource Server์— ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ํŠน์ • ์ •๋ณด๋ฅผ ์š”์ฒญํ•ด ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

์œ„ ํ๋ฆ„์„ ํ†ตํ•ด์„œ,

1) ์šฐ๋ฆฌ๊ฐ€ ์œ„์—์„œ ํ•˜๊ณ ์žํ–ˆ๋˜ Bada๊ฐ€ ์‚ฌ์šฉ์ž์˜ ๊ตฌ๊ธ€๊ณ„์ •์˜ ์—ฐ๋ฝ์ฒ˜ ๋ชฉ๋ก์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

2) Bada๋Š” ์‚ฌ์šฉ์ž์˜ ๊ตฌ๊ธ€ pw๋ฅผ ์•Œ ์ˆ˜ ์—†์œผ๋ฉฐ, ์ ‘๊ทผ์„ ๋™์˜ํ•œ ์ •๋ณด ์ด์™ธ์˜ ๋‹ค๋ฅธ ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜๋„ ์—†๋‹ค. (๋ฌธ์ œ์  ํ•ด๊ฒฐ)

 

OAuth 2.0 ๊ตฌํ˜„

ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ → ๊ณต์‹๋ฌธ์„œ์— ๋งํฌ๋˜์–ด์žˆ๋Š” ์ฐธ๊ณ ์ž๋ฃŒ์ด๋ฉฐ, ์ง์ ‘ ๊ผญ ์ฝ์–ด๋ณด๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค. ์ดํ•ด๊ฐ€ ์•„์ฃผ ์ž˜๋จ!

1. implicit flow (์•”์‹œ์  ํ๋ฆ„)

implicit flow

SPA(Single Page Application)์—์„œ implicit flow๋กœ ๊ตฌํ˜„๋œ OAuth2.0๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์œ„ ๊ทธ๋ฆผ์—์„œ 6. Respond with TOKENS ๊ณผ์ •์ด ์ด๋ฃจ์–ด์งˆ ๋•Œ, ๋ธŒ๋ผ์šฐ์ €์˜ url์— token์ด ๋…ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

TOKEN์„ ์ค„ ๋•Œ, Client App์˜ callback url์„ ํ˜ธ์ถœํ•˜์—ฌ ์ „๋‹ฌํ•˜๋Š”๋ฐ,

์ด ๋•Œ ์ „๋‹ฌ๋˜๋Š” Token์ด Query ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•ํƒœ๋กœ ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

๊ทธ๋ž˜์„œ, ์ด๋Ÿฐ ์ผ์„ ๋ง‰๊ธฐ์œ„ํ•ด OpenId Connect(OIDC)๊ฐ€ ๋“ฑ์žฅํ•œ๋‹ค.

OIDC is a thin layer on top of OAuth 2.0 that introduces a new type of token: the Identity Token.

๋’ค์˜ 2,3๋ฒˆ์—์„œ code๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” identity๋ฅผ ์œ„ํ•œ token์„ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

2,3๋ฒˆ ๋ชจ๋‘ OAuth2.0 + OIDC ๋ฅผ ์ด์šฉํ•œ ๋ฐฉ์‹์ด๋ฉฐ, ์–ด๋–ค flow๋ฅผ ์‚ฌ์šฉํ–ˆ๋ƒ๊ฐ€ ๋‹ค๋ฅด๋‹ค.

2. Authorization Code Flow 

์œ„์˜ implicit flow์™€์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€,

callback url๋กœ ๋ฐ”๋กœ token์„ ์ „๋‹ฌ๋ฐ›๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, code๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค.

Client App์€ ์ด code๋กœ Authorization Sever์— Token์„ ์š”์ฒญํ•œ๋‹ค.

(Token์„ response bodyํ˜•ํƒœ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด ๋…ธ์ถœ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.)

 

Client Secret์ด ์‹ ์›ํ™•์ธ(Credentials)์„ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

 

* Client ID vs Client Secret

Client ID๊ฐ€ ์ด๋ฏธ ์žˆ๋Š”๋ฐ ์™œ Client Secret์ด ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•œ์ง€๊ฐ€ ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค.

OAuth์˜ ๊ด€๋ จ๋ฌธ์„œ๋ฅผ ์ฝ์–ด๋ณด๋ฉด, ์ž˜ ์„ค๋ช…๋˜์–ด์žˆ๋‹ค.

์š”์•ฝํ•˜์ž๋ฉด,

Client ID๋Š” publicํ•˜๋‹ค. (Application์„ ์œ„ํ•œ ๊ณต๊ฐœ ์‹๋ณ„์ž์ด๋‹ค.)

Client Secret๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋น„๋ฐ€. privateํ•˜๊ฒŒ ์ˆจ๊ฒจ์ ธ์•ผ ํ•˜๋Š” ๊ฐ’์ด๋‹ค. (Client App๊ณผ Authorization Server๋งŒ ์•Œ๊ณ ์žˆ๋„๋ก)

 

github์˜ OAuth๋ฅผ ์ด์šฉํ•  ๋•Œ, ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ redirect์‹œํ‚ค๋Š”๋ฐ, client_id๊ฐ€ ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

3. PKCE (Proof Key for Code Exchange)

2๋ฒˆ์˜ Authorization Code Flow์™€์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€, Client Secret์ด ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

Client Secret์˜ ๋‹จ์ ์€, Authorization Server์—์„œ ๋ฏธ๋ฆฌ ๋ฐœ๊ธ‰ํ•ด์ฃผ๋Š” ๊ณ ์ • ์•”ํ˜ธ๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

Client App์—์„œ ์ด ๊ฐ’์„ ์–ด๋””์—”๊ฐ€ ์ €์žฅํ•ด๋†”์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ถœ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ! 

๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ์ผํšŒ์šฉ ์•”ํ˜ธ๋ฅผ ๋งŒ๋“ค์–ด Client Secret ๋Œ€์‹ ์— ์ด์šฉํ•œ๋‹ค. 

์œ„ ํ๋ฆ„๋„์—์„œ ๋…ธ๋ž€์ƒ‰ ํ˜•๊ด‘ํŽœ์œผ๋กœ ์น ํ•ด์ง„ ๋ถ€๋ถ„์ด ๊ด€๋ จ ๋‚ด์šฉ์ด๋‹ค.

 

์ด ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ, github์˜ OAuth App์„ ๋งŒ๋“ค์–ด ํ…Œ์ŠคํŠธํ•ด๋ณด์•˜๋Š”๋ฐ github์—์„œ๋Š” 2๋ฒˆ ๋ฐฉ์‹์ธ Client Secret์„ ์ด์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

 

 

ํ›„๊ธฐ

์ธ์ฆ ํ”„๋กœํ† ์ฝœ์„ ๊ณต์‹๋ฌธ์„œ๋กœ ๊ณต๋ถ€ํ•ด ๋ณธ ๊ฒƒ์€ ์ฒ˜์Œ์ด์—ˆ๋‹ค.

์ž‘๋…„์— ๋ธ”๋กœ๊ทธ ๋ช‡ ๊ฐœ๋ฅผ ๋ดค์—ˆ๋Š”๋ฐ ์‰ฝ๊ฒŒ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์•˜์—ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ๊ณต์‹๋ฌธ์„œ๋กœ ๊ณต๋ถ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ดํ•ด๊ฐ€ ๋” ์ž˜๋˜๊ณ  ๊นŠ์€ ๋ถ€๋ถ„๊นŒ์ง€ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

 

์†Œ์…œ๋กœ๊ทธ์ธ ๊ตฌํ˜„์ด ํ•„์š”ํ•ด์„œ ์ ‘ํ•˜๊ฒŒ๋œ ํ”„๋กœํ† ์ฝœ์ด์—ˆ๋Š”๋ฐ, ๊ทธ๋ƒฅ ๊ฐ€์ ธ๋‹ค์“ฐ์ง€ ์•Š๊ณ  ์ด๋ ‡๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์–ด์„œ ์ข‹๋‹ค!

 

 

 

 

 

์ •ํ™•ํ•˜์ง€ ์•Š์€ ์ •๋ณด๊ฐ€ ์žˆ์„ ๋•Œ ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค :)

๋ฐ˜์‘ํ˜•