카테고리 없음

NextJs + Spring Boot에 SAML 기반 SSO 적용

디벨로펄 2025. 2. 25.
반응형

안녕하세요 디벨로펄입니다.

회사에서 front 코드를 jsp에서 nextjs로 변경하기로 결정되었습니다.

약 4년 쯤 전 시작한 프로젝트에서 jsp를 사용하게 된 것이 조금 아쉽지만

그래도, 아직 바꾸기에 늦지 않았네요

기존 프로젝트 구조 및 변경점

  • 기존 프로젝트
    • Backend : Spring Boot
    • FrontEnd : jsp
    • SSO, SSL 적용
  • 변경 프로젝트
    • Backend : Spring Boot
    • FrontEnd : nextjs
    • SSO, SSL 적용 - 이슈

프로젝트 변경점

문제점

기존에는 하나의 server로 진행돼서 인증을 요청하고 redirect 되는 경로가 일치했습니다.
하지만, front와 backend를 분리하면서 redirect되는 경로가 일치하지 않는 문제가 발생합니다.

  • 이는 nginx의 프록시를 활용하여 해결합니다.

SAML 인증 과정

  1. 사용자의 browser에서 Service Provider(개발한 BackEnd서버)로 sso인증 api를 호출합니다.
  2. SP에서 browser로 idp로 향하는 redirect url을 응답합니다.
  3. idp는 로그인 화면을 사용자에게 보여주고, 사용자는 로그인을 진행합니다.
  4. 로그인이 완료되면, _SAML Response_와 함께 Response를 처리하는 api(SP)를 호출합니다.
  5. SP에서는 인증된 Response를 받아서 로그인 처리를 해줍니다.
    • 저는 Session에 로그인 정보를 저장했습니다.
  6. SP에서 Client에 FrontEnd화면으로 redirect 합니다.
  7. 이후 요청 부터는 session에 설정된 로그인 정보를 활용합니다.

추가 이슈점

  • nginx에서 SAML Response할 때
    • 301 : 영구적 Redirect로 GET요청으로 변경됨
    • 307 : 일시적 Redriect로 기존 요청 정보 그대로 가지고감

배운점

  1. nginx 사용 방법 - redirect, 서버 등등
  2. 서비스 구조가 복잡해져서 오히려 더 상세히 알게됨
  3. 프로토콜의 중요성 - 301, 307
  4. SAML을 인증 방법 - 요새는 OAuth를 주로 사용하지만...

여러모로 의미있었다.
이제 다른 일 해야지...

반응형

댓글