본문 바로가기

개발

[Spring Cloud Gateway] Admin 로그인 API가 따로 필요한가 ? ?

module-admin → [AdminFIlter]

@Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String path = exchange.getRequest().getPath().toString();
        System.out.println("path = " + path);

        String authorizationHeader = exchange.getRequest().getHeaders().getFirst("Authorization");

        if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")) {
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }

        String token = authorizationHeader.substring(7);
        String role = jwtUtil.getRole(token);
        if (!"ROLE_ADMIN".equals(role) || !"ROLE_SUPER_ADMIN".equals(role)) {
            exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);
            return exchange.getResponse().setComplete();
        }

        return chain.filter(exchange);
    }

 

Spring Cloud Gateway를 사용할 때 Admin 필터를 사용하여 jwt토큰의 role 클레임이 "ROLE_ADMIN"인지 검증한다.

그러면 어짜피 jwt토큰만 발급받으면 되는데 사용자 로그인 API와 어드민 로그인 API를 따로 구현할 필요가 있나하는 의문점...!

 

 

일단 내가 이해하는 방식이다.

↓  ↓  ↓

 

 

1. User: login 요청

 

2. SCG를 통해 인증 서버에 로그인 API 요청

 

3. 인증 서버에서 JWT 토큰 발급

 

4. User: 유저 조회 요청

 

5.  User의 토큰으로 SCG의 Authentication Filter 통과 후 User 서버에서 유저 조회 API 요청

 

6. 유저 정보 응답 받음

 

7. User: 어드민 기능 요청

 

8.  SCG의 Admin FIlter에 의해 해당 요청이 Admin 서버로 가지않음

 

9. 예외 응답

 

10. Admin: 로그인 API 요청

 

11. role: ROLE_ADMIN으로 설정된 JWT 토큰 응답

 

12. 해당 JWT 토큰으로 SCG의 Admin FIlter 통과

 

13. 성공적으로 Admin 서버 접근

 

괜찮은 것 같은데 ? ?  왜 사용자와 어드민의 로그인 API가 달라야할까 ? ?!!

 

도와줘 챗찌핕티@@!

 

 

오 ..  오.. 지금은 개발 단계라 필요없어보이긴하지만 .. . 확장성/ 유지보수성/ 보안강화같은게 있구나..

일단 API 분리해놓는걸루 ~ ㅎ