๊ด€๋ฆฌ ๋ฉ”๋‰ด

JiYoung Dev ๐Ÿ–ฅ

Spring Security ์ ์šฉ๊ธฐ (1) Spring Security๋ž€? ๋ณธ๋ฌธ

Study/Java

Spring Security ์ ์šฉ๊ธฐ (1) Spring Security๋ž€?

Shinjio 2024. 4. 22. 22:25

์ƒˆ๋กญ๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด์„œ ์ ์šฉํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋˜ ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜์ธ Spring Security.

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

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์€ Spring Security ์ ์šฉ๊ธฐ์˜ ์ฒซ ๋ฒˆ์งธ ํŒŒํŠธ, Spring Security๋ž€ ๋ฌด์—ˆ์ธ์ง€์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. 

 

๋ชฉ์ฐจ
1. Spring Security ๊ฐœ๋…
2. Spring Security ํŠน์ง•
3. Architecture

 


๐Ÿค Spring Security ๊ฐœ๋…

Spring Security๋Š” ์ธ์ฆ, ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐ ์ผ๋ฐ˜์ ์ธ ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๋ณดํ˜ธ๋ฅผ ์ œ๊ณตํ•˜๋Š” Spring ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. 

 

๊ฐœ๋ฐœ์„ ํ•  ๋•Œ ๊ธฐ๋Šฅ ๋ถ€๋ถ„์—์„œ ๊ฐ€์žฅ ๋จผ์ € ์ž‘์—…ํ•˜๋Š” ๋ถ€๋ถ„์ด ๋ฐ”๋กœ ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์ผ ๊ฒƒ์ด๋‹ค.

๊ฐ„๋‹จํ•ด ๋ณด์ด์ง€๋งŒ ์‹ค์ œ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉ์ž ๊ฐœ์ธ์ •๋ณด์™€ ๋งž๋‹ฟ์•„ ์žˆ์–ด ๋ณด์•ˆ, ์ธ๊ฐ€ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์„ธ์…˜/๊ถŒํ•œ ๊ด€๋ฆฌ ๋“ฑ ์ƒ๊ฐํ•ด์•ผ ํ•  ๋ถ€๋ถ„์ด ๋งŽ์€ ๋ถ€๋ถ„์ด๋‹ค. Spring Security๋Š” Spring  ์ƒํƒœ๊ณ„ ๋‚ด์—์„œ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ณด์•ˆ ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ํšจ์œจ์ ์ด๊ณ  ์‹ ์†ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. 

 


๐Ÿค Spring Security ํŠน์ง•

Spring Security๋Š” ์ธ์ฆ, ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐ ์ผ๋ฐ˜์ ์ธ ์•…์šฉ์— ๋Œ€ํ•œ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•œ ํฌ๊ด„์ ์ธ ์ง€์›์„ ์ œ๊ณตํ•œ๋‹ค. 

๋˜ํ•œ ์‚ฌ์šฉ์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€์˜ ํ†ตํ•ฉ์„ ์ œ๊ณตํ•œ๋‹ค. 

 

1. ์ธ์ฆ(Authentication)

์ธ์ฆ์€ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์—‘์„ธ์Šคํ•˜๋ ค๋Š” ์‚ฌ๋žŒ์˜ ์‹ ์›์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. 

์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‚ฌ์šฉ์ž ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋„๋ก ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

2. ๊ถŒํ•œ ๋ถ€์—ฌ(Authorization)

1. ์š”์ฒญ ๊ธฐ๋ฐ˜ ๊ถŒํ•œ ๋ถ€์—ฌ

2. ๋ฉ”์†Œ๋“œ ๊ธฐ๋ฐ˜ ๊ถŒํ•œ ๋ถ€์—ฌ

 

๊ถŒํ•œ ๋ถ€์—ฌ๋ž€, ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์—‘์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

Spring Security๋Š” ์š”์ฒญ/ ๊ธฐ๋ฐ˜ ์ธ์ฆ๊ณผ ๋ฉ”์†Œ๋“œ ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ํ—ˆ์šฉํ•œ๋‹ค. 

 

3. ์•…์šฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ(Protection Against Exploits)

Spring Security๋Š” ์ผ๋ฐ˜์ ์ธ ์•…์šฉ์— ๋Œ€ํ•œ ๋ณดํ˜ธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. 

