Closed Tolerblanc closed 1 year ago
은정님께서 정리해주신 로그인 플로우 입니다
CORS 에러를 해결할 방법이 하나 생각난 것 같아서 이슈를 다시 엽니다. 예전에 은정님께서 한 번 이야기 해주신 방법인 것 같기도 합니다?
현재는 42로그인 버튼을 눌렀을 때 프론트->백->42 인증서버->(42로그인 창 html : 프론트) 플로우여서, 백에서 던진 요청이 프론트로 도착하기 때문에 CORS가 나고 있는데, 프론트 측에서 42 인증서버로 직접 요청하고 결과로 날라오는 토큰만 백으로 전달하면 될 것 같습니다.
해당 토큰에 대한 유효성 검사는 https://api.intra.42.fr/oauth/token/info
로 요청을 보내면 가능합니다!
다만 광식님께서 다른 트센 레포들을 봤을 때, 대부분 팀에서 이 문제를 리다이렉트로 해결하고 있기도 하고, 현재는 밀린 일이 많기 때문에 나중에 다시 와서 보면 좋을 것 같습니다.
10/10
에서 cors 브랜치로 분기해서 인증부분 구현해보겠습니다.
이것저것 찾아보고 있는데 프론트에서 토큰 발급받는거 자체가 탈취당할 위험이 높다고 합니다. 우리가 인증을 진행하는 api 엔드 포인트에서 토큰이 탈취 당했다고 가정해봤을때 토큰을 다시 백엔드로 보내서 토큰이 유효한지 검사하는게 의미가 없을 것 같습니다.
https://api.intra.42.fr/oauth/authorize?client_id={client_id}&redirect_uri={redirect_uri}
로 직접 axios.get
요청axios.get
에 대한 요청으로 42 인증 서버에서 code
파라미터 응답code
를 프론트에서 백으로 login/42login
(엔드 포인트 이름은 임시입니다) 로 axios.get
요청code
를 가지고 https://api.intra.42.fr/oauth/token
로 Body에 grant_type=authorization_code&client_id={client_id}&client_secret={client_secret}&code={code}
를 담아 axios.post
요청https://api.intra.42.fr/v2/me
를 통해 유저 회원가입만약 refresh_token을 가지고 있었다면, 1번에서 42로그인을 눌렀을 때, axios.get
요청이 아닌 백엔드의 regenerateJwt
엔트포인트로 요청 주시면 될 것 같습니다.
로직의 허점을 찾아보아요!
이거 됐나요? 3~4번에서 CORS 안 떠요?
1~2번부터 터져서 이 방법은 제외되었습니다 👯
요약
42OAuth
인증내용
TODO
참고자료