• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

안녕하세요! 소셜로그인 관련 질문입니다!

23.06.29 13:58 작성 23.06.29 22:28 수정 조회수 567

0

프로젝트

  1. MSA 환경에서 프론트는 외부 서버에서 별도로 배포합니다.

  1. 프론트는 APIGateway 로만 데이터를 교환하고자 합니다.

  1. 현재 카카오 로그인 기능만 구현하고자 하는데 이를 JWT + Redis 를 활용하여 JWT 토큰을 검증하고 Gateway 에서 검증하고 각 서비스를 호출 하는방식으로 구현하고자 합니다. 제가 이해한게 맞다면 자체 포함타입일거같습니다.

  2. 플로우는 다음과 같습니다
    Front kakao click -> kakao 검증 -> 프로젝트 서비스의 회원(member) 별도 저장

    이때 Front 요청-> gateway(Auth-client) 로드밸런싱-> Authorization Server(Auth-Server) kakao인증후 User권한 인가 jwt -> Front 요청 -> gateway(redis 에 세션,jwt 저장)

    이렇게 될것이라고 생각하고 있었는데 강의를 보다보니 Kakao login 과 jwt 는 client 쪽인 apigateway 에서 구현을 해야하는건가요?

     

    또한 개념적으로 접근하게 된다면 카카오로그인으로 회원을 인증하고 제가 만든 프로젝트의 권한을 인가개념을 분리해야하는건지 어렵더라구요 ㅠㅠ 기존에 모놀리식으로 할땐 검색하며 예제를 복붙하면서 따라하다보니 막상 인증/인가를 분리하려니 어려움을 겪고있습니다.

     

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.07.01

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

프론트엔드가 APIGateway를 통해 데이터를 교환하고 카카오 로그인을 구현하고자 한다는 내용이네요.
여러 부분에 관한 질문이 있으신 것 같은데, 각각에 대해 답변 드리겠습니다.

  1. JWT와 Redis를 활용한 검증 및 세션 저장 방식
    프론트에서 첫 번째 요청 시 카카오 로그인을 검증하고, 토큰을 발급받아 Gateway에서 검증하고 서비스를 호출하는 구조로 구현하고자 하시는 거 맞나요? 이 경우에는 JWT와 Redis를 활용하여 토큰을 검증하고 세션을 저장하는 방식으로 구현하셔도 됩니다. 물론, 이 부분은 실제로 구현해보시고 동작을 확인해보시는 것이 좋습니다.

  2. 카카오 로그인과 JWT 구현 위치
    카카오 로그인은 클라이언트 쪽에서 진행하는 것이 일반적입니다. 따라서, apigateway가 클라이언트 역할을 하고 있는 경우에는 apigateway에서 카카오 로그인을 구현하면 됩니다. 여기서 발급된 JWT 토큰이 모든 서비스에 전달되며, 각 서비스에서 토큰을 검증하여 처리하는 구조가 될 것입니다.

  3. 인증과 인가 개념의 분리
    인증과 인가는 개념적으로 분리하는 것이 좋은 설계입니다. 카카오 로그인으로 회원을 인증하고, 프로젝트의 권한을 인가하는 것을 별도로 처리하는 것이 좋습니다. 이를 위해 인증 서버와 인가 서버를 따로 구성하는 방법도 있습니다.

위 내용을 참고하시면서 진행하시면 되겠습니다. 추가적으로 궁금한 점이 있으면 언제든지 물어보세요. 잘 도와드리도록 하겠습니다.

wy9295님의 프로필

wy9295

질문자

2023.07.01

먼저 상세한 답변 감사합니다.

  1. 맞습니다. Front -> APIGateway 로 모든 요청을 통일하고 싶었습니다.

  2. 카카오 로그인과 JWT를 gateway에 구현하면 된다는 말씀으로 이해했습니다.

    • 만약 이렇게 할경우 인가서버는 딱히 불필요해보이는데 제가 생각하는 것이 맞는지 궁금합니다!

" Front 요청-> gateway(Auth-client) 로드밸런싱-> Authorization Server(Auth-Server) kakao인증후 User권한 인가 jwt -> Front 요청 -> gateway(redis 에 세션,jwt 저장) "

위 플로우가 조금 더 상세한 설명이 필요한데요..

gateway 에서 카카오로 인가요청을 보낸 후 토큰을 획득한다음에 사용자의 인증까지 처리하는 과정까지는 스프링 시큐리티에서 해 주고 있습니다. 이 때 인증처리가 성공하는 시점에 별도의 jwt 토큰을 생성해서 클라이언트로 전달하고 클라이언트가 이 토큰을 가지고 각 서비스마다 접근하는 방식으로 하게 됩니다. 아니면 별도의 jwt 가 아닌 세션에 SecurityContext 를 저장하는 방식으로 하기도 합니다.

아래 강의 챕터를 참고하시면 됩니다.

https://www.inflearn.com/course/lecture?courseSlug=%EC%A0%95%EC%88%98%EC%9B%90-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0&unitId=123237&tab=activity-log

그리고 소셜 로그인 이후의 권한을 제어하는 부분은 클라이언트에서 별도로 처리해 주어야 합니다.

즉 소셜 로그인은 사용자의 인증까지만 처리하는 것이고 사용자가 특정한 권한을 가지고서 서비스 접근 여부를 제어하는 것은 소셜 로그인과는 무관합니다.

 

비슷한 질의가 있어 아래 내용도 참고하시면 좋겠습니다.

https://www.inflearn.com/questions/723604/spring-boot-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-jwt-social-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%B2%98%EB%A6%AC-%EC%A7%88%EB%AC%B8-%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4

wy9295님의 프로필

wy9295

질문자

2023.07.05

감사합니다! 참고해서 작성해보겠습니다