์—ฌ๊ธฐ์„œ ์ผ๋ฐ˜์ ์ธ ์•…์šฉ์ด๋ž€

1. CSRF

2. HTTP ํ—ค๋”

3. HTTP ์š”์ฒญ

์œ„์˜ 3๊ฐ€์ง€๋ฅผ ๋งํ•œ๋‹ค. 

 

3-1. CSRF(Cross Site Request Forgery) : ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์š”์ฒญ ์œ„์กฐ ๊ณต๊ฒฉ

CSRF๋Š” ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํŠน์ • ์š”์ฒญ์„ ๋ณด๋‚ด๋„๋ก ์œ ๋„ํ•˜๋Š” ๊ณต๊ฒฉ ํ–‰์œ„๋ฅผ ๋งํ•œ๋‹ค. 

CSRF๋Š” ์ƒ์„ฑ๋œ ์š”์ฒญ์ด ์‚ฌ์šฉ์ž์˜ ๋™์˜๋ฅผ ๋ฐ›์•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ทจ์•ฝ์ ์„ ์ด์šฉํ•œ๋‹ค. 

๊ณต๊ฒฉ์ž์˜ ์š”์ฒญ์ด ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์†์ด๋Š” ๊ณต๊ฒฉ ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์œ„์กฐ ์š”์ฒญ์ด๋ผ ํ•œ๋‹ค. 

 

CSRF๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์†์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฌด๋‹จ์œผ๋กœ ํŠน์ • ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. 

1. ๊ณต๊ฒฉ์ž๊ฐ€ ํŠน์ • ์€ํ–‰์˜ ๊ณ„์ขŒ์—์„œ ๊ณต๊ฒฉ์ž์˜ ๊ณ„์ขŒ๋กœ ์ฒœ๋งŒ์›์„ ์†ก๊ธˆํ•˜๋ผ๋Š” ์š”์ฒญ์„ ์œ„์กฐํ•œ๋‹ค. 
2. ์œ„์กฐํ•œ ์š”์ฒญ์€ ํ•˜์ดํผ๋งํฌ์— ์‚ฝ์ž…ํ•ด ์ด๋ฉ”์ผ๋กœ ์ „์†กํ•˜๊ฑฐ๋‚˜ ์›น์‚ฌ์ดํŠธ ์ž์ฒด์— ์‚ฝ์ž…ํ•œ๋‹ค. 
3. ์‚ฌ์šฉ์ž๊ฐ€ ๊ณต๊ฒฉ๊ฐ€ ์ƒ์„ฑํ•œ ์ด๋ฉ”์ผ ํ•˜์ดํผ๋งํฌ๋‚˜ ์›น์‚ฌ์ดํŠธ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด ์€ํ–‰์— ์ฒœ๋งŒ์›์„ ์†ก๊ธˆํ•˜๋ผ๋Š” ์š”์ฒญ์ด ์ „์†ก๋œ๋‹ค. 
4. ์š”์ฒญ์„ ๋ฐ›์€ ์€ํ–‰ ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ๋Œ€๋กœ ์†ก๊ธˆ์„ ์ง„ํ–‰ํ•œ๋‹ค. 

 

์œ„์™€ ๊ฐ™์ด CSRF ๊ณต๊ฒฉ์ด ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” ํ”ผํ•ด์ž ์›น์‚ฌ์ดํŠธ์˜ HTTP ์š”์ฒญ๊ณผ ๊ณต๊ฒฉ์ž ์›น์‚ฌ์ดํŠธ์˜ ์š”์ฒญ์ด ์ •ํ™•ํžˆ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

Spring Security๋Š” ์ด๋Ÿฌํ•œ ์œ„ํ—˜์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด 

1. ๋™๊ธฐํ™” ์žฅ์น˜ ํ† ํฐ ํŒจํ„ด(Synchronizer Token Pattern)

2. ์„ธ์…˜ ์ฟ ํ‚ค์— SameSite ์†์„ฑ ์ง€์ • ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. (SameSite Attribute)

โ€ป ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ์ฝ๊ธฐ ์ „์šฉ์ด์–ด์•ผ ํ•œ๋‹ค. 

 

