작성
·
504
0
안녕하세요. 좋은 강의 감사드립니다 :)
강의 19:23초경에 엔드포인트를 /health_check로 두고 get 요청을 날리셨는데, user-service의 WebSecurity에서 권한을 막아놓은 요청아닌가요?
어떻게 access denied가 발생하지 않았는지 궁금합니다.
답변 2
1
안녕하세요, 이도원입니다.
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가 발생하지 않았는지 궁금합니다.
안녕하세요, 이도원입니다.
user-service 애플리케이션에 직접 /health_check를 요청하는 것에 대해서는 접근 권한을 막지 않고 있습니다.
위 코드에서 보시는 것처럼, 모든 요청에 대해 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에서 직접 액세스를 제어하실려면, 다음과 같은 코드를 이용하여 확인해 보실 수 있습니다.
- 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 처리는 가능하며, 나머지 요청에 대해서는 모두 거부하는 것을 확인해 보실 수 있을 겁니다.
감사합니다.