JAN's History
JWT Basic, Bearer 인증 방식 본문
Session은 동일 도메인에서만 가능하다
- 만약 동일한 도메인에서의 요청이 아니라면, 쿠키가 날라가지 않는다(서버에서 쿠키가 거부하기 때문)
- 그렇다면 javascript에서 Ajax로 헤더에 쿠키를 강제로 담아 보낼 수 있는데, 서버에서는 HTTP Only 설정을 통해 HTTP 요청이 아닌 javascript 요청이 들어오면 거부되는 설정을 한다.
- HTTP only = false로 풀어주면, 외부에서 javascript로 강제로 쿠키에 세션 ID를 담아 보내는 등의 악질적인 장난을 많이 치기 때문에 true로 설정하는 편이 좋다.
Authorization
서버로 요청을 보낼 때, 요청 헤더에 Authorizaion : <type> <credentials>을 담아서 보냅니다.
type에는 여러가지가 있지만 Basic, Bearer를 알아보겠습니다.
Basic
사용자 ID와 PW를 Base64로 인코딩한 값을 토큰을 사용한다.
- Basic 토큰 값이 노출되면 ID와 PW를 그대로 노출시키는 것이 되기 때문에 보안에 취약하다.
Bearer
일반적으로 JWT같은 OAuth 토큰을 사용한다.
- Basic 방식과는 달리, 토큰에 ID, PW를 넣지 않는다
- 로그인 시 토큰을 부여받고 이후 요청할 때 헤더에 토큰을 실어 보내는 방식이다.
- 토큰 값이 노출되어도 토큰 유효시간이 있기 때문에 Basic보다 보안에 강하다.
public class SecurityConfig extends WebSecurityConfigurerAdapter {
protected final CorsFilter corsFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) //세션 없는 상태로 만들겠다.
.and()
.addFilter(corsFilter) //@CrossOrigin는 인증이 없을때만 사용 가능함!, 인증이 필요할 땐 필터에 등록해야한다
.formLogin().disable()
.httpBasic().disable()
.authorizeRequests()
.antMatchers("/api/v1/user/**")
.access("hasRole('ROLE_USER') or hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')")
.antMatchers("/api/v1/manager/**")
.access("hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')")
.antMatchers("/api/v1/admin/**")
.access("hasRole('ROLE_ADMIN')")
.anyRequest().permitAll();
}
}
➡️그래서 JWT를 사용할 때에는 SecurityConfig에서 httpBasic방식을 disable해야한다!
'JWT' 카테고리의 다른 글
JWT를 구현하기전, Filter 등록 테스트 (0) | 2024.07.04 |
---|---|
JWT를 구현하기전, 인증/인가 동작 원리: FilterChain을 이해해보자! (0) | 2024.07.03 |
JWT를 사용하기 위한 security config 세팅 (0) | 2024.06.30 |
JWT의 구조 이해하기 (0) | 2024.06.28 |
JWT를 이해하기전 RSA에 대해 알아보자! (0) | 2024.06.26 |