๋™๊ธฐํ™” ์žฅ์น˜ ํ† ํฐ ํŒจํ„ด(Synchronizer Token Pattern)
ํ•ด๋‹น ์†”๋ฃจ์…˜์€ ๊ฐ HTTP ์š”์ฒญ์— Session, Cookie ์™ธ์—๋„ CSRF Token์ด๋ผ๋Š” ์•ˆ์ „ํ•œ ๋ฌด์ž‘์œ„ ์ƒ์„ฑ๊ฐ’์ด HTTP ์š”์ฒญ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค. HTTP ์š”์ฒญ์ด ์ œ์ถœ๋˜๋ฉด ์„œ๋ฒ„๋Š” ์˜ˆ์ƒ๋˜๋Š” CSRF ํ† ํฐ์„ ์กฐํšŒํ•˜๊ณ  ์ด๋ฅผ HTTP ์š”์ฒญ์— ๋‹ด๊ธด ํ† ํฐ ๊ฐ’๊ณผ ๋น„๊ตํ•˜์—ฌ ๊ฐ™์œผ๋ฉด ์š”์ฒญ์„ ์ˆ˜๋ฝํ•˜๊ณ , ๋‹ค๋ฅด๋ฉด ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. 

 

SameSite ์†์„ฑ
ํ•ด๋‹น ์†”๋ฃจ์…˜์€ ์›น ๋ธŒ๋ผ์šฐ์ € ์ฟ ํ‚ค ๋ณด์•ˆ๊ณผ ๊ด€๋ จ๋œ ์†์„ฑ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ด ์†์„ฑ์€ ์ฟ ํ‚ค๋ฅผ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์ „์†กํ•  ๊ฒƒ์ธ์ง€ ์ œ์–ดํ•œ๋‹ค. 
1. Strict : ์ฟ ํ‚ค๋Š” ํ•ญ์ƒ ๋™์ผํ•œ ์ถœ์ฒ˜ ์š”์ฒญ์—์„œ๋งŒ ์ „์†ก๋œ๋‹ค. 
2. Lax : ์ฟ ํ‚ค๋Š” ํƒ€์‚ฌ ์‚ฌ์ดํŠธ์—์„œ์˜ GET ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋งŒ ์ „์†ก๋œ๋‹ค. 
3. None : ์ฟ ํ‚ค๋Š” ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ์ „์†กํ•œ๋‹ค. ํ•ด๋‹น ์˜ต์…˜์€ ๋ณดํ†ต HTTPS ์—ฐ๊ฒฐ์—์„œ๋งŒ ๋™์ž‘ํ•˜๋ฉฐ, Secure ์†์„ฑ์ด ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•œ๋‹ค. 

 

4. ํ†ตํ•ฉ(Integration)

Spring Security๋Š” ์ˆ˜๋งŽ์€ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ API์™€์˜ ํ†ตํ•ฉ์„ ์ œ๊ณตํ•œ๋‹ค. 

๋Œ€ํ‘œ์ ์œผ๋กœ ์•”ํ˜ธํ™”, ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ, Java ๋™์‹œ์„ฑ API, Jackson, Localization์— ๋Œ€ํ•œ ํ†ตํ•ฉ์„ ์ œ๊ณตํ•œ๋‹ค. 

 

Cryptography
Spring Security Crypto ๋ชจ๋“ˆ์€ ๋Œ€์นญ์•”ํ˜ธํ™”, ํ‚ค ์ƒ์„ฑ ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ธ์ฝ”๋”ฉ์„ ์ง€์›ํ•œ๋‹ค. 

Spring Data Integration
Spring Security๋Š” ์ฟผ๋ฆฌ ๋‚ด์—์„œ ํ˜„์žฌ ์‚ฌ์šฉ์ž๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” Spring Data ํ†ตํ•ฉ์„ ์ œ๊ณตํ•œ๋‹ค. 

Concurrency Support
๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ Spring Security ์ž‘์—…์„ ์œ„ํ•œ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณตํ•œ๋‹ค. 

Jaskson Support
Spring Security๋Š” Spring Security ๊ด€๋ จ ํด๋ž˜์Šค๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Jackson ์ง€์›์„ ์ œ๊ณตํ•œ๋‹ค.

Localization
์ธ์ฆ ์‹คํŒจ ๋ฐ ์—‘์„ธ์Šค ๊ฑฐ๋ถ€์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋ฅผ ํ˜„์ง€ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿค Architecture

Spring Security์˜ ์„œ๋ธ”๋ฆฟ ์ง€์›์€ ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค. 

 

Figure 1. FilterChain

