Spring Security Document - dev-team-projects/DeliTalk GitHub Wiki
์์ฑ์ : ์์ฑ์ค
- ์คํ๋ง ๊ธฐ๋ฐ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ณด์ ํ๋ ์์ํฌ์
๋๋ค.
- โก๏ธ ํนํ
์ธ์ฆ(Authentication)
๊ณผ์ธ๊ฐ(Authorization)
๋ฅผ ๋ด๋นํฉ๋๋ค.
- โก๏ธ ํนํ
์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ํ์ธํ๊ณ ํด๋น ์ฌ์ฉ์๊ฐ ์ด๋ค ๋ฆฌ์์ค์ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง ๊ด๋ฆฌํ๋ ์ญํ ์ํฉ๋๋ค.
- ์ฌ์ฉ์๊ฐ ์ฃผ์ฅํ๋ ์ ์์ ํ์ธํ๋ ์ ์ฐจ์
๋๋ค.
- ์์คํ ์ด๋ ์๋น์ค์ ์ ๊ทผํ๋ ์ฌ์ฉ์๊ฐ ์ค์ ๋ณธ์ธ์ธ์ง ํ์ธํ๋ ๊ณผ์ ์ด๋ผ๊ณ ๋ ํ ์ ์์ต๋๋ค.
๋๊ตฌ์ธ๊ฐ
๋ฅผ ํ์ธํ๋ ์ ์ฐจ
- ๋ฌด๋จ ์ ๊ทผ์ ๋ฐฉ์งํ์ฌ ๋ณด์์ ๊ฐํํฉ๋๋ค.
- โก๏ธ
๋ณด์๊ฐํ
- โก๏ธ
- ํ๊ฐ๋์ง ์๋ ์ ๊ทผ์ผ๋ก ๋ถํฐ ๋ณดํธํฉ๋๋ค.
- โก๏ธ
๊ฐ์ธ ์ ๋ณด ๋ณดํธ
- โก๏ธ
- ์๊ฒฉํ ์ก์ธ์ค ์ ์ด ์ ์ฑ
๊ณผ ์ฌ์ฉ์ ํ๋ ์ถ์ ์ ์ง์ํฉ๋๋ค.
- โก๏ธ
๊ท์ ์ค์
- โก๏ธ
- ์ธ์ฆ๋ ์ฌ์ฉ์๋ ์์คํ ์ด ํน์ ๋ฆฌ์์ค๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ฑฐ๋ ํน์ ์์ ์ ์ํํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํ๋ ๊ณผ์ ์ ๋๋ค.
์ธ์ฆ๋ ์ฌ์ฉ์๋ ์์คํ ์ด
๋ฌด์์ ํ ์ ์๋๊ฐ
๋ฅผ ๊ฒฐ์ ํ๋ ๊ณผ์
- ๋ณด์ ์ ์ง
- ์ค์ํ ๋ฆฌ์์ค์ ๋ํ ๋ฌด๋จ ์ ๊ทผ ๋ฐฉ์ง
- ์ธ์ฆ์ ์ ๋ถ ํ์ธ ๊ณผ์ ์ด๊ณ ์ธ๊ฐ๋ ์ ๋ถ์ด ํ์ธ๋ ์ฌ์ฉ์๊ฐ ์ด๋ ๋ฆฌ์์ค์ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง ๊ถํ์ ๋ถ์ฌํ๋ ๊ณผ์ ์ ๋๋ค.
- CSRF ๋ฐฉ์ง
- ์ธ์ ๊ด๋ฆฌ ๋ฑ
-
JSP/Servlet ๊ธฐ๋ฐ ํ๋ก์ ํธ์์๋ HttpSession์ ๊ธฐ๋ฐ์ผ๋ก ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ง ์ํ ๋ฑ๋ก, ์ํ ์ญ์ ๋ฑ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋๋ก ๊ตฌํํ์ต๋๋ค. ๋ํ ์ํ ์ญ์ ์์๋ ์ธ์ ์ ๋ณด๋ฅผ ํ์ธํ์ฌ ํด๋น ์ฌ์ฉ์๊ฐ ํด๋น ์ํ์ ์ญ์ ํ ๊ถํ์ด ์๋์ง ๊ฒ์ฆํ๋๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
-
์ด๋ฅผ ์ํด
AccessFilter
๋ฅผ ๊ณต์ฉ ํด๋์ค๋ก ์์ฑํ์ฌ ๋ก๊ทธ์ธ ์ฌ๋ถ์ ์ผ๋ถ ๊ถํ ๊ฒ์ฆ ๋ก์ง์ ์ค์์์ ๊ด๋ฆฌํ๊ณ ๋ฐ๋ณต์ ์ธ ์ฝ๋๋ฅผ ์ค์์ต๋๋ค. -
ํ์ง๋ง AccessFilter๋ฅผ ์ฌ์ฉํ๋๋ผ๋ URL ๋จ์ ์ ๊ทผ ์ ์ด์๋ง ๊ฐ๋ฅํ์ฌ ๋ฉ์๋ ๋จ์์ ์ธ๋ฐํ ๊ถํ ๊ด๋ฆฌ๋ ์ญํ ๊ธฐ๋ฐ ์ธ๊ฐ ๋ฑ ๊ณ ๊ธ ๋ณด์ ์ ์ฑ ์ ์ ์ฉํ๊ธฐ ์ด๋ ต๋ค๋ ํ๊ณ๊ฐ ์์์ต๋๋ค.
-
๋ํ JWT๋ OAuth2 ๊ฐ์ ๋ค์ํ ์ธ์ฆ ๋ฐฉ์์ ์ ์ฉํ๊ฑฐ๋ CSRF ๋ณดํธ, ์ธ์ ๊ณ ์ ๋ฐฉ์ง ๋ฑ ์ถ๊ฐ์ ์ธ ๋ณด์ ์ ์ฑ ์ ์ง์ ๊ตฌํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์์ ํ์ฅ์ฑ ์ธก๋ฉด์์ ๋ง์ ์ด๋ ค์์ด ์์์ต๋๋ค.
- ์ธ์ฆ/์ธ๊ฐ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํด์ฃผ๋ฏ๋ก ๋ณด์์ฑ์ ๋์ฌ์ค๋๋ค.
- ๋ค์ํ ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ฃผ๋ฏ๋ก ๋ฐ๋ก ๋ณด์ ์ฝ๋๋ฅผ ์์ฑํ์ง ์์๋ ๋ฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ฑ์ ๋ง๋๋ก ์ ์ฐํ๊ฒ ๋ณด์ ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋จผ์ Servlet Filter์ ๋ํ ์ดํด๊ฐ ํ์ํฉ๋๋ค..
-
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๊ฐ๋ก์ฑ์ Servlet์ด ์ํ๋๊ธฐ ์ ํ์ ์ฒ๋ฆฌ๋ฅผ ์ํํ๊ฑฐ๋ ์์ฒญ์ ๋ฆฌ๋ค์ด๋ ํธํ๋ ์ฉ๋๋ก ์ฌ์ฉํฉ๋๋ค.
-
์ผ๋ฐ์ ์ผ๋ก ํ ๊ฐ์ ํํฐ๋น ํ๋์ ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํ๋ฏ๋ก ์ฌ๋ฌ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ ์ฌ๋ฌ ๊ฐ์ ํํฐ๋ฅผ ๋ง๋ค์ด ํํฐ ์ฒด์ธ์ ํ์ฑํ์ฌ ์ฌ์ฉํฉ๋๋ค.
- Spring Security๋ Security์ ๊ด๋ จ๋ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ ํํฐ ์ฒด์ธ์ผ๋ก ์ ๊ณตํฉ๋๋ค.
- ์๋ฅผ ๋ค๋ฉด ์ธ์ฆ๋์ง ์์ ์ฌ์ฉ์๊ฐ ํน์ URL์ ์์ณฅํ์ ๋ ๋ก๊ทธ์ธ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ์ด Security Filter ์ค ํ๋์ ์ํด์ ์ฒ๋ฆฌ๋ ๊ฒ์ ๋๋ค.
Filter | Feature |
---|---|
SecurityContextPersistenceFilter | SecurityContextRepository์์ SecurityContext ๊ฐ์ฒด๋ฅผ ๋ก๋ฉํ์ฌ SecurityContextHolder์ ์ ์ฅํ๊ณ ์์ฒญ ์ฒ๋ฆฌ๊ฐ ๋๋๋ฉด ์ ๊ฑฐํฉ๋๋ค. |
LogoutFilter | ์ง์ ํ ๊ฒฝ๋ก์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ๋ก๊ทธ์์ํ๊ณ ์ง์ ํ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค. ์ดํ ํํฐ๋ค์ ์งํํ์ง ์์ต๋๋ค. |
UsernamePasswordAuthenticationFilter | ๋ก๊ทธ์ธ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ID/PW ๊ธฐ๋ฐ์ ์ธ์ฆ์ ์ํํฉ๋๋ค. ์ฑ๊ณต ์ ์ง์ ํ ํ์ด์ง๋ก ์ด๋ํ๊ณ ์คํจ ์ ๋ก๊ทธ์ธ ํ๋ฉด์ ๋ณด์ฌ์ค๋๋ค. |
DefaultLoginPageGeneratingFilter | ๋ก๊ทธ์ธ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ ๋ก๊ทธ์ธ ํ๋ฉด์ ์ถ๋ ฅํ๊ณ ์ดํ ํํฐ๋ฅผ ์งํํ์ง ์์ต๋๋ค. |
AnonymousAuthenticationFilter | ์ด ํํฐ๊ฐ ์คํ๋๋ ์์ ๊น์ง ์ฌ์ฉ์๊ฐ ์ธ์ฆ์ ๋ฐ์ง ๋ชปํ๋ค๋ฉด ์์ ์ฌ์ฉ์์๊ฒ ํด๋นํ๋ Authentication ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ SecurityContext์ ์ค์ ํฉ๋๋ค. ์์ฑ๋ Authentication์ ์์ด๋๋ anonymousUser ์ด๊ณ ๊ถํ์ ROLE_ANONYMOUS ์ด๋ฉฐ ์ธ์ฆ๋์ง ์์ ์ํ์ ๊ฐ์ ๊ฐ์ง๋๋ค. |
SessionManagementFilter | ์ธ์ ํ์์์, ๋์ ์ ๊ทผ ์ ์ด, ์ธ์ ๊ณ ์ ๊ณต๊ฒฉ ๋ฑ์ ์ฒ๋ฆฌํฉ๋๋ค. |
ExceptionTranslationFilter | FilterSecurityInterceptor์์ ๋ฐ์ํ ์์ธ๋ฅผ ๋ง๋ ์๋ต์ผ๋ก ๋ณํํฉ๋๋ค. ์๋ฅผ ๋ค์ด 403 ์ํ์ฝ๋๋ฅผ ์๋ตํ๊ฑฐ๋ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋ํ๋ ์์ ์ ์ฒ๋ฆฌํฉ๋๋ค. |
FilterSecurityInterceptor | ํ์ฌ ์ฌ์ฉ์๊ฐ ์ง์ ํ ๊ฒฝ๋ก์ ์ ๊ทผํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํฉ๋๋ค. ๊ถํ์ด ์์ผ๋ฉด ๋ณด์ ํํฐ๋ฅผ ํต๊ณผ์์ผ ์์์ ์ ๊ทผํ ์ ์๊ฒ ํ๊ณ ๊ถํ์ด ์์ผ๋ฉด ์์ธ๋ฅผ ๋ฐ์์ํต๋๋ค. |
๊ฐ ํํฐ๋ Security ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ธฐ๋ฅ์ผ๋ก ์์์๋ถํฐ ์๋๋ก ์์ฐจ์ ์ผ๋ก ๋์ํฉ๋๋ค.
- Spring Security๋ Security ํํฐ๋ค์ ์ํธ์์ฉ์ ์ํด ์ฒ๋ฆฌ๋ฉ๋๋ค.
- Spring Security์ ๊ฐ์ฅ ์ค์ํ ํํฐ๋
UsernamePasswordAuthenticationFilter
์ ๋๋ค.- ์ด ํํฐ๊ฐ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ด์ฉํด์ ์ธ์ฆ์ ์ฒ๋ฆฌํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ๋๋ฒ์งธ๋ก ์ค์ํ ๊ฐ์ฒด๋ FilterSecurityInterceptor์
๋๋ค.
- ์ด ๊ฐ์ฒด๋ ์ธ์ฆ์ ์ฑ๊ณตํ ์ฌ์ฉ์๊ฐ ํด๋น ๋ฆฌ์์ค์ ์ ๊ทผํ ๊ถํ์ด ์๋์ง๋ฅผ ๊ฒ์ฆํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ์ฌ์ฉ์๊ฐ ๋ฆฌ์์ค ์์ฒญ ์ ์ธ์ฆ ๊ด๋ฆฌ ํํฐ๊ฐ ์์ฒญ์ ๊ฐ๋ก์ฑ๋๋ค.
- ์ธ์ฆ ๊ด๋ฆฌ ํํฐ๋ ์ธ์ฆ ์ฒ๋ฆฌ์ ๊ด๋ จ๋ ํํฐ๋ค์ ์ด์ฉํ์ฌ ์ฌ์ฉ์ ์ธ์ฆ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ์ฌ์ฉ์๊ฐ ์ธ์ฆ ์ ์ฐจ๋ฅผ ํตํด ์ธ์ฆ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ฉด ํ์ผ์ด๋ DB์ ์ ์ฅ๋์ด ์๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ฝ์ด ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ธ์ฆ ์ ๋ณด๋ฅผ ๊ฒ์ฆํฉ๋๋ค.
- ์ธ์ฆ ์คํจ ์ ์ฌ์ฉ์์๊ฒ ๋ค์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์์ฒญํฉ๋๋ค.
- ์ธ์ฆ ์ฑ๊ณต ์ ์ฌ์ฉ์๊ฐ ์์ฒญํ ๋ฆฌ์์ค๋ก ์์ฒญ์ ์ ๋ฌํฉ๋๋ค.
- ์ธ์ฆ ์ฑ๊ณต ํ ์์ฒญํ ๋ฆฌ์์ค๋ก ์์ฒญ์ ์ ๋ฌํ ๋ ๊ถํ ๊ด๋ฆฌ ํํฐ๊ฐ ๋ค์ ์์ฒญ์ ๊ฐ๋ก ์ฑ์ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ ๊ถํ์ ๊ฒ์ฆํฉ๋๋ค.
- ๊ถํ์ ๊ฒ์ฆํ๊ธฐ ์ํด ๊ด๋ จ๋ ํํฐ๋ค์ ์ฌ์ฉํ๋๋ฐ ๊ถํ ๊ด๋ฆฌ ํํฐ๋ ๋ฆฌ์์ค๋ณ ๊ถํ ๋ชฉ๋ก์ ์ฐธ์กฐํ์ฌ ์ ๊ทผ ๊ถํ์ ๊ฒ์ฆํฉ๋๋ค.
- ๊ฒ์ฆ ์คํจ ์ ๊ถํ ์์ ํ์ด์ง๋ฅผ ์ ์กํ๊ฑฐ๋ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ์ ์ฐจ๋จํฉ๋๋ค.