OAuth 로그인을 하는데 새로운 계정이 생성되면 안된다.
서론
애플리케이션 프로젝트 기획 회의에서 회원의 로그인 방식에 대해 이야기했다.
우리 애플리케이션은 회원간의 팀 활동을 통해 함께 성장할 수 있는 커뮤니티 애플리케이션이다.
로그인 방식을 개발하며 기획 개선사항이 있어 이를 기획 팀에 건의했다.
우선, 현재 기획에서의 로그인 방식은 이렇다.
OAuth2 인증을 통해 카카오,네이버, 구글, 애플 로그인 등을 제공하기로 하였다.
여기서 백엔드 개발자가 설계할 수 있는 방향은 크게 2가지다.
- 새로운 OAuth 로그인 시, 새로운 계정으로 회원가입되도록 설계
- 새로운 OAuth 로그인 시, 이전에 가입한 계정으로 로그인되도록 설계
2번 방식이 애플리케이션 기획과 UX를 해치지 않을 것이라고 생각하여, 2번 방식(이전에 가입한 계정으로 로그인)으로 제의 드렸다.
기획팀 반응이 긍정적여서 이렇게 설계하였다.
본론
그럼 어떻게 설계할 것인가?
이런 방식으로 설계했다.
설계 의도
- OAuth2 로그인 시 USER 테이블에 회원을 생성한다.
- OAuth2 로그인 방식에 맞는 SNS를 enum으로 존재하는 SNS 플랫폼을 찾는다.
- USER_OAUTH 테이블에 SNS 플랫폼과 가입한 유저 테이블 매핑합니다.
username에는 각 OAUTH PLATFORM에 있는 유저 식별자를 저장합니다.
어떻게 로그아웃한 후에도 회원 정보를 가지고 있죠?
저는 이렇게 개발했습니다.
토큰 인증 방식을 채택하고, 엑세스 토큰에는 fake_id를 입력합니다.
유저 테이블에 임시로 저장해둡니다. 이 방식은 세션 인증 방식과 유사해요.
그 후 JWT에 삽입 전, 암호화합니다.
이 값을 사용할 때에는 복호화하여 사용합니다.
최근에 공부한 JWT의 보안을 생각하면서 설계했습니다.
위 처럼 USER 엔티티에 user_token와 fake_id를 임시로 작성해두면, 토큰이 탈취되더라도 문제가 발생하지 않습니다!
로그인에 사용할 수 있는 아이디어
추가적인 아이디어로 다른 블로그에 봤던 내용을 공유했어요.
https://brunch.co.kr/@jwj8906/32
요약하면, 사용자에게 가장 최근에 로그인한 방식을 클라이언트 단에서 알려주는 방식인데
클라이언트 쿠키 혹은 리프레시 토큰으로 처리하면 되지 않을까 싶어요.
이부분도 개발하게 되면 추가적인 개발 후기를 작성하겠습니다.
결론
- 이메일 로그인 제거 → 추가 회원가입을 막기 위함
- 최근에 사용한 로그인 방식 제공 → 추가적인 계정 추가를 막기 위함 + UX ↑
- OAuth 회원가입 시 이전에 가입 한 계정이 있다면 해당 게정으로 로그인되도록 구현
'트러블 슈팅' 카테고리의 다른 글
팀원이 설정한 알람이 내 폰에서 울려야한다. (0) | 2023.03.28 |
---|---|
어떨 때 composite key를 사용해야 할까? (0) | 2023.03.19 |
[Node.js] 싱글 스레드 언어가 어떻게 비동기 처리가 가능한가?, Node.js 동작 원리 (0) | 2023.01.26 |
[NestJS] AdminJS를 이용한 크롤러 관리 패널 제작기 (0) | 2023.01.14 |
[puppeteer] 크롤러 성능향상, 이미지 수신 차단 (0) | 2023.01.02 |
글 내용 중 잘못되거나 이해되지 않는 부분은 댓글을 달아주세요! 감사합니다! 문의: puleugo@gmail.com