강의

멘토링

로드맵

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của ygh1558
ygh1558

câu hỏi đã được viết

Ứng dụng kiến trúc microservice (MSA) phát triển với Spring Cloud

Microservice Users tích hợp Spring Cloud Config ➁

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

Viết

·

586

0

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

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

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

springsecurityJPAspring-cloudspring-bootarchitecturemsaKafka

Câu trả lời 2

1

Dowon Lee님의 프로필 이미지
Dowon Lee
Người chia sẻ kiến thức

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

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

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

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

강의 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 처리는 가능하며, 나머지 요청에 대해서는 모두 거부하는 것을 확인해 보실 수 있을 겁니다. 

감사합니다. 

Hình ảnh hồ sơ của ygh1558
ygh1558

câu hỏi đã được viết

Đặt câu hỏi