โ 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 ํ ํฐ์ ๋ฐ๊ธํ๊ณ ํด๋น ํ ํฐ์ ์ฌ์ฉํ์ฌ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ ๋ฐฉ์์ด๋ค. ํ๋ก์ฐ๊ฐ ๋ณต์กํ๊ณ ๋ณด์ ์ทจ์ฝ์ ๊ด๋ฆฌ๊ฐ ํ์ํ๋ค๋ ๋จ์ ์ด ์์ง๋ง ๋ณด์ ์์ค์ด ๋๋ค.
ย
ย