<aside> 💡 시큐리티와 OAuth를 사용한 소셜 로그인 공부 내용
</aside>
코드
@RequiredArgsConstructor
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().headers().frameOptions().disable()
...
}
}
A라는 도메인에서 H가 위조된 request를 포함한 link,email을 사용하였을 경우, A도메인에서는 이 사용자가 일반 유저인지 악용된 공격인지 구분할 수가 없다. 그래서 CSRF protection을 통해 GET요청을 제외한 상태를 변화시킬 수 있는 POST,PUT,DELETE 요청으로부터 보호한다.
html에 csrf토큰이 포함되어야 요청을 받아들이게 하여, 위조 요청을 방지한다.
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
그렇다면 왜 csrf를 disable하는가?
rest api를 이용한 서버라면, session기반과 다르게 stateless하기 때문에 서버에 인증정보를 보관하지 않는다. 그래서 필요없다.
인증 정보를 OAuth2나 jwt 토큰등으로 관리한다.
and()
.formLogin()
.loginPage("/loginForm")
.loginProcessingUrl("/login")
.defaultSuccessUrl("/");