์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ(Servlet Filter)๋ž€?
Sevlet ์‹คํ–‰ ์ „, ํ›„์— ์–ด๋–ค ์ž‘์—…์„ ํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ Servlety Container์— ๋“ฑ๋กํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. 

[์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ ํ๋ฆ„]
• HTTP ์š”์ฒญ → WAS → Filter → Servlet → Controller
ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ํ•„ํ„ฐ๊ฐ€ ํ˜ธ์ถœ ๋œ ๋‹ค์Œ ์„œ๋ธ”๋ฆฟ์„ ํ˜ธ์ถœํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ๊ณ ๊ฐ์˜ ์š”์ฒญ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๋Š” ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ๋‹ค๋ฉด ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. 

[์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ ์ œํ•œ]
• HTTP ์š”์ฒญ → WAS →  Filter
์œ„์˜ ํ๋ฆ„๊ณผ ๊ฐ™์ด ํ•„ํ„ฐ์—์„œ ์ ์ ˆํ•˜์ง€ ์•Š์€ ์š”์ฒญ์ด๋ผ ํŒ๋‹จํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. 
์ด๋ ‡๊ฒŒ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ์ ˆํ•œ ์š”์ฒญ์ธ์ง€, ์ ์ ˆํ•˜์ง€ ์•Š์€ ์š”์ฒญ์ธ์ง€ ํŒ๋‹จํ•ด ์„œ๋ธ”๋ฆฟ์„ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ํ˜ธ์ถœํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜๊ธฐ์— ์ ํ•ฉํ•˜๋‹ค. 

[์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ ์ฒด์ธ]
• HTTP ์š”์ฒญ → WAS → Filter1 → Filter2 → Filter3 → Servlet Filter → Servlet → Controller
ํ•„ํ„ฐ๋ฅผ ์ฒด์ธํ•˜์—ฌ ๋‹ค์ˆ˜์˜ ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.  

 

1. DelegatingFilterProxy

Spring Security๋Š” ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” FilterChain๋“ค์„ Servlet Container ๊ธฐ๋ฐ˜์˜ ํ•„ํ„ฐ ์œ„์—์„œ ๋™์ž‘์‹œํ‚ค๊ธฐ ์œ„ํ•ด DelegatingFilterProxy๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•œ๋‹ค.

Spring Security์˜ ํ•„ํ„ฐ๋“ค์€ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹Œ ๋…๋ฆฝ์ ์ธ ๊ฐ์ฒด๋กœ ์ •์˜๋œ๋‹ค. ์ด๋ฅผ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ์™€ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด 'DelegatingFilterProxy'๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค. DelegatingFilterProxy๋Š” ์ธ์ฆ, ์ธ๊ฐ€, ๋กœ๊น… ๋“ฑ ๋ณด์•ˆ ๊ด€๋ จ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•„ํ„ฐ ์ฒด์ธ์„ ๊ด€๋ฆฌํ•˜๊ณ , ๊ฐ ํ•„ํ„ฐ๊ฐ€ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ์—์„œ ์ •์˜๋œ ๋นˆ์œผ๋กœ ์œ„์ž„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. 

์ฆ‰, DelegatingFilterProxy๋Š” ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ Spring Security ์‚ฌ์ด์˜ ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•œ๋‹ค. 

 

Figure 2. DelegatingFilterProxy

 

2. FilterChainProxy

FilterChainProxy๋Š” ๋ณด์•ˆ ํ•„ํ„ฐ๋“ค์„ ๊ด€๋ฆฌํ•˜์—ฌ HTTP ์š”์ฒญ์˜ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค. 

๊ฐ ํ•„ํ„ฐ๋Š” ํŠน์ •ํ•œ ๋ณด์•ˆ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ด๋Ÿฌํ•œ ํ•„ํ„ฐ๋“ค์€ ์ฒด์ธ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. 

๊ฐ๊ฐ์˜ ํ•„ํ„ฐ๋Š” ์š”์ฒญ์„ ๋ฐ›์•„๋“ค์ด๊ณ , ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ๋‹ค์Œ ํ•„ํ„ฐ๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•œ๋‹ค. 

์ด๋Ÿฐ์‹์œผ๋กœ ํ•„ํ„ฐ ์ฒด์ธ์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด์„œ ๋ณด์•ˆ ์ž‘์—…์ด ์ˆ˜ํ–‰๋œ๋‹ค. 

 

