문제 발생 : 위 인프런 Spring Cloud MSA 강의 따라하는 도중 user-service에서 로그인 기능 구현하는 부분에서 막히는 부분 발생함.
(POST / 127.0.0.1:8000/user-service/user API 호출 시 아래처럼 403 에러 발생)
해결 : 유레카 서비스 웹 페이지에서 강사님 서비스들 URI는 192.168.0.8 IP로 등록되어 있었고, 아래 코드 부분의
.hasIpAddress("192.168.0.8") 으로 등록하시고 잘 동작 하는 것 확인하였는데, 내가 개인적으로 실습할 때는 그냥 나의 로컬 IP 주소 적으면 되는 것으로 생각하고 127.0.0.1, 192.168.0.16, localhost 등 적고 프로그램 실행하니 403 권한 오류만 계속 return되어서 환장할 뻔 했다.
결국 지금 생각해보면 나의 현재 설정에서는 API Gateway가 등록한 user-service MSA 서버의 주소를 return 할 때
http://host.docker.internal:57929/actuator/info 로 return 하였고, API Gateway로부터 return 받은 user-service의 IP를 인증 과정에서 통과시키리면 .hasIpAddress("host.docker.internal") 로 입력하여야 하는게 맞는것 처럼 보인다.
위 문제는 API Gateway로 다른 마이크로서비스들을 호출하는 과정에서 어떤 URI가 return되는지 이해/체크하지 못한 부분과, 권한/인증에 관하여 깊이있게 생각하지 못하였어서 해맸던 문제였던 것 같다.
// 권한 관련 설정 메서드
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
// http.authorizeRequests().antMatchers("/**").permitAll();
http.authorizeRequests().antMatchers("/actuator/**").permitAll();
System.out.println("http = " + http.authorizeRequests().toString());
http.authorizeRequests().antMatchers("/**")
.hasIpAddress("host.docker.internal") // 본인 IP
//.hasIpAddress("127.0.0.1") // 본인 IP
.and()
.addFilter(getAuthenticationFilter());
http.headers().frameOptions().disable();
}
댓글