[Spring Security] ์์ ๋ก๊ทธ์ธ ๊ตฌํ๊ธฐ (๋ก๊ทธ์ธ ๊ฐ๋ , JWT) - 1
๐ ๋ก๊ทธ์ธ์ ๋ํด
โญ ๋ก๊ทธ์ธ์ด๋?
"๋ก๊ทธ์ธ"
์น ๊ฐ๋ฐ ์ ๋ฌธํ๊ณ ํ๋ก์ ํธ๋ฅผ ํด ๋ดค์ผ๋ฉด
ํ ๋ฒ์ฏค์ ๋ก๊ทธ์ธ ๊ตฌํ์ ๋ํด ๊ณ ๋ฏผํด ๋ดค์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
๋ก๊ทธ์ธ์ด๋ ๋ฌด์์ผ๊น?
์ ๊ทผ ๊ถํ์ ์ป๊ธฐ ์ํด ์์คํ ์ ์๊ธฐ ์์ ์ ์ฆ๋ช ํ๋ ๊ฒ์ ๋งํ๋ค.
์ฌ๊ธฐ์ ์ฆ๋ช ๊ณผ ์ ๊ทผ ๊ถํ์ด๋ผ๋ ๋ง์ด ๋์จ๋ค.
๊ฐ๋ฐ์์ ์ข ๋ ์์ฃผ ์ฌ์ฉํ๋ ๋จ์ด๋ก ์นํํด์ ๋งํ์๋ฉด
์ฆ๋ช ์ ์ธ์ฆ(Authentication),
์ ๊ทผ ๊ถํ์ ์ธ๊ฐ(Authorization)๋ผ๊ณ ๋งํ ์ ์๋ค.
์๋ฅผ ๋ค์ด,
- ๊ฒ์ ์์ ์๋ ๋ด ์บ๋ฆญํฐ์ ์ ์ํ๊ธฐ ์ํด์
๊ฒ์ ์๋ฒ๋ก๋ถํฐ ์์ ์ด ์บ๋ฆญํฐ ์ฃผ์ธ์์ ์ธ์ฆ(์ฆ๋ช )ํ๊ณ ์ธ๊ฐ(์ ๊ทผ ๊ถํ)๋ฅผ ๋ฐ์์ผ ํ๋ค. - ์ผํ๋ชฐ์ ์ ์ํด ์ํ๋ ๋ฌผ๊ฑด์ ์ฃผ๋ฌธํ๊ธฐ ์ํด์
์ผํ๋ชฐ ์๋ฒ๋ก๋ถํฐ ์์ ์ด ์ผํ๋ชฐ์ ๊ฐ์ ๋์ด ์๋ ํน์ ์ธ๋ฌผ์์ ์ธ์ฆ(์ฆ๋ช )ํ๊ณ
์ฃผ๋ฌธํ ์ ์๋ ์๊ฒฉ์ธ ์ธ๊ฐ(๊ถํ)๋ฅผ ๋ฐ์์ผ ํ๋ค.
์ ๊ณผ์ ์ ์ํด ๋ก๊ทธ์ธ์ด๋ผ๋ ๊ฒ์ด ์กด์ฌํ๋ค.
์ธ์ฆ ๊ณผ์ ์ ๊ฑฐ์ณ ๋ด๊ฐ ํด๋น ์๋น์ค์ ํ์์์ ์ฆ๋ช ํ๊ณ ์ธ๊ฐ๋ฅผ ๋ฐ๋ ๊ฒ.
์์ฆ์ ๋ง์ฐ์ค ๋ช ๋ฒ ํด๋ฆญ์ด๋ฉด ๋ก๊ทธ์ธ์ด ๋๋ ์ธ์์ด๋ค.
์ ์ ์๊ฒ ๊ฐ๋จํ๊ณ ์ฌ์ด ๋ก๊ทธ์ธ์ ์ ๊ณตํ๊ธฐ ์ํด
ํ๋ฉด ๋คํธ์์ ๋ง์ ๊ตฌํ ๊ณผ์ ๋ค์ด ์ด๋ฃจ์ด์ง๊ณ ์๋ค.
๊ฐ๋ฐ์์ ๊ด์
ํนํ, ๋ฐฑ์๋์ ๊ด์ ์ผ๋ก ๋ก๊ทธ์ธ ๊ตฌํ ๊ณผ์ ์ ๊ธฐ๋กํ๊ณ ์ถ๋ค.
๋ก๊ทธ์ธ ๊ตฌํ์ ์ ๋ง ๋ค์ํ ๋ฐฉ์์ผ๋ก ํ ์ ์๋ค.
๊ทธ์ค ํ์ฌ ์งํํ๊ณ ์๋ ํ๋ก์ ํธ์ ์ ์ฉํ ๋ฐฉ์์ผ๋ก ๊ธฐ๋กํ ์์ ์ธ๋ฐ
- Spring Boot 3
- Spring Security 6
- JWT
- OAuth 2.0
์ด๋ฌํ ๊ธฐ์ ์คํ์ ์ ์ฉํ ๊ฒฝํ์ ๊ธฐ๋กํ๋ค.
โญ Spring Security๋ฅผ ์ฌ์ฉํ๋ ์ด์
๋ก๊ทธ์ธ ๊ตฌํ ๋์ด๋๋ฅผ ์๋นํ ์ฌ๋ ค์ฃผ๋
Spring Security๋ฅผ ๊ตณ์ด ์ฌ์ฉํ๋ ์ด์ ๋
์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ .
๐ [Spring Security] ๋ณด์๊ณผ Spring Security
???: ์ํ๋ฆฌํฐ ๊ตฌํ ๋์ด๋๋ ์๊ฐ์ด ๋ถ๋ด์ด ๋์ด์ ๋์ ํ๊ธฐ ์ซ์ด์.
๊ทธ๋ ๋ค๋ฉด ๋ชจ๋ ์์ฒญ์ ๋ํ ์ธ์ฆ, ์ธ๊ฐ ๋ก์ง์ ์ง์ ๊ตฌํํ์ ์ผ ํ๋ค.
๋ฌผ๋ก Spring Security๋ ๋ณธ์ธ ์๋น์ค์ ๋ง๊ฒ ์ปค์คํ ์ด ๋ค์ด๊ฐ์ผ ํ๋ค.
ํ์ง๋ง ์ง์ ํํฐ๋ ์ธํฐ์ ํฐ๋ฅผ ๊ตฌํํ๋ ๊ฒ๋ณด๋จ
๊ธฐ๋ณธ์ ์ธ ๋ณด์ ์ธ์ฆ ํํฐ ๋ฐ ๋ก์ง ์ ๊ณต, ๊ณต์ ๋ฌธ์ ๋ฐ ๋ ํผ๋ฐ์ค๊ฐ ๋ง์ Spring Security ์ฌ์ฉ์ด ์ข ๋ ์์ํ ์ ์๋ค.
์ญ์ ์ ์๋ ํ์๋ ์ด๊ฒ๋ ํ๊ธฐ ๋๋ฆ.
๊ทธ๋ฌ๋ฏ๋ก
๋ก๊ทธ์ธ์ ๋ํ ์ผํ๊ฒ ๊ตฌํํ๊ณ ์ถ์ง ์๊ณ ๊ฐ๋จํ๊ฒ ๊ตฌ์ฑํ๊ณ ์ถ์ผ๋ฉด
์ผ๋ง๋ ์ง ์๊ฐ, ๋ ธ๋ ฅ์ ์ค์ฌ์ ๊ตฌํํ ์ ์๋ค.
ํ์ง๋ง ๊ทธ๋งํผ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ์ ์ ๋ขฐ๋๊ฐ ๋จ์ด์ง๋ ๋ฐ๋น๋ก๋ฅผ ๊ฐ์ง๋ค.
๋ฐ๋ผ์ Spring Security ๋์ ์ ๋ฌด์กฐ๊ฑด ํ ํ์๋ ์๋ค.
๊ฐ๋ฐ์์ ๋ฌด์กฐ๊ฑด์ ์๊ธฐ ๋๋ฌธ์
๋ณธ์ธ์ ํ๋ก์ ํธ ํฌ๊ธฐ, ๋ง๊ฐ ์๊ฐ, ์ํฉ ๋ฑ์ ๋ฐ๋ผ ์ ์ฐํ ํ๋จ์ด ํ์ํ๋ค.
์ด์ ์๋ ์ ๋ชจ๋ฅด๊ณ ๋ฌด์์ ์ผ์๊ธฐ ๋๋ฌธ์
์ด๋ฒ ํ๋ก์ ํธ์ ๋ค์ ์ ์ฉํ๋ฉด์ ์ ๋๋ก ์์๋ณด๊ธฐ๋ก ํ๋ค.
ํ์์ ๋ณด์์ ์ค์ํ๊ฒ ์๊ฐํ๊ธฐ๋ ํ๊ณ
์ข ๋ ์๊ณ ์จ๋ดค์ผ๋ฉด ์ข๊ฒ ๋ค๋ ๋ง์์
์ฐ์ Spring Security 6 ์ ๋ฃ ๊ฐ์๋ฅผ ๋ค์๊ณ
๊ณต์ ๋ฌธ์ ๋ฐ ๋ค์ํ ๋ ํผ๋ฐ์ค๋ฅผ ์ฐธ๊ณ ํ๋ค.
๊ทธ๋๋ ์ฌ์ ํ ๋๋ฌด ์ด๋ ต๋ค ใ
๐ JWT(Json Web Token)
โญ JWT๋?
์ธ์ฆ์ ํ์ํ ์ ๋ณด๋ค์ ์ํธํ์ํจ JSON ํ ํฐ์ด๋ค.
JWT๋ JSON ๋ฐ์ดํฐ๋ฅผ Base64 URL-safe Encode๋ฅผ ํตํด ์ธ์ฝ๋ฉํ์ฌ ์ง๋ ฌํํ ๊ฒ์ด๊ณ ,
ํ ํฐ ๋ด๋ถ์๋ ๊ฐ์ธํค๋ฅผ ํตํ ์ ์์๋ช ์ด ๋ค์ด์๋ค.
โป Base64 URL-safe Encode๋, ์ผ๋ฐ์ ์ธ Base64 Encode๋ฅผ URL์์ ์ค๋ฅ ์์ด ์ฌ์ฉํ๋๋ก
'+'์ '/'๋ฅผ ๊ฐ๊ฐ '-', '_'์ผ๋ก ํํํ ๊ฒ์ด๋ค.
JWT๋ ์ธ ๊ฐ์ง ์์๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- Header
- Payload
- Signature
๋ง์นจํ๋ก ๊ฐ ์์๋ฅผ ๊ตฌ๋ถํ๋ค.