์ฃผ์š” ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉ์ž ์ธ์ฆ(Authentication), ์ธ๊ฐ€(Authorization), ์„ธ์…˜ ๊ด€๋ฆฌ, CSRF ๋ฐฉ์–ด, ๋กœ๊น… ๋“ฑ์ด ์žˆ๋‹ค. 

๊ฐ๊ฐ์˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ•„ํ„ฐ๋กœ ๊ตฌํ˜„๋˜๋ฉฐ, ์ด๋Ÿฌํ•œ ํ•„ํ„ฐ๋“ค์„ FilterChainProxy๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค. 

 

Spring Security์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ FilterChainProxy๊ฐ€ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ FilterChainProxy๋Š” ํŠน์ •ํ•œ ์š”์ฒญ ํŒจํ„ด ๋˜๋Š” ๋ณด์•ˆ ์ˆ˜์ค€์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ•„ํ„ฐ ์ฒด์ธ์„ ๊ด€๋ฆฌํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‹ค์–‘ํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๋ณด์•ˆ ๊ตฌ์„ฑ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

FilterChainProxy๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ์—์„œ ๋นˆ์œผ๋กœ ์ •์˜๋œ๋‹ค. ์ฆ‰, ์Šคํ”„๋ง IOC ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ด€๋ฆฌ๋˜๊ณ  ์˜์กด์„ฑ ์ฃผ์ž…์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์ง์ ‘์ ์œผ๋กœ ์Šคํ”„๋ง ๋นˆ์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๋Œ€์‹  ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์—์„œ Filter๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค. ์ฆ‰, ์Šคํ”„๋ง์—์„œ ๊ด€๋ฆฌ๋˜๋Š” FilterChainProxy๋ฅผ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” DelegatingFilterProxy๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ FilterChainProxy๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•œ๋‹ค. 

 

๊ฒฐ๊ตญ, FilterChainProxy๋Š” ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์ •์˜๋˜์ง€๋งŒ, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด DelegatingFilterProxy๋กœ ๋ž˜ํ•‘๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด FilterChainProxy๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ผ์ดํ”Œ์‚ฌ์ดํด์— ๋งž๊ฒŒ ๋™์ž‘ํ•˜๊ณ  ํ•„ํ„ฐ ์ฒด์ธ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

Figure 3. FilterChainProxy

3. SecurityFilterChain

SecurityFilterChain์€ ํ˜„์žฌ ์š”์ฒญ์— ๋Œ€ํ•ด ์–ด๋–ค Spring Security ํ•„ํ„ฐ ์ธ์Šคํ„ด์Šค๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด FilterChainProxy์— ์˜ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. 

 

Figure 4. SecurityFilterChain

 

SecurityFilterChain์— ์žˆ๋Š” ๋ณด์•ˆ ํ•„ํ„ฐ๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋นˆ์œผ๋กœ ์ •์˜๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ํ•„ํ„ฐ๋“ค์€ DeligatingFilterProxy ๋Œ€์‹  FilterChainProxy์— ๋“ฑ๋ก๋œ๋‹ค. 

 

Figure 5. Multiple SecurityFilterChain

 

