Skip to content

DOCS.OAuth

negu63 edited this page Aug 31, 2021 · 5 revisions

OAuth의 흐름

Github OAuth를 달게 되었다.

처음에는 OAuth에 필요한 프로세스를 모두 서버 안에서 처리하려고 했지만, 내가 아는한 그건 불가능했다. 그래서 방법을 생각해봤다.

  1. API 서버에 있는 GitHub 주소를 받아온다.
  2. 받아온 주소로 이동한다.
  3. Github OAuth를 통해 인증한다.
  4. callback url을 인증을 위한 페이지로 연결한다.
  5. 인증 완료!

----- 민상 생각

  1. 프론트에서 API 서버에 있는 Github 주소를 받아와서 상수로 저장해둔다.
  2. Github 로그인 클릭시 받아온 서버 주소로 직접 접근한다.
  3. Github OAuth 페이지로 리다이렉트 시킨다.
  4. 인증을 한다.
  5. callback url을 인증을 위한 프론트 페이지로 설정한다.
  6. 프론트 페이지로 이동한다.
  7. 프론트에서 url에 쿼리를 가져오는데 그 쿼리를 서버로 get요청으로 보낸다.
  8. 보내고 나서 성공하면 로그인 정보를 가져오고 프론트 메인화면으로 리다이렉트 시킨다.(7, 8에서 생긴 사이드이펙트는 사가로 처리한다.)

이런 프로세스를 거치면 될 것 같았다.

하지만,,, 다른 의견이 나왔다.

  1. API 서버로 요청을 하면 redirect를 바로 시켜서 GitHub OAuth 페이지로 이동된다.
  2. callback url을 API 서버로 설정해서, API 서버에서 결과를 받을 수 있도록 한다.
  3. 결과를 받아서 바로 페이지에서 인증을 처리한다.

------ 민상생각

  1. 프론트에서 API 서버에 있는 Github 주소를 받아와서 상수로 저장해둔다.
  2. Github 로그인 클릭시 받아온 서버 주소로 직접 접근한다.
  3. Github OAuth 페이지로 리다이렉트 시킨다.
  4. 인증을 한다.
  5. callback url을 서버로 설정한다.
  6. 서버로 이동한다.
  7. 인증을 처리하고 프론트로 리다이렉트 시킨다.

보기에는 단 한번의 요청으로 모든 것을 해결할 수 있는 것 처럼 보였다.

하지만 API에 들어가서 하는게 맞는가라는 의문이 들었다.

인스타그램도, velog도 OAuth를 할 때는 인증만을 위한 빈 페이지를 거치는데, 브라우저에서 API로 직접 접근해서 진행하는게 맞을까?

결론

결국 API로 접근해서 GitHub OAuth 페이지까지 이동하는 것, 그리고 나서 결과는 인증만을 위한 빈 페이지를 거치게 되었다. 뭐가 맞는 방법인지 검색해봐도 아직 찾지 못했다. 뭐가 맞는 방법일까?

회고

  • 박기덕 : REST API를 사용하기 때문에 RESTful하게 만들기 위해서는 GET과 query의 조합으로 불러오는게 맞다고 생각한다.
  • 서그림 : 이 부분에 대해 민상님과 기덕님께서 하는 토론을 꽤 오랫동안 들을 수 있었다. 그만큼 정답이 없는 문제이지 않을까 생각을 했다. 그래서 팀에서는 현 상황에서 더 구현이 빠르게 되는 쪽을 택하면 되지 않을까라고 이야기가 나왔고, 백엔드 코드가 이미 완성되어 있었기 때문에 프론트 코드를 수정하여 프론트에서 다시 요청하는 방식을 사용하기로 하였다. 정답이 없다면 팀에게 알맞게 !!! 가 진리라고 생각한다.
  • 손원우 : 이 부분이 아마 가장 첨예하게 의견이 대립된 부분이지 않을까 싶다. 다른 사이트들도 참고했었는데 방법이 제각각이라서 더 그랬던 것 같다. 그림님의 의견에 동감한다! 정답보다는 팀 모두가 합의한 방향으로 가는 것이 맞다고 생각한다. It is what it is!
  • 윤민상 : 기덕님 방법으로 하게되면 프론트에서 서버로 보내는 추가 비용이 생기게 된다. 브라우저에서 API로 직접 접근하면 안되는 걸까?? 합리적인 이유를 나는 찾지 못했다. 그것보다 프론트에서 추가로 처리할 비용이 더 크다고 생각했다. 그런데 인스타그램이나 velog같은 예시를 드시고 좀 찾아보니 내가 잘 몰라서 이게 맞다고 생각하는 것 같기도 하다. 프로젝트가 끝나고 좀 상세히 알아봐야겠다.
Clone this wiki locally