inflearn logo
강의

Course

Instructor

Microservice Application (MSA) Development with Spring Cloud

Integrating Users Microservice with Spring Cloud Config ➁

안녕하세요! 질문있습니다.

588

ygh

19 asked

0

안녕하세요. 좋은 강의 감사드립니다 :)

강의 19:23초경에 엔드포인트를 /health_check로 두고 get 요청을 날리셨는데, user-service의 WebSecurity에서 권한을 막아놓은 요청아닌가요?

어떻게 access denied가 발생하지 않았는지 궁금합니다.

springsecurity JPA spring-cloud spring-boot architecture msa Kafka

Answer 2

1

Dowon Lee

안녕하세요, 이도원입니다. 

user-service 애플리케이션에 직접 /health_check를 요청하는 것에 대해서는 접근 권한을 막지 않고 있습니다. 

http.authorizeRequests().antMatchers("/**")
.hasIpAddress(env.getProperty("gateway.ip")) // <- IP 변경
.and()
.addFilter(getAuthenticationFilter());

위 코드에서 보시는 것처럼, 모든 요청에 대해 IP를 체크한 다음, Filter를 적용하고 있습니다. UsernamePasswordAuthenticationFilter를 구현한 AuthenticationFilter를 통해 /login endpoint를 사용할 수 있으며,  user-service에서는 모든 요청(/**)에 대해 AuthenticationFilter를 적용하도록 하고 있습니다. 만약 AuthenticationFilter를 적용하지 않으면, Spring Security에서 제공하는 /login을 사용하지 못해, 직접 로그인 관련된 기능을 구현하시거나, formLogin을 사용하셔야 합니다. 강의에서는 Postman으로 테스트하고 있기 때문에, 별다른 Login 폼 없이, Spring Security에서 제공하는 /login을 사용하고 있습니다.

user-service에서 구현한 endpoints에 대한 액세스 가능 여부는, 로그인 후 발급 된 토큰(JWT) 정보를 Spring Cloud Gateway(apigateway)에서 확인 한 다음, 정상적인 JWT일 경우 user-service로 요청을 전달하고 있습니다. 

만약 user-service에서 직접 액세스를 제어하실려면, 다음과 같은 코드를 이용하여 확인해 보실 수 있습니다. 

http.authorizeRequests().antMatchers("/users")
.hasIpAddress(env.getProperty("gateway.ip")) // <- IP 변경
.and()
.addFilter(getAuthenticationFilter());

http.authorizeRequests().anyRequest().denyAll();

- apigateway에서 호출, http://[server ip]:8000/user-service/users -> OK

- apigateway에서 호출, http://[server ip]:8000/user-service/welcome -> Fail

- user-service에서 호출, http://[server ip]:64768/welcome -> Fail

/users 요청에 대해 GET/POST, /login 처리는 가능하며, 나머지 요청에 대해서는 모두 거부하는 것을 확인해 보실 수 있을 겁니다. 

감사합니다. 

0

wnrhd10821572

안녕하세요! 질문있습니다.

안녕하세요. 좋은 강의 감사드립니다 :)

강의 19:23초경에 엔드포인트를 /health_check로 두고 get 요청을 날리셨는데, user-service의 WebSecurity에서 권한을 막아놓은 요청아닌가요?

어떻게 access denied가 발생하지 않았는지 궁금합니다.

Dowon Lee
Dowon Lee2021.05.13 PM 16:44

안녕하세요, 이도원입니다. 

user-service 애플리케이션에 직접 /health_check를 요청하는 것에 대해서는 접근 권한을 막지 않고 있습니다. 

http.authorizeRequests().antMatchers("/**")
.hasIpAddress(env.getProperty("gateway.ip")) // <- IP 변경
.and()
.addFilter(getAuthenticationFilter());

위 코드에서 보시는 것처럼, 모든 요청에 대해 IP를 체크한 다음, Filter를 적용하고 있습니다. UsernamePasswordAuthenticationFilter를 구현한 AuthenticationFilter를 통해 /login endpoint를 사용할 수 있으며,  user-service에서는 모든 요청(/**)에 대해 AuthenticationFilter를 적용하도록 하고 있습니다. 만약 AuthenticationFilter를 적용하지 않으면, Spring Security에서 제공하는 /login을 사용하지 못해, 직접 로그인 관련된 기능을 구현하시거나, formLogin을 사용하셔야 합니다. 강의에서는 Postman으로 테스트하고 있기 때문에, 별다른 Login 폼 없이, Spring Security에서 제공하는 /login을 사용하고 있습니다.

user-service에서 구현한 endpoints에 대한 액세스 가능 여부는, 로그인 후 발급 된 토큰(JWT) 정보를 Spring Cloud Gateway(apigateway)에서 확인 한 다음, 정상적인 JWT일 경우 user-service로 요청을 전달하고 있습니다. 

만약 user-service에서 직접 액세스를 제어하실려면, 다음과 같은 코드를 이용하여 확인해 보실 수 있습니다. 

http.authorizeRequests().antMatchers("/users")
.hasIpAddress(env.getProperty("gateway.ip")) // <- IP 변경
.and()
.addFilter(getAuthenticationFilter());

http.authorizeRequests().anyRequest().denyAll();

- apigateway에서 호출, http://[server ip]:8000/user-service/users -> OK

- apigateway에서 호출, http://[server ip]:8000/user-service/welcome -> Fail

- user-service에서 호출, http://[server ip]:64768/welcome -> Fail

/users 요청에 대해 GET/POST, /login 처리는 가능하며, 나머지 요청에 대해서는 모두 거부하는 것을 확인해 보실 수 있을 겁니다. 

감사합니다. 

kafka 업데이트 강의 듣고 시포요

0

83

1

강의 교안

0

71

1

마이크로서비스간 통신 시, 인증 처리

0

79

1

api gateway 에서 인증 처리

0

64

1

섹션 19 질문드립니다

0

51

1

강의 자료 업데이트

0

81

1

부하분산 강의 섹션

0

56

1

강의자료는 어디에서?

0

69

1

강의 자료는 어디서 다운 받을 수 있나요?

0

109

1

전체 사용자 조회시 오류

0

57

1

혹시 pk 외 별도의 id 를 부여한 이유가 있을까요 ??

0

109

2

학습 방향

0

94

2

카프카 커넥터 사용 목적 문의

0

85

2

kafka 강의

0

106

2

서비스 디스커버리 종류

0

86

2

강의 자료에 대해서 궁금해요

0

115

2

GlobalFilter, LoggingFilter가 동작하지 않습니다.

0

89

2

Kafka Source Connect 버전 에러

0

83

2

소스커넥터는 사용안한 거 맞죠?

0

81

2

강의자료 업데이트 문의

0

94

2

강의에서 BCryptPasswordEncoder 에 역할(5-2)

0

56

1

강의 업데이트 계획이 궁금합니다.

0

111

2

MSA 애플리케이션에 Spring Web과 Spring Data JPA를 사용하는 것이 바람직한지 궁금합니다. (MSA 설계와 관련된 질문입니다)

0

160

2

어떤 것이 업데이트 된 건가요?

0

162

2