๋‹ค์ค‘ SecurityFilterChain ๊ทธ๋ฆผ์—์„œ FilterChainProxy๋Š” ์–ด๋–ค SecurityFilterChain์„ ์‚ฌ์šฉํ•  ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. ์ผ์น˜ํ•˜๋Š” SecurityFilterChain๋งŒ ํ˜ธ์ถœ๋œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด /api/messages/ URL์ด ์š”์ฒญ๋œ ๊ฒฝ์šฐ, /api/** ํŒจํ„ด์˜ SecurityFilterChain0์— ์ผ์น˜ํ•˜๋ฏ€๋กœ SecurityFilterChain0๋งŒ ํ˜ธ์ถœ๋œ๋‹ค. 

4. Security Filters

์‹ค์ œ ์ธ์ฆ, ๊ถŒํ•œ ๋ถ€์—ฌ๊ณผ ๊ฐ™์€ ๋ณด์•ˆ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•„ํ„ฐ๋ฅผ ๋งํ•œ๋‹ค. ์ œ๊ณตํ•˜๋Š” ์ข…๋ฅ˜๋กœ๋Š” ์ธ์ฆ ํ•„ํ„ฐ(Authentication Filter), ์ธ๊ฐ€ ํ•„ํ„ฐ(Authorization Filter), ์„ธ์…˜ ๊ด€๋ฆฌ ํ•„ํ„ฐ(Session Management Filter), ๋กœ๊น… ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•„ํ„ฐ(Logging and Monitoring Filter) ๋“ฑ์ด ์žˆ๋‹ค. 

 

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

์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜๋Š” ์ธ์ฆ, ์ธ๊ฐ€ ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” Security Filter๋“ค์ด ์กด์žฌํ•˜๊ณ , ์ด๋Ÿฌํ•œ Security Filter๋Š” SecurityFilterChain์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. SecurityFilterChain์€ ๊ฐ ํ•„ํ„ฐ์˜ ์ˆœ์„œ์™€ ๊ตฌ์„ฑ์„ ์ •์˜ํ•œ๋‹ค. 

FilterChainProxy๋Š” ์‹ค์ œ๋กœ ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ ์ฒด์ธ์„ ๊ด€๋ฆฌํ•˜๋Š” Spring Security ์˜ ํ•ต์‹ฌ ํด๋ž˜์Šค๋กœ, HTTP ์š”์ฒญ์— ๋งž๋Š” SecurityFilterChain์„ ํ˜ธ์ถœํ•˜๊ณ , ์Šคํ”„๋ง์—์„œ ๊ด€๋ฆฌ๋˜๋Š” SecurityFilterChain์„ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก DelegationgFilterProxy๋กœ ๋ž˜ํ•‘ ์‹œ์ผœ ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ FilterChainProxy๋Š” ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ์—์Šค ๊ด€๋ฆฌ๋˜๋Š”, ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜๋Š” ํด๋ž˜์Šค๋กœ, DelegationgFilterProxy๋Š” ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ์— ๋“ฑ๋ก๋œ  Security ํ•„ํ„ฐ๋“ค์„ ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ์— ๋“ฑ๋กํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. 

 

๐Ÿ‘‍๐Ÿ—จ Security Filters : ์ธ์ฆ, ์ธ๊ฐ€ ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ณด์•ˆ ํ•„ํ„ฐ. ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋จ
๐Ÿ‘‍๐Ÿ—จ SecurityFilterChain : ์œ„์˜ ๋ณด์•ˆ ํ•„ํ„ฐ๋“ค์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ•„ํ„ฐ์˜ ์ˆœ์„œ์™€ ๊ตฌ์„ฑ์„ ์ •์˜ํ•œ๋‹ค. 
๐Ÿ‘‍๐Ÿ—จ DelegatingFilterProxy : ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ด€๋ฆฌ๋˜๋Š” SecurityFilterChain์„ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์—ญํ• 
๐Ÿ‘‍๐Ÿ—จ FilterChainProxy : ๋ณด์•ˆ ํ•„ํ„ฐ ๊ด€๋ฆฌ, ํ•„ํ„ฐ ์ฒด์ธ ์„ค์ •, HTTP ์š”์ฒญ์— ๋Œ€ํ•œ ๋ณด์•ˆ ์ฒ˜๋ฆฌ

๐Ÿค ์ฐธ๊ณ ๋ฌธํ—Œ

https://www.elancer.co.kr/blog/view?seq=235

 

Spring Security๋ž€? ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ถ€ํ„ฐ ์„ค์ • ๋ฐฉ๋ฒ•๊นŒ์ง€ ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค! I ์ด๋žœ์„œ ๋ธ”๋กœ๊ทธ

ํ™ˆํŽ˜์ด์ง€์— ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๊ธฐ๋Šฅ์„ ๋น ๋ฅด๊ฒŒ ๋ถ€์—ฌํ•ด ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ณดํ˜ธ ๊ธฐ๋Šฅ์„ ์†์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” Spring์˜ ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ ํ•˜๋‚˜์ธ ‘Spring Security’์— ๋Œ€ํ•ด ์ด๋žœ์„œ์—์„œ ์ž์„ธํžˆ ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค. I spring

www.elancer.co.kr

https://docs.spring.io/spring-security/reference/servlet/

 

Servlet Applications :: Spring Security

Spring Security integrates with the Servlet Container by using a standard Servlet Filter. This means it works with any application that runs in a Servlet Container. More concretely, you do not need to use Spring in your Servlet-based application to take ad

docs.spring.io