인프런 커뮤니티 질문&답변
작성자 없음
작성자 정보가 삭제된 글입니다.
user service에서는 토큰 검증을 하지 않나요?
작성
·
265
1
제가 작성한 user-service SecurityConfig 입니다
강의 내용과 최대한 유사하게 작성한거 같은데 GET /users에서 403이 발생하여 문의드립니다.
gateway service에서 토큰 검증을 하여도 user service에서는 검증된 토큰인지 알 수 없으니 403이 발생하는게 맞는거 같은데 강의에서는 api가 제대로 동작하여 왜 그런지 궁금합니다
@RequiredArgsConstructor
@Configuration
public class SecurityConfig {
//AuthenticationManager가 인자로 받을 AuthenticationConfiguraion 객체 생성자 주입
private final AuthenticationConfiguration authenticationConfiguration;
private final JwtProvider jwtProvider;
private static final String[] WHITE_LIST = {"/login", "/h2-console/**", "/health-check", "/welcome", "/join"};
@Bean
public SecurityFilterChain config(HttpSecurity http) throws Exception {
AuthenticationManager authenticationManager = authenticationManager(authenticationConfiguration);
AuthenticationFilter authenticationFilter = new AuthenticationFilter(
authenticationManager, jwtProvider);
http.csrf(csrf -> csrf.disable()) //CSRF 보호를 비활성화. REST API 환경만 비활성화. Web Form 기반에서는 필요.
.formLogin((auth) -> auth.disable())
// .httpBasic((auth) -> auth.disable())
.headers(header -> header.frameOptions(
frameOptionsConfig -> frameOptionsConfig.disable())
) //h2 console iframe을 사용하기 때문에 X-Frame-Options 헤더를 비활성화
.authorizeHttpRequests(auth ->
auth.requestMatchers(WHITE_LIST).permitAll()
.anyRequest()
.authenticated()
)
.authenticationManager(authenticationManager)
.addFilterAt(authenticationFilter, UsernamePasswordAuthenticationFilter.class)
.sessionManagement((session) -> session
.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
return http.build();
}
//AuthenticationManager Bean 등록
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception {
return configuration.getAuthenticationManager();
}
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}답변 2
0
안녕하세요, 이도원입니다.
답변이 늦었습니다. AI 답변이 되었지만, 추가로 몇가지 말씀드리면, 403 오류는 어려 형태로 발생될 수 있습니다. apigateway-service에서 토큰 유효성까지 모두 확인되었고, user-service로 요청이 넘어간 상태에 403 오류가 발생될 수 있습니다. 예를 들어 SecurityConfig에서 접속한 IP를 제어하고 있는 상황에서 IP 주소가 달라도 403 오류가 발생될 수 있습니다. 한가지 상황에서 발생되는 것이 아니기 때문에, 에러코드를 상세화 하여 구분하거나, 디버깅으로 403의 원인을 찾아가는 방법이 필요할 수 있습니다. 작업하신 코드와 현재 올려진 github의 코드하고는 방식이 조금 다르기 때문에, 2개를 비교하시고 라이브러리 버전과 사용되는 API를 비교하는 것도 필요할 수 있습니다. 강의 설명 부분은 이전 라이브러리 사용이고, 실습 관련해서는 작년에 업데이트 된 부분이 있기 때문에, 2개의 차이도 확인해 보시기 바랍니다. 강의 설명에 대한 최신화는 상반기 중으로 업데이트 예정입니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
이곰님께서 올려주신 Spring Security 설정을 보니, 게이트웨이 서비스에서 토큰 검증을 수행하도록 설정되었으나, user-service 내에서 JWT 토큰을 검증하기 위한 추가적인 설정이 필요한 것 같습니다. 강의에서는 게이트웨이 서비스가 최초 요청에서 인증 및 인가를 관리하며, 인증이 완료된 요청만 user-service에 전달되도록 구성되어 있습니다.
하지만, 만일 user-service 내에서 자체적으로 토큰을 검증해야 한다면, 이를 명시적으로 설정해 주어야 합니다. 일반적으로 필요한 과정은 다음과 같습니다:
JWT 필터 추가:
user-service에서 JWT를 검증하는 필터를 추가해야 합니다. 게이트웨이에서 인증이 되었더라도, 토큰의 유효성 검사가user-service본인 내에서도 일어나야 요청을 신뢰할 수 있습니다.SecurityFilterChain 구성:
SecurityFilterChain의 구성에서 JWT 필터를 명시적으로 추가하여, 각 요청에 대해 필터를 통과하도록 설정해야 합니다.
관련하여 유사한 문제를 겪었던 다른 수강생의 질문들을 통해 해결책을 확인할 수 있습니다:
- “Spring Boot Security와 JWT를 이용한 API 토큰 인증”: 여기에서 user-service 내에서 JWT 필터를 추가하는 코드를 참고하실 수 있습니다.
또한, user-service 내에서 인증이 필요하지 않은 경로들을 WHITE_LIST에 추가 해주셨지만, 이외의 경로들에 대해서는 JWT 검증 필터가 추가되어야 접근이 가능하도록 설정됩니다.
위의 이유로 인해 403 Forbidden 오류가 발생하고 있으며, 이를 해결하기 위해 user-service에서의 JWT 검증 설정을 한 번 더 검토해 주시길 권장드립니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






추가로, user-service는 외부에서 직접적인 호출이 안되고, apigateway-service를 통해서만 오픈되어 있는 서비스라 가정하고 구성된 예제이기 때문에, 특별히 user-service에서 토큰 유효성을 추가하지는 않았습니다. 참고 부탁드립니다. 감사합니다.