Closed thals0 closed 1 year ago
Spring Security ๊ฐ ์ ๊ณตํ๋ ์ ์ํ ๋จ๋ฐฉํฅ ํจ์์ธ bCrypt
๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธํ
โ๏ธ์ ์ํ ๋จ๋ฐฉํฅ ํจ์๋ ๋ด๋ถ์ ์ผ๋ก ๋ฆฌ์์ค์ ๋ญ๋น๊ฐ ๋งค์ฐ ์ฌํ๊ธฐ ๋๋ฌธ์ API ์์ฒญ ๋ง๋ค ์ฌ์ฉ์์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ๊ฒ์ฆํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ด ํฌ๊ฒ ๋จ์ด์ง ์ ์๋ค. ๋ฐ๋ผ์ ์ธ์ , ํ ํฐ ๊ณผ ๊ฐ์ ์ธ์ฆ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๊ฒ์ฆํ๋ ๊ฒ์ด ์๋ ๋ฐ ๋ณด์ ์ธก๋ฉด์ ์ ๋ฆฌํ๋ค.
โ๏ธ์ฐ๋ฆฌ๊ฐ ์์ผ๋ก ํ๋ก์ ํธ์ ์ ์ฉํ ์ฌ์ฉ์ ๊ฒ์ฆ ํ๋ฆ ์ง๊ณ ๋์ด๊ฐ๊ธฐ!
๋จ๋ฐฉํฅ ์ํธ ์๊ณ ๋ฆฌ์ฆ
โ๊ทธ๋ผ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ๋๋ ์ํธํ๋ ํจ์ค์๋๋ฅผ ๊ธฐ์ตํด์ผ ํ ๊น์?
Spring Security ์์๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธํํ๋ ํจ์๋ฅผ ์ ๊ณตํ ๋ฟ๋ง ์๋๋ผ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅ๋ ๋น๋ฐ๋ฒํธ์ ๋น๊ตํ์ฌ ์ผ์น์ฌ๋ถ๋ฅผ ํ์ธํด์ฃผ๋ ํจ์๋ ์ ๊ณต
// ์ฌ์ฉ์์
// ๋น๋ฐ๋ฒํธ ํ์ธ
if(!passwordEncoder.matches("์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋น๋ฐ๋ฒํธ", "์ ์ฅ๋ ๋น๋ฐ๋ฒํธ")) {
throw new IllegalAccessError("๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ์ง ์์ต๋๋ค.");
}
// WebSecurityConfig
@Bean // ๋น๋ฐ๋ฒํธ ์ํธํ ๊ธฐ๋ฅ ๋ฑ๋ก
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
Spring Security ๋?
๐ฑย Spring Security ์ฃผ์ ์ปดํฌ๋ํธ ํ์ธ
Spring Security ์ Filter
SecurityFilterChain
AbstractAuthenticationProcessingFilter
UsernamePasswordAuthenticationFilter
SecurityContextHolder
Authentication
UserDetailsService
UserDetailsService๋ username/password ์ธ์ฆ๋ฐฉ์์ ์ฌ์ฉํ ๋ ์ฌ์ฉ์๋ฅผ ์กฐํํ๊ณ ๊ฒ์ฆํ ํ UserDetails๋ฅผ ๋ฐํํ๋ค. Customํ์ฌ Bean์ผ๋ก ๋ฑ๋ก ํ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
UserDetails
๊ฒ์ฆ๋ UserDetails๋ UsernamePasswordAuthenticationToken ํ์ ์ Authentication๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉ๋๋ฉฐ ํด๋น ์ธ์ฆ๊ฐ์ฒด๋ SecurityContextHolder์ ์ธํ ๋๋ค.
Customํ์ฌ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.