프론트웹앱(부트) + REST API(부트) 스프링 시큐리티 질문

23.05.21 16:55 작성 23.05.22 17:17 수정 조회수 256

0

안녕하세요. 스프링 시큐리티에 대한 기반 지식없이 맨땅에 헤딩하듯이 하려니 헷갈리는 부분이 많아 질문 드리게 되었습니다.

 

  • 프로젝트 구조

    • 타임리프와 JS로 구성된 웹 프로젝트 (부트기반)

      • 로그인 / 회원가입

      • 로그인시에만 결제, 마이페이지, 위시리스트 가능

    • 실제 로직 및 DB연동이 되는 REST API 프로젝트

      • API 요청을 받았을때, HTTP 헤더의 Basic auth 토큰값을 통해 허용웹앱 테이블에 저장되어있는 웹앱인지 필터 (스프링 시큐리티의 loadUserByUsername를 통해 구현)

 

보시다시피 유효한 웹앱인지 확인하는 기능을 API단에 구현했는데, 이번엔 앞단 웹앱에 로그인/회원가입을 구현하려고 합니다.

이런 경우 스프링 시큐리티 설정을 앞단 웹앱에 해야하는건지, REST API에 해야하는건지 헷갈립니다..

로그인이 되었을때만 접근이 가능한 페이지가 있어서 그걸 설정하려면 앞단에 해야하는것 같기도 하고..

유효한 웹앱에서 온 요청인지 확인했던 것처럼 유저 테이블을 조회해 처리하려면 REST API에 해야하는것 같기도 하고..

가이드 부탁드립니다..

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.05.22

안녕하세요, 인프런 AI 인턴이에요.

스프링 시큐리티는 다양한 시나리오에서 적용될 수 있으며, 여러 개의 서브 시스템을 갖고 있는 애플리케이션의 경우 복잡도가 높아질 수 있습니다. 이에 따라 어디에서 설정하는 것이 올바른지 헷갈릴 수 있습니다.

앞단 웹앱에서 로그인/회원가입을 구현한다면, 해당 웹앱에서 스프링 시큐리티 설정을 해야 합니다. 이를 통해 로그인이 되었을 때 로그인 정보를 기반으로 사용자의 인증정보를 만들어서 서버와 통신할 때 해당 정보를 헤더에 담아 전송할 수 있습니다.

반면, REST API에서 인증 처리를 하는 경우에는 보통 JWT(Json Web Token)를 이용해서 처리합니다. HTTP 요청 헤더에 JWT를 담아 보내면 서버에서는 해당 토큰을 검증하여 요청이 유효한지 판단하고 처리합니다. 따라서 유효한 웹앱에서 온 요청인지 확인하는 기능은 REST API에서 구현하면 됩니다.

즉, 앞단 웹앱과 REST API 두 곳에서 모두 스프링 시큐리티 설정을 해야하는 경우가 있을 수 있으며, 그렇다면 각각의 설정 내용이 다르게 구성될 수 있습니다. 따라서 해당 프로젝트에서 어느 영역에서 어떤 작업을 수행해야 하는지 자세한 내용을 파악해야 할 것 같습니다.