๐ ์ด ๊ธ์ ์ธํ๋ฐ ์ธํฐ๋ท ๊ฐ์ ์คํ๋ง ์ํ๋ฆฌํฐ - Spring Boot ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐํ๋ Spring Security ์์ ๊ธฐ๋ฐ๋ ๊ฒ์ผ๋ก ์ฌ๊ธฐ์ ์ธ์ฉ๋๋ PPT ์ด๋ฏธ์ง ๋ํ ๋ชจ๋ ํด๋น ๊ฐ์์์ ๊ฐ์ ธ์์์ ์๋ฆฝ๋๋ค.
๐น Remember Me
- ์ธ์ ์ด ๋ง๋ฃ๋๊ณ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ข ๋ฃ๋ ํ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉ์๋ฅผ ๊ธฐ์ตํ๋ ๊ธฐ๋ฅ
- Remember-me ์ฟ ํค์ ๋ํ HTTP ์์ฒญ์ ํ์ธํ ํ, ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ์ ์ฌ์ฉํ์ฌ ์ ํจ์ฑ์ ๊ฒ์ฌํ๊ณ ํ ํฐ์ด ๊ฒ์ฆ๋๋ฉด ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ๋๋ค.
- ๋ง์ฝ ์ด๋ค ์ด์ ๋ก๋ ์ดํ์ ์ธ์ฆ ํ๋ก์ธ์ค์ ์คํจํ๊ฑฐ๋ ๋ก๊ทธ์์ํ๋ฉด ์ฟ ํค๋ฅผ ๋ฌดํจํํ๋ค.
๐น Remember Me API
Remember me ์ฌ์ฉ์ src > main > java > io > security > basicsecurity > SecurityConfig ์์ฑํ๋ค.
์ฌ์ฉ์ http.rememberMe()๋ฅผ ์ถ๊ฐํ๊ฒ ๋๋ค๋ฉด ๋ก๊ทธ์์ ๊ธฐ๋ฅ์ด ์๋ํ๋ฉฐ, api๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
// import ์๋ต
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Autowired
UserDetailsService userDetailsService;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
// ์๋ต
http
.rememberMe()
.rememberMeParameter("remember") // ํ๋ผ๋ฏธํฐ๋ช
, ๊ธฐ๋ณธ๋ช
์ remember-me
.tokenValiditySeconds(3600) // ๋ง๋ฃ์๊ฐ, ๊ธฐ๋ณธ์ 14์ผ
// .alwaysRemember(true)
// ๋ก๊ทธ์ธ ์ Remember-Me ๊ธฐ๋ฅ ๋ฌด์กฐ๊ฑด ํ์ฑํ, false๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ๋ค.
.userDetailsService(userDetailsService);
// ์์คํ
์ ์๋ ์ฌ์ฉ์ ๊ณ์ ์ ์กฐํํ๋ ์ฒ๋ฆฌ ๊ณผ์ ์ ํ์ํ ํด๋์ค
// ์์ฑํ์ง ์๋๋ค๋ฉด
// "java.lang.IllegalStateException: UserDetailsService is required."
// ๋ด๋ถ์ ์ผ๋ก ์ฌ์ธ์ฆ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ์ํด ํ์ํ๋ค๊ณ ํ๋ค.
return http.build();
}
}
๐น Remember Me Cookie ํ์ธ
[ ๋ก๊ทธ์ธ ]
remember-me ๊ธฐ๋ฅ ํ์ฑํ ํ๊ณ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด remember-me ์ฟ ํค๊ฐ ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
- ํฌ๋กฌ ํ์ฅ ํ๋ก๊ทธ๋จ์ธ EditThisCookie๋ฅผ ์ด์ฉํ์ฌ ํ์ธํ๋ค.
- ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ป๋ค ์ผ๋ remember-me ์ฟ ํค๋ ๊ณ์ํด์ ์กด์ฌํ๋ค.
[ ๋ก๊ทธ์์ ]
- ๋ก๊ทธ์์ ์ดํ remember-me ์ฟ ํค๊ฐ ์ญ์ ๋๋ค.
๐น RememberMeAuthenticationFilter
Remember Me์ ๊ธฐ๋ฅ์ ์ค์ ์ฒ๋ฆฌํ๋ Filter ํด๋์ค
๐น RememberMeAuthenticationFilter ๋์ ๋ฐฉ์
์ ๊ทธ๋ฆผ์ฒ๋ผ ๋์ํ๊ธฐ ์ ์ ํํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํํฐ ๊ธฐ๋ฅ์ด ๋์ํ ์ง ๋ง์ง๋ฅผ ๊ฒฐ์ ํ๋ค.
[ ๋์ ์กฐ๊ฑด ]
- ์ธ์ฆ ๊ฐ์ฒด ๋ถ์ฌ
- ์ธ์ ์ด ๋ง๋ฃ๋์ด ์ธ์ ๋ด์ SecurityContext๊ฐ ์๋ ๊ฒฝ์ฐ
- SecurityContext ๋ด์ ์ธ์ฆ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ
- ์์ฒญ์ remember-me ์ฟ ํค ์กด์ฌ
์ ๊ทธ๋ฆผ์์ RememberMeServices๋ ์ค์ RememberMe ์ธ์ฆ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค.
[ RememberMeServices ์ข ๋ฅ ]
- TokenBasedRememberMeServices : ๋ฉ๋ชจ๋ฆฌ์ ์ค์ ๋ก ์ ์ฅํ ํ ํฐ๊ณผ ์์ฒญํ ๋ ๋ค๊ณ ์จ ์ฟ ํค๋ฅผ ๋น๊ตํ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก 14์ผ ๋์ ๊ฐ๊ณ ์๋๋ค.
- PersistentToeknBasedRememberMeServices : DB์ ์ ์ฅ๋ ํ ํฐ์ ๊ฐ๊ณผ ์์ฒญํ ๋ ๋ค๊ณ ์จ ์ฟ ํค๋ฅผ ๋น๊ตํ๋ค.
RememberMeServices ๊ฐ์ฒด๊ฐ Token Cookie๋ฅผ ์ถ์ถํ๊ณ , ์ฌ์ฉ์๊ฐ ๋ค๊ณ ์๋ Tocken์ด RememberMe Tocken์ธ์ง ํ์ธํ๋ค.
์กด์ฌํ๋ฉด ํด๋น ํ ํฐ์ ๋์ฝ๋ฉํ๊ณ , ์๋ฒ์ ์ ์ฅ๋์ด ์๋ Tocken์ ๋น๊ตํ๋ค.
์ผ์นํ๋ค๋ฉด, ํด๋น ํ ํฐ ์์ ์๋ User ๊ณ์ ์ด ์กด์ฌํ๋์ง ํ์ธํ๊ณ , ์กด์ฌํ๋ค๋ฉด ์๋ก์ด Authentication์ ์์ฑํ๊ณ AuthenticationManager์๊ฒ ์ค์ ์ธ์ฆ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
๐ reference