wafflestudio / waffle-account-server

WaffleStudio Account Server for SSO
8 stars 0 forks source link

`POST v1/oauth/{provider}` 소셜 로그인 구현 #12

Closed subeenpark-io closed 2 years ago

subeenpark-io commented 2 years ago

1. 기본적인 흐름

2. 실제 구현

소셜 로그인 구현의 경우 spring-security의 도움을 일부 받았으나, spring-security에서 기본으로 제공하는 oauthLogin 구성의 경우 웹을 리다이렉트 시켜 authorization code를 받는 방식으로 모바일 친화적이지 않은 면이 있습니다. 따라서 이번 구현에서는 리소스 오너가 access_token을 보내준다는 가정 하게 API를 구현했습니다. 아래는 PR을 읽는 데 있어 참고하면 좋은 사항입니다.

-ReactiveClientRegistrationRepository

3. 기타

3.1 아직 처리되지 않은 부분

subeenpark-io commented 2 years ago

요청 시 해당하는 이메일의 유저가 이미 존재하면 로그인 처리, 존재하지 않을 경우 유저 생성 후 로그인 처리라는 flow에 문제점이 있을 것 같습니다. 가입되지 않은 유저가 로그인을 누르면 클라이언트는 로그인 API로 요청을 보낼 텐데, 원하지 않는 가입이 생길 수도 있을 것 같습니다. 반대로 전에 회원가입을 했다는 사실을 까먹고 회원가입을 눌렀을 때도 가입이 실제로 되는 것이 아닌 로그인 flow만 이루어질 수 있다는 점이 불안합니다. 차라리 로컬 로그인처럼 로그인과 회원가입 API를 분리하면 좋을 것 같습니다. 또, 이외에도 ktlint 에러 등등 수정 부탁드립니다.

@chosanglyul 이 부분은 이해가 되지 않는데요, 소셜 로그인의 장점 자체가 신원을 보장해주는 third party IdP가 있으므로 (1) 유저의 정보를 클라이언트 서버가 들고있지 않아도 되어 보안 상의 문제가 깔끔하게 해결된다 (2) 회원가입 스테이지를 생략하고 바로 유저를 생성해 손쉽게 서비스를 이용할 수 있다 인 것으로 알고 있는데요, 참고 상렬님이 말씀하신대로 하면 이러한 이점들이 퇴색되지 않나 싶습니다. 실제로 애플 앱스토어 심사를 할 때는 애플 로그인 버튼에 '회원가입'이라는 표현을 쓰면 심사가 기각당하고 'Sign In with Apple'이라는 문구를 꼭 넣어야 하는데, 이러한 것들을 고려해봤을 때 회원가입 프로세스를 서버에서 자체적으로 처리하는게 소셜 로그인의 best practice라고 생각합니다.

이와 별개로 ktlint 에러와 디테일안 에러 핸들링은 오늘 주말 중으로 커밋하도록 하겠습니다.

Hank-Choi commented 2 years ago

Mono/Flux의 혼용은 이 레포를 참고했습니다.

레포가 아닌데요??

davin111 commented 2 years ago

@subeenpark-io lint 성공시킨 채로 PR 준비해주시면 좋을 거 같아요!