JWT 기본 설정

dasd412·2022년 3월 15일
0

JWT

목록 보기
3/9

JWT를 사용하기 위해서는

  1. 세션을 사용하지 않겠다는 설정
  2. 크로스 오리진 모두 허용하도록 설정
  3. 폼 로그인 방식을 사용 하지 않겠다는 설정
  4. 기본 HTTP 방식을 사용하지 않겠다는 설정

이 필요하다.

@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);
    }

}

HTTP Basic 방식

요청을 보낼 때, Header에 Authorization: id ,password 형식으로 보내는 방식이다.

이 방식은 id랑 비밀번호가 노출되기 때문에 위험하다. 노출되지 않게 하려면 HTTPS를 사용하는 방법이 있다.

Bearer 방식

다른 방법으로는 Authorization에 토큰을 넣는 방식이다. 이 토큰은 노출이 되더라도 id 나 비밀번호는 바로 알 수 없기 때문에 HTTP Basic보다 덜 위험하다.

또한 토큰은 유효시간이 있어서 시간이 지나면 해당 토큰으로 인증을 할 수 없게 된다.

jwt가 바로 이 Bearer 방식이다.

참고

토근 기반 인증에서 bearer는 무엇일까? (velog.io)

[Spring Security] Authentication 방식(JWT / Form / Http) (tistory.com)

profile
시스템 아키텍쳐 설계에 관심이 많은 백엔드 개발자입니다. (Go/Python/MSA/graphql/Spring)

0개의 댓글