๋ณธ ๊ธ์ Spring Security 5.7 ์ด์ ๋ฒ์ ์ ์ํคํ ์ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋์์ต๋๋ค.
Spring Security
์ ์
Spring ๊ธฐ๋ฐ ์ฑ์
์ธ์ฆ
๊ณผ์ธ๊ฐ
๋ฅผ ์ํ Spring์ ํ์ ํ๋ ์์ํฌFilter
๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค.
Security๊ฐ ๊ด์ฌํ๋ ์์ญ
ํด๋ผ์ด์ธํธ/์๋ฒ์ ์ธ์ฆ ๊ธฐ๋ฐ ํต์ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์์ฒญ ์, ์ ๋ณด๊ฐ ๋ง๋ค๋ฉด ์ธ์ , ํ ํฐ ๋ฑ์ ๋ฐฉ์์ ๋ฐ๋ผ ์์ฑ๋ ์ธ์ฆ ์ ๋ณด๊ฐ ์ ๋ฌ๋จ
์ด ์ ๋ณด๋ ์ฟ ํค, ๋ก์ปฌ ์คํ ๋ฆฌ์ง ๋ฑ์ ๋ธ๋ผ์ฐ์ ์ ์ฅ์์ ์ ์ฅ๋จ
์ฌ์ฉ์๋ ์ธ์ฆ์ด ํ์ํ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๋ ์ด ์ ๋ณด๋ฅผ ์์ฒญ๊ณผ ํจ๊ป ์ ์ก
์๋ฒ๋ ์ด ์ ๋ณด๋ฅผ ํด์ํ์ฌ ์ฌ์ฉ์๊ฐ ์์ ํ ๊ถํ์ ํ์ธํ๊ณ , ํ์ฉ๋ ๋ฆฌ์์ค๋ผ๋ฉด ์ด๋ฅผ ์ ๊ณต
Spring Security๊ฐ ๊ด์ฌํ๋ ๊ฒ์ 1๋ฒ๊ณผ 4๋ฒ์ผ๋ก, 1๋ฒ์ ์ธ์ฆ ๊ณผ์ , 4๋ฒ์ ์ธ๊ฐ ๊ณผ์ ์ ํด๋นํ๋ค.
์ธ์ฆ (Authentication)
ํด๋น ์ฌ์ฉ์๊ฐ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ์์ธ์ง ๊ฒ์ฆํ๋ ์ ์ฐจ
Spring Security์์๋ ์ธ์ฆ์ ์ํด ๋ ๊ฐ์ง ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋ค.
Principle - ์ธ์ฆ์ ์์ฒญํ ์ฌ์ฉ์ (๋๋ ์ฌ์ฉ์์ ์์ด๋). Uniqueํด์ผ ํจ
Credential - ํด๋น ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ
์ธ๊ฐ (Authorization)
์ธ์ฆ๋ ์ฌ์ฉ์๊ฐ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ฉด, ํด๋น ์ฌ์ฉ์๊ฐ ํด๋น ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๊ฐ์ก๋์ง ๊ฒ์ฆํ๋ ์ ์ฐจ
Spring Security์์๋ Role๊ณผ Authority๋ฅผ ํตํด ์ฌ์ฉ์์๊ฒ ๋ถ์ฌ๋ ๊ถํ์ ๊ด๋ฆฌํ๋ค.
Role - ์ด๋ค ์ญํ ์ ๊ฐ์ก๋๊ฐ? (๊ด๋ฆฌ์, ์ผ๋ฐ ์ฌ์ฉ์ ๋ฑ)
Authority - ์ด๋ค ๊ถํ์ ๊ฐ์ก๋๊ฐ? (์ฝ๊ธฐ, ์์ , ์ญ์ ๋ฑ)
Spring Security Architecture
Security Filter๋ค์ Bean์ด๋ฉด์ Filter
Filter
๋ Filter Chain
์ด๋ผ๋ ๊ตฌ์กฐ๋ก ์์ฐจ์ ์ผ๋ก ์ ์ฉ๋๋ฉฐ, Spring Security์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ๋ค์ ์ํํ๋ Filter ๋ํ Filter Chain์ ์ผ๋ถ๋ก ์กด์ฌํ๋ค.
๊ทธ๋ฌ๋ Security ๊ด๋ จ Filter๋ค์ ๋ชจ๋ Bean์ธ๋ฐ, ์ผ๋ฐ์ ์ผ๋ก Filter๋ Dispatcher Servlet์ ์ ๋ฌ๋๊ธฐ ์ด์ ์ ์ ์ฉ๋๋ Servlet์ ํด๋นํ๋ค.
Security์ Filter๋ค์ Bean์ผ๋ก ์ ์ฉ๋๊ธฐ ์ํด DelegatingFilterProxy
๋ฅผ ์ด์ฉํ๋ฉฐ, ์ค์ ํํฐ์ ํด๋นํ๋ DelegatingFilterProxy
๊ฐ Bean์ธ FilterChainProxy๋ฅผ ํธ์ถํด ์ํ๋ฆฌํฐ ๊ด๋ จ ๋ก์ง์ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ค.
SecurityFilterChain
ํ๋์ SecurityFilterChain์ ํ ์ข ๋ฅ์ ํน์ path(ex: /api/**)์ ๋ํ ์ ๊ทผ ์ ์ด๋ฅผ ์ํํ๋ค.
๊ฐ FilterChain์ ์์ฒญ์ ์ ๋ฌํ๋ FilterChainProxy
๋ request๊ฐ ๋์ฐฉํ์ ๋ request์ url path๋ฅผ ํ์ธํด ๋ค์ ๊ฐ์ SecurityFilterChain ์ค ์ด๋ค FilterChain์ ์ ์ฉํ ์ง ๊ฒฐ์ ํ๋ค.
ํ๋์ ์์ฒญ์ ํ๋์ FilterChain์๋ง ๋งคํ๋๋ฉฐ, ์ด์ธ์ FilterChain์ ๋ฌด์๋๋ค.
ํ๋์ SecurityFilterChain ๋ด์์ ์ด๋ฃจ์ด์ง๋ ์ผ
AuthenticationFilter
๋ ์ธ์ฆ ์ ์ฐจ๋ฅผ ์์ฐจ์ ์ผ๋ก ํธ์ถํ๊ณ ์ธ์ฆ๋ ์ฌ์ฉ์๋ฅผ ์์ฒญ ์ ๋ฐ์์ ์ฌ์ฉํ ์ ์๋๋ก SecurityContext์ ๋ฑ๋กํ๋ค.UsernamePasswordAuthenticationToken
์ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ๊ฐ์ฒด๋ก, Principal, Credentials, Authorities์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.ํด๋น ํด๋์ค๋ ๋ ๊ฐ์ ์์ฑ์๋ฅผ ๊ฐ๋๋ฐ, ๊ฐ๊ฐ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ฆ, authorities์ ๋ํ ์ ๋ณด๋ฅผ ๋๊ธฐ์ง ์๊ณ ์์ฑํ ์ ํด๋น ์ ๋ณด๋ฅผ ๋ถ์ฌํ๊ธฐ ์ํด ์ธ์ฆ ๋ก์ง์ ์ํํ๋ฉฐ, ์ด ์ ๋ณด๋ฅผ ๋๊ธฐ๋ฉฐ ์์ฑํ๋ฉด ์ธ์ฆ ์ ์ฐจ๊ฐ ์๋ฃ๋์๋ค๊ณ ํ๋จํ๊ณ ์ธ์ฆ ํ์ ๋ก์ง์ ์ํํ๋ค.
AuthenticationManager
๋ ์๋ง์AuthenticationProvider
์๊ฒ ์ธ์ฆ ์ฒ๋ฆฌ๋ฅผ ์์ํ๋ ๋ผ์ฐํฐ ์ญํ ์ ํ๋ค.์ค์
AuthenticationManager
๋ ์ธํฐํ์ด์ค๋ก, ์ด๋ฅผ ๊ตฌํํ๋ ํด๋์ค์์ Provider์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ฐ๊ณ ์์์ ์ํํ๋ค.
AuthenticationProvider
๋ ์ค์ ์ธ์ฆ์ ์ฒ๋ฆฌํ๋ฉฐ, ์ธ์ฆ ์ด์ ์ ์ฌ์ฉ์ ๊ฐ์ฒด๋ฅผ ๋ฐ์ ์ธ์ฆ ์ดํ์ ์ฌ์ฉ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๋ฐํํ๋ค.UsernamePasswordAuthenticationToken
์ ์ฒซ ๋ฒ์งธ ์์ฑ์๋ก ์ฌ์ฉ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด, 3~4๋ฒ ๊ณผ์ ์ ๊ฑฐ์ณ ์ธ์ฆ ๋ก์ง์ ์ํํ๊ณ ๋ ๋ฒ์งธ ์์ฑ์๋ฅผ ํตํด ์ธ์ฆ๋ ์ฌ์ฉ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ๊ฒ์ด๋ค.
Provider๋
UserDetailsService
๋ฅผ ํธ์ถํด์ ์ธ์ฆ ์ Authentication ๊ฐ์ฒด๋ก๋ถํฐ ์ค์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํ๋ํ๋ค. ํด๋น ์๋น์ค ๊ฐ์ฒด์๋ ์ฌ์ฉ์๋ฅผ ์กฐํํ๋ ๋จ ํ๋์ ๋ฉ์๋loadUserByUsername
๊ฐ ๋ฐ๋์ ์กด์ฌํด์ผ ํ๋ค.์ฌ์ฉ์์ ์ ๋ณด๋
UserDetails
๋ผ๋ Entity๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์ฅ๋๊ณ ์กฐํ๋๋ค. ์ด ํด๋์ค์๋ ์ฌ์ฉ์์ ์์ด๋, ๋น๋ฐ๋ฒํธ, ๋ง๋ฃ/์ ํจ์ฑ ์ฌ๋ถ ๋ฑ์ด ์ ์ฅ๋๋ฉฐ ํด๋น ์ฌ์ฉ์์ Authority ์ ๋ณด๋ฅผ ํ๋ํ ์ ์๋ ๋ฉ์๋๋ ํฌํจ๋๋ค.
Default Security Setting
Spring Security ์์กด์ฑ์ ์ถ๊ฐํ๋ฉด, ์๋์ผ๋ก ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ ์ ๊ณตํ๋ path ์ ๋ํ ์ ๊ทผ ์ด์ธ์ ์ ๊ทผ์ด ๊ธ์ง๋๋ค.
๋ก๊ทธ์ธ ๋ฐฉ์, path ๋ณ ๊ถํ ๋ฑ์ ์ฌ์ค์ ์ ์ํด์๋ ์ปค์คํ SecurityFilterChain์ ๋น์ผ๋ก ๋ฑ๋กํ๊ณ ํด๋น ํํฐ ์ฒด์ธ ๋ด์์ ๊ธฐ์กด ์ค์ ๋ค์ Overridingํด์ผ ํ๋ค.
Last updated