ํ๋ก์ ํธ์์ ์ฌ์ฉ๋๊ณ ์๋ ํ ํฐ์ ๋ฏ์ด๋ณด๋ฉฐ ๊ฐ ์์๋ฅผ ์ค๋ช ํ๋ค.
1. Header(์๊ณ ๋ฆฌ์ฆ & ํ ํฐ ํ์ )

Header์๋ ์ ์์๋ช ์ ์ฌ์ฉ๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ ํ ํฐ์ ํ์ ์ ์ ์ฅํ๋ค.
ํ์ฌ ํ๋ก์ ํธ์ ์ ์ฉํ JWT์์๋ HS512 ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ณ ์๋ค.
2. Payload(๋ฐ์ดํฐ)

Payload์๋ Claim์ด๋ผ๋ ํ ํฐ์์ ์ฌ์ฉํ ์ ๋ณด๋ค์ด ๋ด๊ฒจ์๋ค.
์์ PAYLOAD์์ key-value ํ์์ผ๋ก ์ด๋ฃจ์ด์ง ํ๋์ ์๋ค์ด ๋ชจ๋ Claim์ด๋ค.
์ธ์ฆ ์์ ํ ํฐ์์ ์ค์ ๋ก ์ฌ์ฉ๋ ์ ๋ณด๋ฅผ ์๋ฏธํ๋ค.
์ฌ๋ฌ Claim๋ค์ JWT ํ ํฐ ์์ฑ ์์ ๊ฐ๋ฐ์๊ฐ ์ด๋ค Claim์ ๋ฃ์์ง ์ ํ ํ ๋ง์๋๋ก ๋ฃ์ ์ ์๋ค.
JWT์ ํ์ค ์คํ์๋ 7๊ฐ์ Claim์ด ์ ์๋์ด ์๋ค.
๋ชจ๋ ํ์๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์๋๋ค.
1. iss(Issuer) : ํ ํฐ ๋ฐ๊ธ์
2. sub(Subjec) : ํ ํฐ ์ ๋ชฉ - ํ ํฐ์์ ์ฌ์ฉ์์ ๋ํ ์๋ณ๊ฐ์ด ๋๋ค.
3. aud(Audience) : ํ ํฐ ๋์์
4. exp(Expiration Time) : ํ ํฐ ๋ง๋ฃ ์๊ฐ
5. nbf(Not Before) : ํ ํฐ ํ์ฑ ๋ ์ง (์ด ๋ ์ง ์ด์ ์ ํ ํฐ์ ํ์ฑํ ๋์ง ์์์ ๋ณด์ฅ)
6. iat(Issued At) : ํ ํฐ ๋ฐ๊ธ ์๊ฐ
7. jti(JWT Id) : JWT ํ ํฐ ์๋ณ์ (issuer๊ฐ ์ฌ๋ฌ ๋ช ์ผ ๋ ๊ตฌ๋ถํ๊ธฐ ์ํ ๊ฐ)
์ด๋ ๊ฒ ํ์ค ์คํ์ 7๊ฐ์ Claim์ด ์ ์๋์ด ์๊ณ ,
ํ์ํ๋ค๋ฉด ๊ฐ๋ฐ์๊ฐ ์ถ๊ฐ๋ก ์์ฑํด๋ ๋ฌธ์ ๊ฐ ์๋ค.
์ ํ๋ก์ ํธ์์๋ ํ ํฐ์์ ์ฌ์ฉ์์ ๊ณ ์ ๋ฒํธ์ ๊ถํ์ ์ถ์ถํ๊ธฐ ์ํด,
์์ JWT Payload์์ 3๋ฒ์งธ, 4๋ฒ์งธ Claim์ผ๋ก ์ฌ์ฉ์ ์ ์ Claim์ธ 'memberId', 'role'์ ๋ณ๋๋ก ์ถ๊ฐํ๋ค.
์ด๋, ์ฃผ์ํด์ผ ํ ์ ์ Payload์๋ ์ํธํ๊ฐ ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์, ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ด์ง ์์์ผ ํ๋ค.
๋๊ตฌ๋ JWT Decoding์ ํตํด Payload์ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์
๋จ์ํ๊ฒ "์๋ณ์ ์ํ" ์ ๋ณด๋ง์ ๋ด์๋์ด์ผ ํ๋ค.
3. Signature(์๋ช )

