JWT를 사용하기 위해서는
이 필요하다.
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final CorsFilter corsFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
...
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)//세션을 사용하지 않겠다는 설정 추가
.and()
.addFilter(corsFilter)// 모든 요청이 필터를 거치게 됨.
.formLogin().disable()//JWT 방식이라 폼로그인 필요 없음. 즉, 로그인 폼이 필요 없음.
.httpBasic().disable()//기본 http 방식 안씀.
...
}
}
크로스 오리진 설정용 필터
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class CorsConfig {//크로스 오리진 정책 설정
@Bean
public CorsFilter corsFilter(){
UrlBasedCorsConfigurationSource source=new UrlBasedCorsConfigurationSource();
CorsConfiguration config=new CorsConfiguration();
config.setAllowCredentials(true);// 내 서버가 응답을 할 때 Json을 자바스크립트에서 처리할 수 있게 할지를 결정하는 것
config.addAllowedOrigin("*");//모든 ip에 응답을 허용
config.addAllowedHeader("*");//모든 헤더에 응답 허용
config.addAllowedMethod("*");//모든 http 메서드 응답 허용
source.registerCorsConfiguration("/api/**",config);
return new CorsFilter(source);
}
}
요청을 보낼 때, Header에 Authorization: id ,password 형식으로 보내는 방식이다.
이 방식은 id랑 비밀번호가 노출되기 때문에 위험하다. 노출되지 않게 하려면 HTTPS를 사용하는 방법이 있다.
다른 방법으로는 Authorization에 토큰을 넣는 방식이다. 이 토큰은 노출이 되더라도 id 나 비밀번호는 바로 알 수 없기 때문에 HTTP Basic보다 덜 위험하다.
또한 토큰은 유효시간이 있어서 시간이 지나면 해당 토큰으로 인증을 할 수 없게 된다.
jwt가 바로 이 Bearer 방식이다.
토근 기반 인증에서 bearer는 무엇일까? (velog.io)
[Spring Security] Authentication 방식(JWT / Form / Http) (tistory.com)