-
[๊ตฌํ] Spring Security ์ ์ฐ๋๋ฐ?SPRING/PROJECT 2024. 5. 2. 01:58
Spring Security๋?
์ ์ by ๊ณต์๋ฌธ์
๊ฐ๋ ฅํ๊ณ ์ฌ์ฉ์ ์ ์๊ฐ ๊ฐ๋ฅํ ์ธ์ฆ ๋ฐ ์ก์ธ์ค ์ ์ด ํ๋ ์์ํฌ Spring ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์์ (์ฌ์ค์์) ํ์ค
ํน์ง
- ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ์ ๋ํ ํฌ๊ด์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ง์
- session fixation(์ ํจํ ์์ฒญ ํ์ด์ฌํน), clickjacking(์น์ฌ์ดํธ ์ฌ์ฉ์๋ฅผ ์์ฌ ์์ ๋ ๋ชจ๋ฅด๊ฒ ์ ์ฑ ๋งํฌ๋ฅผ ํด๋ฆญํ๋๋ก ํ๋ ์ธํฐํ์ด์ค ๊ธฐ๋ฐ ๊ณต๊ฒฉ), CSRF(์ธ์ฆ๋ ์ฌ์ฉ์๊ฐ ๊ทธ๋ค์ด ํ์ฌ ์ธ์ฆ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฒญ์ ๋ณด๋ด๋๋ก ๊ฐ์ํ๋ ๊ณต๊ฒฉ) ๋ฑ๊ณผ ๊ฐ์ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋ณดํธ
- ์๋ธ๋ฆฟ API ํตํฉ
๐ก ํ์ฅ์ฑ์ด ํน์ง์ธ ํ๋ ์์ํฌ์ธ๋งํผ, ์ฌ์ฉ ๋ฒ์ ์ ๋ต์ด ์์ต๋๋ค!!
Spring Security Architecture
Spring Security๋ Servlet Filter๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ํฉ๋๋ค.
Servlet Filter๋?
- client๊ฐ application์ request๋ฅผ ๋ณด๋ธ๋ค
- container๊ฐ FilterChain ์ ๋ง๋ ๋ค
→ request URI ๊ฒฝ๋ก์ ๊ธฐ๋ฐํ HttpServletRequest ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ Filter instance๋ค๊ณผ Servlet(Spring์์๋ DispatcherServlet์ instance์) ์ ํฌํจํ๊ณ ์์
๋๋ถ๋ถ์ ๊ฒฝ์ฐ์์ ์๋ธ๋ฆฟ์ ํ๋์ HttpServeltRequest๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
ํ์ง๋ง, ์ฌ๋ฌ๊ฐ์ ํํฐ๋ ์์ฒญ์ด ์ค๊ฐ์ ์ด๋ ํํฐ์์ ๊ฑธ๋ฌ์ก์ ๋,
- ํ์ Filter ํน์ Servlet์ด ํธ์ถ๋์ง ์๊ฒ ํ ์ ์์ → ๋ถํ์ํ ๋ฆฌ์์ค ์ฌ์ฉ ์ค์, ๋ณด์ ๊ฐํ
- ์์ฒญ์ด๋ ์๋ต์ ์์ ํด์ ๋๊ธธ ์ ์์ → ๋ณด์ ๊ฐํ
Filter๋ ์ผ๋ฐ ์ฉ ์๋ฐ ์น ์๋ฒ์์๋ ์ง์๋์ง๋ง,
Spring Framework๋
- Filter๋ฅผ Bean์ผ๋ก ๋ฑ๋กํด์ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.(DelegatingFilterProxy)
- FilterChain์ Bean์ผ๋ก ๋ฑ๋กํด์ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.(FilterChainProxy)
๋น์ผ๋ก ๋ฑ๋กํ๋ ๊ฒ ์ ์ข์๋ฐ? (์ถ์ฒ : Chat GPT)
๋๋ณด๊ธฐ- ์คํ๋ง IoC ์ปจํ
์ด๋์ ํตํฉ:
- ํํฐ๋ ์คํ๋ง IoC ์ปจํ ์ด๋์ ๊ด๋ฆฌ๋ฅผ ๋ฐ๊ฒ ๋์ด ์์กด์ฑ ์ฃผ์ ๋ฑ์ ์คํ๋ง ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์์ต๋๋ค.
- Lazy Loading ์ง์:
- Proxy๋ฅผ ์ฌ์ฉํ๋ฉด ํํฐ ์ธ์คํด์ค๊ฐ ์ค์ ๋ก ํ์ํ ๋๊น์ง ์์ฑ๋์ง ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํํฐ์ ๋น ์์ฑ ๋ฐ ์ด๊ธฐํ๋ฅผ ์ง์ฐ์ํฌ ์ ์์ต๋๋ค.
→ ๋ชจ๋ ๋น์ด ๋ก๋ฉ ๋ ๋ค์์ ํํฐ๋ฅผ ๋ก๋ฉํ ์ ์์ด์, ํํฐ์์ ๋ก๋ฉ ๋์ง ์์ ๋น์ ํธ์ถํ ์ํ์ ์ค์ธ๋ค๊ณ ํฉ๋๋ค.
- Proxy๋ฅผ ์ฌ์ฉํ๋ฉด ํํฐ ์ธ์คํด์ค๊ฐ ์ค์ ๋ก ํ์ํ ๋๊น์ง ์์ฑ๋์ง ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํํฐ์ ๋น ์์ฑ ๋ฐ ์ด๊ธฐํ๋ฅผ ์ง์ฐ์ํฌ ์ ์์ต๋๋ค.
- ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ํํฐ ๋ฑ๋ก:
- Java Config๋ ์คํ๋ง ๋น ์ค์ ํ์ผ์์ ํํฐ๋ฅผ ๋ฑ๋กํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํํฐ์ ๋ฑ๋ก๊ณผ ๊ด๋ฆฌ๋ฅผ ์ฝ๋๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ์คํ๋ง ํน์ง๊ณผ์ ํตํฉ:
- ์คํ๋ง์ ๋ค์ํ ๊ธฐ๋ฅ๊ณผ์ ํตํฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํํฐ ๋ด์์ ์คํ๋ง ๋น์ ์ ๊ทผํ์ฌ ์คํ๋ง ์ปจํ ์คํธ์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
- ํ์ฅ์ฑ ๋ฐ ์ ์ง๋ณด์์ฑ:
- ์ฝ๋์ ์ ์ง๋ณด์์ฑ์ด ํฅ์๋ฉ๋๋ค. ํํฐ์ ์์ ์ด๋ ๋ณ๊ฒฝ์ด ํ์ํ ๋ ์คํ๋ง ๋น ์ค์ ํ์ผ์์ ์ง์ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, ํ์ํ ๊ฒฝ์ฐ ํํฐ๋ฅผ ๋ค๋ฅธ ๋น์ผ๋ก ๋์ฒดํ ์ ์์ต๋๋ค.
SecurityFilterChain์ ์ถ๊ฐํ ๊ฒ์ ๋๋ค.
SecurityFilterChaind์ ์ถ๊ฐํจ์ผ๋ก์จ Spring Security๋ฅผ ์ ์ฉํด๋ณด๊ฒ ์ต๋๋ค
๋ ๊ถ๊ธํ ์ ์ด ์๋ค๋ฉด…
Architecture :: Spring Security
Spring Security์์ ์ง์ํด์ฃผ๋ ์ค์
- ๋ชจ๋ ์๋ํฌ์ธํธ(Boot์ /error ์๋ํฌ์ธํธ ํฌํจ)์ ๋ํด ์ธ์ฆ๋ ์ฌ์ฉ์๋ฅผ ์๊ตฌํฉ๋๋ค. (Authorize HttpServletRequests)
- ์์ํ ๋ ์์ฑ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ์ฌ์ฉ์๋ฅผ ๋ฑ๋กํฉ๋๋ค (UserDetailsService)
- BCrypt ๋ฐ ๊ธฐํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋น๋ฐ๋ฒํธ ์ ์ฅ์ ๋ณดํธํฉ๋๋ค. (PasswordEncoder)
- ํผ ๊ธฐ๋ฐ ๋ก๊ทธ์ธ ๋ฐ ๋ก๊ทธ์์ ํ๋ฆ์ ์ ๊ณตํฉ๋๋ค. (Form Login, Handling Logouts)
๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ธ๊ฐ๋์ง ์์ ์ฌ์ฉ์์ธ ๊ฒฝ์ฐ /login์ผ๋ก ๋์ด๊ฐ๊ฒ ๋์ด์์ผ๋ฉฐ, login form์ด ์ ๊ณต๋จ - ํผ ๊ธฐ๋ฐ ๋ก๊ทธ์ธ ๋ฐ HTTP ๊ธฐ๋ณธ ์ธ์ฆ์ ์ธ์ฆํฉ๋๋ค. (Basic Authentication)
- ๋ด์ฉ ํ์์ ์ ๊ณตํฉ๋๋ค; ์น ์์ฒญ์ ๊ฒฝ์ฐ ๋ก๊ทธ์ธ ํ์ด์ง๋ก redirectํ๊ณ , ์๋น์ค ์์ฒญ์ ๊ฒฝ์ฐ ์ธ์ฆ๋์ง ์์ ์ฌ์ฉ์์๊ฒ๋ 401 Unauthorized์ ๋ฐํํ๊ณ , ์ธ๊ฐ๋์ง ์์ ์ฌ์ฉ์์๊ฒ๋ 403 Forbidden์ ๋ฐํํฉ๋๋ค.(๊ธฐ๋ณธ๊ฐ)
- CSRF ๊ณต๊ฒฉ์ ์ํํฉ๋๋ค.(์ต๋ํ ๋ง์ผ๋ ค๊ณ ํ๋ค์ ์ํ)
๋๋ณด๊ธฐCSRF๋?
Cross Site Request Forgery์ ์ฝ์๋ก, ํ๊ธ ๋ป์ผ๋ก๋ ์ฌ์ดํธ๊ฐ ์์ฒญ ์์กฐ๋ฅผ ๋ปํฉ๋๋ค.์ฌ์ฉ์๊ฐ ๋ณด์์ด ์ทจ์ฝํ ์๋น์ค์ ๋ก๊ทธ์ธ ํ์ ๋ ์ฟ ํค์ ์ธ์ ์์ด๋๊ฐ ์ ์ฅ๋๋ฉด,ํด๋น ์ธ์ ์์ด๋๋ก ๋ค์ด์จ ์์ฒญ์ ์ธ์ฆ๋ ์ฌ์ฉ์์ ์์ฒญ์ธ ์ค ์๊ณ ์ฒ๋ฆฌ๋๊ฒ ๋จ-> ์ ์ฑ ์คํฌ๋ฆฝํธ ํ์ด์ง๋ฅผ ๋๋ฅด๋๋ก ์ ๋ํ์ฌ ์ธ์ ์์ด๋ ํ์ทจ - Session Fixation ๊ณต๊ฒฉ์ ์ํํฉ๋๋ค.
- HTTPS ๋ณด์ฅ์ ์ํ HTTP Strict Transport Security (HSTS)
- ์ค๋ํ ๊ณต๊ฒฉ์ ์ํํ๊ธฐ ์ํด X-Content-Type-Options๋ฅผ ์์ฑํฉ๋๋ค.
- ์ธ์ฆ๋ ๋ฆฌ์์ค๋ฅผ ๋ณดํธํ๊ธฐ ์ํด Cache Control headers๋ฅผ ์์ฑํฉ๋๋ค.
- ํด๋ฆญ์ฌํน์ ์ํํ๊ธฐ ์ํด X-Frame-Options๋ฅผ ์์ฑํฉ๋๋ค.
- HttpServletRequest์ ์ธ์ฆ ๋ฉ์๋์ ํตํฉํฉ๋๋ค.
- authentication success์ failure events๋ฅผ ๋ฐํํฉ๋๋ค.
์ ์ฉ ๋ฐ ๊ตฌํ์ ์๋์์ ์ด์ด์ ์ค๋ช ํฉ๋๋ค.
[๊ตฌํ] Spring Security 6.1 ์ด์ ๋ฒ์ ์ ์ฉ, ์ค์ ํ๊ธฐ
์ด์ ์คํ๋ง ์ํ๋ฆฌํฐ ์๊ฐ ๊ธ์์ ์ด์ด์ ๊ฐ๋๋ค [๊ตฌํ] Spring Security ์ ์ฐ๋๋ฐ?Srping Security๋?์ ์ by ๊ณต์๋ฌธ์๊ฐ๋ ฅํ๊ณ ์ฌ์ฉ์ ์ ์๊ฐ ๊ฐ๋ฅํ ์ธ์ฆ ๋ฐ ์ก์ธ์ค ์ ์ด ํ๋ ์์ํฌ Spring ๊ธฐ๋ฐ ์ ํ
dowlsovo.tistory.com
'SPRING > PROJECT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๊ตฌํ] Swagger 3.0 ์ ์ฉํด๋ณด๊ธฐ (0) 2024.05.06 [๊ตฌํ] Spring Security 6.1 ์ด์ ๋ฒ์ ์ ์ฉ, ์ค์ ํ๊ธฐ (0) 2024.05.02 [์ ๋ณด] IntelliJ์์ Querydsl ์ธ ๋ clean build, build ํ ๋ฒ์ ์ํํ๊ธฐ (0) 2023.09.26 [๊ตฌํ] Spring์์ Firebase ํธ์์๋ฆผ ๊ตฌํํ๊ธฐ (0) 2023.09.26 [๊ตฌํ] Spring์์ ์นด์นด์คํก ๋ก๊ทธ์ธ (0) 2023.09.25