Signature๋ ์ํธํ๋์ด ์๊ธฐ ๋๋ฌธ์,
์ธ๋ถ์์ ๋ณตํธํ๋ฅผ ์งํํด๋
์ค์ ์๋ช ์ด ๋์ค์ง ์๊ณ , ์ํธํ์ ๊ตฌ์กฐ๋ง ๋ํ๋๊ฒ ๋๋ค.
์ํธํ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๋ฉด, ์์ JWT ์ ์์ ๋ํด์ ๋งํ ๋ ์ธ๊ธ๋์๋
Base64 URL-safe Encode๋ฅผ ์ฌ์ฉํ Header์ Payload๋ฅผ ์ํธํํ ๊ฒ์ ๋ณผ ์ ์๋ค.
๊ทธ๋ค์์ your-256-bit-secret๋ก
์๋ฒ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ณ ์ ๊ฐ์ธํค๋ฅผ ์ํธํํ๊ธฐ ๋๋ฌธ์
์ธ๋ถ์์ Signature๋ฅผ ๋ณตํธํ ํ ์ ์๋ ๊ฒ์ด๋ค.
JWT ๊ธฐ๋ฐ ์ธ์ฆ ๋ฐฉ์์
ํ ํฐ ์์ฒด์ ์ฌ์ฉ์์ ์ ๋ณด๋ค์ด ํฌํจ๋์ด ์๋ค๋ ์ (Self-contained)์ด ํน์ง์ด๋ค.
ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ์์์ผ ํ๋ Stateful ๋ฐฉ์์์ JWT ๋ฐฉ์์ผ๋ก ๋ฐ๊พธ๊ฒ ๋๋ฉด
์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ Statelessํ๊ฒ ์ค๊ณ๊ฐ ๊ฐ๋ฅํ๋ค.
๋ณดํต JWT ๊ธฐ๋ฐ ์ธ์ฆ์ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ์งํ๋๋ค.
1. ์ฌ์ฉ์๊ฐ ์๋ฒ์ ๋ก๊ทธ์ธ ์์ฒญ
2. ์๋ฒ์์ ์๋ช ๋ JWT ํ ํฐ์ ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ์ ์๋ต์ผ๋ก ๋ฐํ
3. ํด๋ผ์ด์ธํธ๋ ์๋ต์ผ๋ก ๋ฐํ๋ ํ ํฐ์ ์ฌ์ฉํ์ฌ ์์ฒญ ์ ๋ง๋ค HTTP Header์ ํ ํฐ์ ๋ด์ ์์ฒญ
4. ์๋ฒ์์๋ ์์ฒญ Header์ ์๋ ํ ํฐ์ด ์ ํจํ์ง ๊ฒ์ฆ ํ ์ ํจํ๋ค๋ฉด ์์ฒญ์ ๋ง๋ ์๋ต ๋ฐํ
โญ Access Token & Refresh Token
Access Token์ ๋ณดํต ์ธ์ฆ ์ ์ฌ์ฉ๋๋ JWT๋ฅผ ๋งํ๋ค.
ํ์ง๋ง
๋ง์ฝ ํด์ปค๊ฐ Access Token์ ํ์ทจํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
ํด์ปค๋ ํ์ทจํ Access Token์ ์ฌ์ฉํ์ฌ ์ฌ์ดํธ ๋ด ์ธ๊ฐ๊ฐ ํ์ํ ์ ๊ทผ์ด ๋ชจ๋ ๊ฐ๋ฅํด์ง ๊ฒ์ด๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Access Token์ ์ ํจ ๊ธฐ๊ฐ์ ์งง๊ฒ ํ๋ฉด ํด๊ฒฐํ ์ ์๋ค.
ํ ํฐ์ด ํธ๋ฆฌ๋๋ผ๋ ๊ทธ Access Token์ ์งง์ ์๊ฐ ๋์ ๋ฐ์ ๋ชป ์ฐ๊ธฐ ๋๋ฌธ์ ๋์์ด ๋๋ ๊ฒ์ด๋ค.
๊ณต๊ต๋กญ๊ฒ๋
Access Token์ ์ ํจ ๊ธฐ๊ฐ์ ์งง๊ฒ ์ค์ ํ๊ฒ ๋๋ฉด ์ ์ ์ ์ฅ์์ ๋งค์ฐ ๊ท์ฐฎ๊ณ ๋ฒ๊ฑฐ๋ก์ธ ๊ฒ์ด๋ค.
์งง์ ์ฃผ๊ธฐ๋ง๋ค ์ฌ๋ก๊ทธ์ธ์ ํด์ Access Token์ ๋ฐ๊ธ๋ฐ์์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ 'ํด์ปค ํ์ทจ ๋ฌธ์ -์ฌ์ฉ์์ ์ด์ฉ์ฑ'์ trade-off๊ฐ ๋ฐ์ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ด๋ฌํ trade-off๋ฅผ ํด๊ฒฐํด ์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก Refresh Token์ด๋ค.
Refresh Token์ ์ธ์ฆ์ด ์๋, Access Token์ ์ฌ๋ฐ๊ธ ํด์ฃผ๋ ์ญํ ์ JWT๋ค.
- Access Token์ ์ธ์ฆ ์ฒ๋ฆฌ ์ญํ
- Refresh Token์ Access Token ์ฌ๋ฐ๊ธ ์ญํ
๋ง์น ํธํ
์์ ๋ฐฉ ํค(Access Token)๋ฅผ ์์ด๋ฒ๋ ค๋
์ ๋ถ์ฆ(Refresh Token)์ผ๋ก ์์ ์ ์ฆ๋ช
ํด
๋ค์ ๋ฐฉ ํค(Access Token)๋ฅผ ์ป์ ์ ์๋ ๊ฒ๊ณผ ๊ฐ๋ค.
Refresh Token์ ์ฌ์ฉํ๋ค๋ฉด
Access Token์ ์ ํจ ๊ธฐ๊ฐ์ ์งง๊ฒ ๊ฐ์ ธ๊ฐ ์ ์๋ค.
์ฌ์ฉ์ ์ ์ฅ์์ Access Token์ ์ ํจ ๊ธฐ๊ฐ์ด ์งง์๋
Refresh Token์ ๊ฐ์ด ๋ณด๋ด๋ฉด Access Token์ ์ฌ๋ฐ๊ธ์ด ์ด๋ฃจ์ด์ง๋ฏ๋ก
๊ณ์ ์ฌ๋ก๊ทธ์ธ์ ํ ํ์๊ฐ ์์ด์ง๋ ๊ฒ์ด๋ค.
Access Token์ด ๋ง๋ฃ๋๋ฉด Refresh Token์ ํจ๊ป ๋ณด๋ด์ด
๋ค์ Access Token์ ์ฌ๋ฐ๊ธ ๋ฐ๋ ๋ฐฉ์์ผ๋ก ๋ก๊ทธ์ธ์ ๊ตฌํํ๋ค.
์์ธํ ๊ฑด ์ดํ ๊ธ์์ ๊ธฐ๋กํ๋ค.
๐ ๊ฒฐ๋ก
Session์ด๋ Cookie๋ฅผ ์ฌ์ฉํ์ง ์๊ณ
JWT๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ค์ํ๋ฐ,
์๋ฒ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ก์๋จน๋ ๋ถ๋ด์ ์ค์ด๊ณ ํ์ฅ์ฑ์ ๋์ด๋
Stateless ์ธ์ฆ ์ค๊ณ๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ๋ฌ ์๋ฒ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ Session/Cookie ๋ฐฉ์์ ๋๊ธฐํ๊ฐ ํ์ํ ๋ฐ๋ฉด
ํ ํฐ ๋ฐฉ์์ ์ด๋ค ์๋ฒ๋ก ์์ฒญ์ด ๊ฐ๋๋ผ๋ ํ ํฐ ๊ฒ์ฆ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์
ํ์ฅ์ฑ์ด ์ข๋ค๊ณ ํ๋ ๊ฒ์ด๋ค.
์ด์ธ์๋
- JWT๋ ์ ๋ณด๋ฅผ ์ํธํํ ์ ์์ผ๋ฉฐ, ์๋ช
์ด ๋์ด ์์ด์ ์ ๋ณด์ ์๋ณ์กฐ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
๋ํ, SSL/TLS์ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ค๊ฐ์ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ ์ ์๋ค.
Cookie๋ฅผ ์ฌ์ฉํ ๋๋ CSRF(Cross Site Request Forgery)์ ๊ฐ์ ๊ณต๊ฒฉ์ ์ทจ์ฝํ ์ ์๋ค. - JWT๋ ๋ชจ๋ฐ์ผ ์ฑ, ์น ์ฑ ๋ฑ ๋ค์ํ ํด๋ผ์ด์ธํธ์ ์์ฝ๊ฒ ํตํฉ๋ ์ ์๋ค.
๋ํ, CORS(Cross-Origin Resource Sharing) ๋ฌธ์ ์ ๋ํด์๋ ์ ์ฐํ๊ฒ ๋์ํ ์ ์๋ค.
Session/Cookie ๋ฐฉ์์ ๋์ผ ์ถ์ฒ ์ ์ฑ (Same-Origin Policy)์ ๋ ์๊ฒฉํ๊ฒ ์ ํ๋ ์ ์๋ค. - JWT๋ OAuth, OpenID Connect์ ๊ฐ์ ๋ค์ํ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ ํ๋ ์์ํฌ์ ์ ์๋ํ๋ค.
์ด๋ฅผ ํตํด ์์ ๋ก๊ทธ์ธ ๋ฑ ๋ค์ํ ์ธ์ฆ ๋ฐฉ์์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.
๊ฐ์ ์ด์ ๋ค์ด ์๋ค.
๋ค์ ๊ธ์์
OAuth ๊ฐ๋ ๊ณผ
๊ตฌํํ ๋ฐฉ์์ ๊ธฐ๋กํ๋ค.
๐ ๋ก๊ทธ์ธ ๊ตฌํ ๊ณผ์ ์ธ๋ฑ์ค
- [Spring Security] ๋ณด์๊ณผ Spring Security
- ๐ [Spring Security] ์์ ๋ก๊ทธ์ธ ๊ตฌํ๊ธฐ (๋ก๊ทธ์ธ์ด๋, JWT) - 1
- [Spring Security] ์์ ๋ก๊ทธ์ธ ๊ตฌํ๊ธฐ (OAuth, ๋ก๊ทธ์ธ ๊ตฌ์กฐ) - 2