개발 중인 서비스의
프론트엔드는 리액트 & 모바일 두가지를 지원해
백엔드는 스프링 부트로 구성했는데. Oauth2 지원이 필요해서
스프링 시큐리티 OAuth2 Client를 이용해서 구성했음.
리액트에서는 아래 플로우로 로그인 절차를 수행함
1. 백엔드 OAuth2 엔드포인트 접속
2. 백엔드는 해당 요청을 IDP서버로 리디렉션 시키고 사용자 세션을 저장
3. 사용자는 인증 절차 수행
4. 성공 시 IDP는 백엔드 서버 redirect uri로 authorization_code 전송
5. 백엔드는 해당 코드를 이용하여 access token 교환 요청을 idp로 보냄
6. 백엔드는 access token을 발급받아 이를 이용하여 사용자 정보 획득
7. 백엔드는 가져온 사용자 정보와 데이터베이스에 회원 정보를 체크하여 서비스의 JWT토큰을 발급
8. 백엔드는 저장해둔 세션을 가져와 사용자를 프론트엔드의 특정 URL로 리디렉션 시키면서 액세스 토큰과 리프레시 토큰을 쿼리스트링으로 전달
이런 플로우로 동작하고 있음.
근데 8번이 좀 걸려서 쿼리스트링에 별도의 교환 토큰을 하나 전달하고
토큰으로 다시 액세스 토큰하고 리프레시 토큰을 교환하게 한다음 교환 토큰을 폐기하거든
뭔가 조잡한거 같고, 보안도 별로인거 같아서 프론트에 json으로 데이터를 전달하고싶음.
Axios 같은걸로 백엔드의 OAuth2 엔드포인트에 바로 접근하면 json형식으로 데이터를 전달받을 수 있을거 같은데
이거 가능한건가? Idp로 리디렉션 되는 부분 때문에 안될거 같아서
Authorization code 발급 리디렉션 URI를 프론트엔드로 설정하고,
프론트엔드에서 백엔드 서버로 axios로 코드 전송해서 해볼까 하는데
백엔드에서 토큰을 리디렉션 url의 쿼리스트링으로 전달한다는 거임? 그렇게 하기보다는 헤더나 httponly 쿠키로 전달하는게 좋을듯
ㅇㅇ 그래서 테스트해봤는데 위 시나리오에서 바꾸려고 하는 방식으로 해봤는데 된다.