작성
·
57
0
안녕하세요 강의 잘 듣고 있습니다.
MSA 환경에서 SPRING CLOUD GATEWAY를 사용할때 예를들어 유저 서비스에서 JWT 서비스(생성, 검증)를 구성하고 SPRING CLOUD GATEWAY feign client로 통신하고 토큰을 검증하고 각 모듈로 헤더를 통해서 userId, role을 전달할때 api별 권한을 관리를 어떻게 하는지는 궁금합니다.
스프링 클라우드 게이트웨이에 SecurityConfig에서 모든 모듈에 대한 url에 권한을 설정하기에는 너무 많은 api별 권한을 적어야놔야 할것같아서 이게 맞나 싶습니다
혹시 각 모듈마다 ApiGatewayAuthenticationFilter를 만들어서 헤더 값을 통해서 아래 코드와 같이 SecurityContextHolder를 주입시켜서 각 모듈에 대한 SecurityConfig에서 권한을 관리 하거나 @PreAuthorize를 통하여 관리하거나 실무에서는 어떤 방법을 쓰는지 궁금합니다!!!List<SimpleGrantedAuthority> authorities = Collections.singletonList(
new SimpleGrantedAuthority(formattedRole));
UsernamePasswordAuthenticationToken authentication =
new UsernamePasswordAuthenticationToken(userId, null, authorities);
SecurityContextHolder.getContext().setAuthentication(authentication);
더 좋은 방법이 있다면 알고 싶습니다!!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
qheogus55님, MSA 환경에서 API별 권한 관리를 어떻게 할지 고민하시는군요!
스프링 클라우드 게이트웨이에서 각 모듈에 대해 권한 관리를 효율적으로 하려면 다음과 같은 방법들이 있습니다:
Centralized Authorization Service: 중앙 집중식으로 권한을 관리하는 서비스(예: OAuth2 서버)를 구성합니다. 각 모듈이 이 서비스를 통해 권한을 확인합니다. 이를 통해 권한 관리를 단일화하고 더 쉽게 유지보수할 수 있습니다.
Spring Security with JWT: 모든 요청에 대해 JWT를 사용하여 사용자 정보를 포함시키고, 각 서비스가 JWT를 검증하여 사용자 및 권한 정보를 검토할 수 있도록 합니다. 각 모듈에서 SecurityContext
를 통해 권한을 설정하고, 엔드포인트별로 @PreAuthorize
등을 사용하여 세부적인 권한 관리를 할 수 있습니다.
Role-based Access Control (RBAC): 역할 기반 권한 관리를 통해 API별로 접근 권한을 설정합니다. SecurityConfig에서 URL과 권한을 매핑하거나, @PreAuthorize
어노테이션을 활용해 컨트롤러의 메소드 수준에서 권한을 제어합니다.
각 방법마다 장단점이 있으므로, 프로젝트의 요구사항과 팀의 역량에 맞춰 적절한 방법을 선택하시면 됩니다. 특히 대규모 MSA 구조에서는 중앙 집중식 권한 관리가 더 나은 경우가 많습니다.
위의 방법들을 참고하시면서, 실무 상황에 맞게 적절하게 변형 및 적용해 보는 것이 좋습니다.
추가적으로 더 깊이 있는 내용은 Spring Security Reference Guide를 참고하세요.
감사합니다!