안녕하세요.
카카오로그인 처리와 무관하게 자체 발급한 jwt를 프론트로 전달하는 것과 인가코드를 프론트로 받아 백엔드로 Request하며 Response로 자체 jwt까지 함께 처리 하는 방식을 생각하신것 같습니다.
이부분은 개발환경에 종속적인 부분이라 환경에 따라 자유롭게 선택하시면 됩니다.
프론트와 백엔드가 구분되지 않는 스크립틀릿(asp, jsp, php) 환경 등에서는 jwt를 프론트로 전달할 고민이 필요없고,
모바일 기기에서 단독사용하는 네이티브앱이라면, 프론트 SDK에 모든 과정을 일임하기도 합니다.
웹 환경에서 프론트/백엔드가 분리된 경우
스프링 OAuth Client 사용하시면, 백엔드에 인가코드 요청 부터 모든 과정을 일임하고,
카카오 액세스토큰발급을 자체 구축하셨다면, 리다이렉트 URI를 백엔드로 받아 처리하기도 하지만.
사용하는 OAuth 라이브러리에서 인가코드요청과 액세스 토큰 발급간 state 파라메터 동일 출처 검증하면 인가요청과 토큰발급을 따로 분리할 수 없기도 합니다.
구상하신 것과 같이 인가코드를 프론트로 받아 백엔드로 전달도 못할 것은 없지요.
백엔드에 토큰 보관을 권장하는 것은 불필요한 외부 접근을 차단하기 위함이고,
회원가입과 같이 민감정보가 반드시 프론트와 교신해야하는 경우도 있으니 암호화, https통신, PKCE와 같이 적절한 보완책만 있으면 됩니다.
백엔드에서 프론트로 리다이렉트 해야는 경우,
- jwt는 httponly 쿠키에 담아 전달하기도하고,
- 프론트 get 파라메터로 그냥 jwt 전달하되 jwt 내 nonce 파라메터 상호 검증해서 보완할 수도 있고 (유출되도 사용할 수 없게)
- 캐시 서버에 jwt 수명만큼 일시 보관하는 방법도 사용할 수 있습니다.
문의주신 환경에서 개발 편의성만 본다면 인가코드를 프론트로 받아 백엔드로 Request하며 Response로 자체 jwt까지 함께 처리 하는 방식도 사용할 수 있습니다.