[TIL] ๋ค์ ์์ํด๋ณด๋ ํ๋ก์ ํธ TIL 10์ผ์ฐจ..
๐ ์ค๋์ ์ด๋ค ํ๋ฃจ์์ง..
์์ฆ ์์ฒญ ํผ๊ณคํ ํ๋ฃจํ๋ฃจ๊ฐ ๋๊ณ ์๋ค.. ์ ์ ์ถฉ๋ถํ ๋ชป์๊ณ ์์ด์ ์ข๋น์ฒ๋ผ ์ง๋ด๊ณ ์๋ ๋๋์ด๋ค..
๊ทธ๋๋ ํด์ผ๋ ์ผ์ ๋ค์ ๋ง๋ฌด๋ฆฌํ๊ธฐ ์ํด์ ๋ฆฌ๋ทฐCRUD์ Spring Security ๊ณต๋ถ ๋ฐ ์ ์ฉ์ ํ๋ค.
๋จผ์ ๋ฆฌ๋ทฐ CRUD ๊ธฐ๋ณธ ํ ์ก์๋จ๋ ์ฝ๋์ ์ถ๊ฐ์ ์ผ๋ก ์ ์ฉํด์ผ ํ ์กฐ๊ฑด๋ค๊ณผ ์๊ฐํด๋ด์ผ ํ ๋ด์ฉ๋ค(๋ฐฐ์ก ์๋ฃ๋ ์ฃผ๋ฌธ์ธ๊ฐ? ์ด๋ฏธ ์์ฑ๋ ๋ฆฌ๋ทฐ๊ฐ ์๋๊ฐ? ๋ณธ์ธ์ด ์ฃผ๋ฌธํ ๊ฑด์ ๋ํ ๋ฆฌ๋ทฐ์ธ๊ฐ? ๋ฑ๋ฑ)์ ํ๋์ฉ ์ ์ฉํ๋ฉด์ ์ข ๋ ์๋ฒฝํ ์ฝ๋๋ก ์์ ํ๋ค. Spring Security์ ๋ํด ์ถฉ๋ถํ ๊ณต๋ถ ์๊ฐ์ ๊ฐ๊ธฐ ์ํด์ ๋น ๋ฅด๊ฒ ๋ง๋ฌด๋ฆฌํ๊ณ Security๋ก ๋์ด๊ฐ๋ค.
Security... ๋ญ๊ฐ ์์์ผ ๋ ๊ฒ ๋ง์ ๋๋์ด์๋ค.
๊ตฌ์กฐ๋ถํฐ ์์ฒญ ๋ณต์กํด ๋ณด์๋ค. ์ฒ์ Spring Security๋ฅผ ์จ๋ณด๋ ๊ฑฐ๋ผ์ ๋ ๊ทธ๋ฌ๋ ๊ฒ ๊ฐ๋ค..
ํ์ง๋ง ๋๋ ค์๋ณด๋ค๋ ์ผ๋จ ๋ถ๋ชํ๋ณด์ ๋ผ๋ ๋ง์ธ๋๋ฅผ ๊ฐ์ง๊ณ ์ฌ๋ฌ ๋ธ๋ก๊ทธ์ ๋ฌธ์๋ค์ ์ฐพ์๋ณด๋ฉด์ ํ์ํ ๋ด์ฉ๋ค์ ์์งํ๊ณ Notion์ ํ๋์ฉ ์ ๋ฆฌํ๋ค. ๊ทธ๋ฌ๋ค ๋ณด๋ ์ ์ฉํ๊ธฐ ์ํด์ ๊ผญ ์๊ณ ์์ด์ผ ํ๋ ๊ฐ๋
์ด ๋ญ๊ฐ ์๋์ง ๊ฐ์ด ์กฐ๊ธ์ฉ ์กํ๊ธฐ ์์ํ๋ ๊ฒ ๊ฐ๋ค.
Spring Security์ ๋ํ ๊ณต๋ถ๋ฅผ ๋ง์น๊ณ ๋์ ์ง์ JWT๋ง ์ ์ฉ๋์ด ์๋ ํ์ฌ ํ๋ก์ ํธ์ ์ค์ ํ๊ธฐ ์์ํ๋ค.
Security์ ํ์ํ Filter์ Config๋ฅผ ๋ง๋ค๊ณ ๋ด์ฉ์ ์ฑ์๋๊ฐ๋ค. ํ์ง๋ง JWT์์ ์ด๋ฏธ ํ๋ฒ ์คํจ๋ฅผ ๋ง๋ดค๊ธฐ ๋๋ฌธ์ ์ฐจ๋ถํ ํ๋์ฉ ํด๊ฒฐํด๋๊ฐ๋ค. Filter์ ๋ค์ด๊ฐ์ผ ๋๋ ๋ด์ฉ๋ค์ ํ์ธํ๊ณ ๋๋ฆฌ์ง๋ง ์ ํํ๊ฒ ํ๋์ฉ ์ฑ์๋๊ฐ๋ค. ๊ทธ๋์ ๊ทธ๋ฐ์ง ์๊ฐ์ ์ค๋ ๊ฑธ๋ ธ์ง๋ง ๋น ์ง ๋ถ๋ถ ์์ด ๋ชจ๋ ์์ฑํ ์ ์์๋ค. ๋ง์ญ ์์ฑํ๊ณ ๋๋ JwtFilter์ ์๋ ๋ด์ฉ๋ค๊ณผ ๊ฒน์น๋ ๋ถ๋ถ์ด ๋ง๋ค๊ณ ๋๊ปด์ก๋ค.
๋ค์์ผ๋ก SecurityConfig๋ก ๋์ด์์ ๋ด์ฉ์ ์ฑ์๋๊ฐ๊ธฐ ์์ํ๋ค. SecurityConfig๋ ๋ญ๊ฐ ์ ํด์ง ํ์ด ์๊ณ ๊ฑฐ๊ธฐ์ ์ถ๊ฐ์ ์ผ๋ก ์ปค์คํฐ๋ง์ด์ง์ ์งํํ๋ ๋๋์ด์๋ค.
ํ์์ ์ผ๋ก ๋ค์ด๊ฐ์ผ ํ๋ ๋ถ๋ถ๋ค์ด ์กด์ฌํ๊ณ , ๋๋จธ์ง๋ ํ์ํ๋ค๋ฉด ์ถ๊ฐ์ ์ผ๋ก ์์ฑํ๋ ๋๋..?
ํ์ง๋ง ์ฒ์ ํด๋ณด๋ ๊ฑฐ๋ผ ๊ทธ๋ฐ์ง ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ ค์ ํ๋ฃจ๋ง์ ๋ค ๋๋ด์ง ๋ชปํ๊ณ .. ๋ด์ผ ์ด์ด์ ํด์ผํ ๊ฒ ๊ฐ๋ค.
๐ก ์๋กญ๊ฒ ์๊ฒ ๋ ๋ด์ฉ์ ๋ญ๊ฐ ์๋๋ผ..?!
Spring Security๊ฐ ๋ญ๊น?!
Spring ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ธ์ฆ๊ณผ ์ธ๊ฐ๋ฅผ ์ค์ฌ์ผ๋ก ๋ณด์ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ํ๋ ์์ํฌ์ด๋ค.
๋ก๊ทธ์ธ ์ฒ๋ฆฌ, ๊ถํ ์ฒ๋ฆฌ, ์ธ์
์ ์ด, CSRF ๋ฐฉ์ง, ๋น๋ฐ๋ฒํธ ์ํธํ ๋ฑ์ ์๋์ผ๋ก ์ ๊ณตํ๊ณ , ํ์ํ ๊ฒฝ์ฐ ์ง์ ์ปค์คํฐ๋ง์ด์ง ํ ์ ์๋ค.
Spring Security์ ํน์ง
Filter๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค.
- Spring MVC์ ๋ถ๋ฆฌ๋์ด ๊ด๋ฆฌํ๊ณ ๋์ํ ์ ์๋ค.
Bean์ผ๋ก ์ค์ ํ ์ ์๋ค.
Spring Security์ ๊ตฌ์กฐ
Spring Security์ ํ๋ฆ
1. Http Request ์์
๐ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ์ ๋ณด์ ํจ๊ป ์ธ์ฆ ์์ฒญ์ ํ๋ค.
2. ์ ์ ์๊ฒฉ์ ๊ธฐ๋ฐ์ผ๋ก ์ธ์ฆ ํ ํฐ ์์ฑ
๐ AuthenticationFilter๊ฐ ์์ฒญ์ ๊ฐ๋ก์ฑ๊ณ , ๊ฐ๋ก์ฑ ์ ๋ณด๋ฅผ ํตํด UsernamePasswordAuthenticationToken์ ์ธ์ฆ์ฉ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ค.
3. Filter๋ฅผ ํตํด AuthenticationToken์ AuthenticationManager๋ก ์์
๐ AuthenticationManager์ ๊ตฌํ์ฒด์ธ ProviderManager์๊ฒ ์์ฑํ UsernamePasswordToken ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ค.
4. AuthenticationProvider์ ๋ชฉ๋ก์ผ๋ก ์ธ์ฆ์ ์๋
๐ AuthenticationManager๋ ๋ฑ๋ก๋ AuthenticationProvider๋ค์ ์กฐํํ๋ฉฐ ์ธ์ฆ์ ์๊ตฌํ๋ค.
5. UserDetailsService์ ์๊ตฌ
๐ ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ UserDetailsService์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋๊ฒจ์ค๋ค.
6. UserDetails๋ฅผ ์ด์ฉํด User ๊ฐ์ฒด์ ๋ํ ์ ๋ณด ํ์
๐ ๋๊ฒจ ๋ฐ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐพ์๋ธ ์ฌ์ฉ์ ์ ๋ณด์ธ UserDetails ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
7. User ๊ฐ์ฒด์ ์ ๋ณด๋ค์ UserDetails๊ฐ UserDetailsService(LoginService)๋ก ์ ๋ฌ
๐ AuthenticationProvider๋ค์ UserDetails๋ฅผ ๋๊ฒจ ๋ฐ๊ณ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋น๊ตํ๋ค.
8. ์ธ์ฆ ๊ฐ์ฒด or AuthenticationException
๐ ์ธ์ฆ์ด ์๋ฃ๋๋ฉด ๊ถํ ๋ฑ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ด์ Authentication ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
9. ์ธ์ฆ ๋
๐ ๋ค์ ์ต์ด์ AuthenticationFilter์ Authentication ๊ฐ์ฒด๊ฐ ๋ฐํ๋๋ค.
10. SecurityContext์ ์ธ์ฆ ๊ฐ์ฒด๋ฅผ ์ค์
๐ Authentication ๊ฐ์ฒด๋ฅผ SecurityContext์ ์ ์ฅํ๋ค.
์ต์ข ์ ์ผ๋ก SecurityContextHolder๋ ์ธ์ ์์ญ์ ์๋ SecurityContext์ Authentication ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ค. ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค๋ ๊ฒ์ Spring Security๊ฐ ์ ํต์ ์ธ ์ธ์ - ์ฟ ํค ๊ธฐ๋ฐ์ ์ธ์ฆ ๋ฐฉ์์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
๐๏ธ ๋ด์ผ์ ๋ญ ํ์ง?!
โ๏ธ Spring Security ๋ง๋ฌด๋ฆฌ
โ๏ธ ๋์์ฑ ๊ณต๋ถ
โ๏ธ TIL ์์ฑ