LUCATHREE.COM

โ† Back to list
๐Ÿง TIL

[๋ฐฑ์—”๋“œ ๊ธฐ๋ณธ ๊ฐœ๋… ์ •๋ฆฌ] ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ€(Authorization)

์ž‘์„ฑ์ผ:
TILTerms

์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ€(Authorization)

๋‘˜ ๋‹ค ํŽธ์˜์ƒ auth๋กœ ์ค„์—ฌ ๋ถ€๋ฅด๊ธฐ๋„ ํ•˜๊ณ  ๊ตฌ๋ถ„์—†์ด โ€˜์ธ์ฆโ€™์œผ๋กœ ๋ถ€๋ฅด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ง€๋งŒ ์‚ฌ์‹ค ๋‘ ๊ฐœ๋…์€ ์—„์—ฐํžˆ ๋ถ„๋ฆฌํ•ด์„œ ๋ด์•ผํ•œ๋‹ค.
์ธ์ฆ(Authentication)์€ ์‚ฌ์šฉ์ž์˜ ์‹ ์›์„ ํ™•์ธํ•˜๋Š” ์ ˆ์ฐจ๋กœ, ์„œ๋น„์Šค ์ด์šฉ ๋Œ€์ƒ์˜ ํ™•์ธ ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค๊ณผ์˜ ๊ตฌ๋ถ„ ๋ฐ ์ •๋ณด ๋ณดํ˜ธ๋ฅผ ์ฃผ ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค. ์ธ๊ฐ€(Authorization)๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ณผ์ •์œผ๋กœ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ๊ณผ ์ž‘์—… ํ—ˆ๊ฐ€ ๋ฒ”์œ„ ๋“ฑ์„ ํ™•์ธํ•œ๋‹ค.
๊ณตํ†ต์ ์œผ๋กœ๋Š” ๋‘˜ ๋‹ค ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๊ณผ์ •์— ํ™œ์šฉ๋˜๋ฉฐ, ์ˆœ์„œ๋Š” ํ•ญ์ƒ ์ธ์ฆ ํ›„ ์ธ๊ฐ€๋กœ ์ด์–ด์ง„๋‹ค. (๋ˆ„๊ตฌ์ธ์ง€ ๋ชจ๋ฅด๋ฉด ๊ถŒํ•œ์„ ์ค„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ)

์›น์—์„œ์˜ ์ธ์ฆ๊ณผ ์ธ๊ฐ€

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

HTTP ํ”„๋กœํ† ์ฝœ ๋‚ด์—์„œ์˜ ํ•œ๊ณ„

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

์ฃผ์š” ์ธ์ฆ ๋ฐฉ์‹

โ€” HTTP ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ธ์ฆ ๋ฐฉ์‹๋“ค์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์ง€๋งŒ ๋Œ€ํ‘œ์ ์ธ ๋ช‡ ๊ฐ€์ง€๋ฅผ ์†Œ๊ฐœํ•ด๋ณธ๋‹ค.

Basic Authentication

๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์ธ์ฆ๋ฐฉ๋ฒ•์œผ๋กœ HTTP header์— ์‚ฌ์šฉ์ž์˜ username๊ณผ password๋ฅผ ํฌํ•จํ•˜์—ฌ ์„œ๋ฒ„์— ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.
๊ฐ„๋‹จํ•˜๊ณ  ๋ณ„๋„์˜ ์„ธ์…˜ ๊ด€๋ฆฌ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ Authorization: Basic <base64(username:password)> ํ˜•ํƒœ๋กœ Base64 ์ธ์ฝ”๋”ฉ์„ ์ ์šฉํ•œ๋‹ค๊ณ ๋Š” ํ•ด๋„ ์•”ํ˜ธํ™”๋ฅผ ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์ด ์ทจ์•ฝํ•˜๋‹ค.

์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ (์ฟ ํ‚ค ์ธ์ฆ)

์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด ์„œ๋ฒ„์—์„œ DB์— ์œ ์ € ์„ธ์…˜ ์ •๋ณด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์„ธ์…˜ ID๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ดํ›„ ํด๋ผ์ด์–ธํŠธ์˜ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ฟ ํ‚ค์— ์„ธ์…˜ ID๋ฅผ ์ €์žฅํ•ด๋†“๊ณ  ์ธ์ฆ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ์š”์ฒญ๋งˆ๋‹ค Cookie: session_id=โ€ฆ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ๋‹ค.
์„œ๋ฒ„์—์„œ๋Š” ์š”์ฒญ์ด ์˜ฌ ๋•Œ๋งˆ๋‹ค ์„ธ์…˜ ID๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ DB์˜ ์œ ์ € ์„ธ์…˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ, ํ˜„์žฌ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉ์ค‘์ธ ์œ ์ €๋“ค์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์œ ์šฉํ•˜์ง€๋งŒ ๋‹จ์ ์œผ๋กœ DB ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ์š”ํ•˜๋ฉฐ ์„œ๋ฒ„ ํ™•์žฅ ์‹œ ์„ธ์…˜ ๊ณต์œ  ๋ฌธ์ œ ๋“ฑ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ

์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‹œ ์„œ๋ฒ„๊ฐ€ ๋น„๋ฐ€ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐœํ–‰ํ•œ ํ† ํฐ์„ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ดํ›„ ์š”์ฒญ๋งˆ๋‹ค Authorization: Bearer <token> ์„ ํ—ค๋”์— ํฌํ•จํ•˜์—ฌ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„์—์„œ ํ† ํฐ์ด ์œ ํšจํ•œ์ง€๋ฅผ ๊ฒ€์ฆํ•˜๊ณ  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
์œ ์ €์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์„œ๋ฒ„๊ฐ€ ๊ธฐ๋กํ•ด๋†“๋Š” ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ์€ stateful ํ•œ ๋ฐฉ๋ฉด, ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์€ ์„œ๋ฒ„์—์„œ ํ† ํฐ์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋งŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— stateless ํ•˜๋‹ค.

JWT (JSON Web Token)

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์—์„œ ๋Œ€ํ‘œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ˜•์‹. JSON ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ํ† ํฐ์— ๋‹ด์•„ ์‚ฌ์šฉ์ž ์ •๋ณด, ๋งŒ๋ฃŒ ์‹œ๊ฐ„ ๋“ฑ์„ ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
  • header: ํ† ํฐ ์œ ํ˜•(=โ€JWTโ€)๊ณผ ์‚ฌ์šฉ๋œ ์„œ๋ช… ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ณด ๋‘ ๊ฐ€์ง€ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ๋‹ค.
  • payload: ์ •๋ณด(claim)๋ฅผ ๋‹ด๋Š” ๊ณต๊ฐ„์œผ๋กœ iss(๋ฐœ๊ธ‰์ž), sub(์ฃผ์ฒด), exp(๋งŒ๋ฃŒ ์‹œ๊ฐ„), iat(๋ฐœ๊ธ‰ ์‹œ๊ฐ„) ๋“ฑ์ด ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ ๊ทธ ์™ธ ์ž„์˜์˜ ์ •๋ณด๋„ ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • signiture: ํ—ค๋”+ํŽ˜์ด๋กœ๋“œ๋ฅผ ์„œ๋ฒ„์˜ ๋น„๋ฐ€ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ช…ํ•œ ๊ฐ’
JWT์˜ ์žฅ์ ์€ ์„œ๋ฒ„๊ฐ€ ์„ธ์…˜ ์ €์žฅ์†Œ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š์•„๋„ ๋˜๊ณ  ์—ฌ๋Ÿฌ ์„œ๋น„์Šค ๊ฐ„ ์ธ์ฆ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ํ™•์žฅ์„ฑ์ด ์ข‹๋‹ค๋Š” ๊ฒƒ, ๊ทธ๋ฆฌ๊ณ  ๋‹ค์–‘ํ•œ ์–ธ์–ด/ํ”Œ๋žซํผ์—์„œ ์ง€์›๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ payload์— ๋”ฐ๋ผ ํ† ํฐ์ด ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ๊ณ  ํ† ํฐ์ด ์ค‘๊ฐ„์— ํƒˆ์ทจ๋  ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€๋น„ํ•ด ํด๋ผ์ด์–ธํŠธ์—์„œ ์•ˆ์ „ํ•œ ๋ณด๊ด€๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•œ๋ฐ, ํ•œ๋ฒˆ ๋ฐœํ–‰๋œ ํ† ํฐ์€ ์ทจ์†Œํ•  ์ˆ˜ ์—†์–ด ์ด์— ๋Œ€ํ•œ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ด€๋ฆฌ๋‚˜ ์งง์€ ๋งŒ๋ฃŒ์‹œ๊ฐ„+๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ์‚ฌ์šฉ ๋“ฑ ๋Œ€๋น„๊ฐ€ ํ•จ๊ป˜ ํ•„์š”ํ•˜๋‹ค.

API Key ์ธ์ฆ

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

OAuth 2.0

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