[OAuth] 소셜 로그인들끼리의 연동은 가능할까?

알쓸코딩·5일 전
0

트러블 슈팅

목록 보기
14/15

오늘도 어김없이 개발하다가 소셜 로그인 구현 중에 몇 가지 고민이 생겼다.
현재 우리 서비스는 사용자마다 응원 점수와 포인트 시스템을 가지고 있는데, 한 사람이 여러 소셜 계정(구글, 네이버, 카카오)으로 가입하면 각 계정당 다른 점수와 포인트가 쌓이는 문제가 있을 것 같았다. 그래서 한 사용자당 하나의 소셜 계정만 연결할 수 있도록 하면 어떨까 하는 생각이 들었다.
이 문제를 해결하기 위한 두 가지 아이디어가 떠올랐다:

사용자가 네이버로 로그인을 했을 경우 네이버에서 이메일을 받아와서 그 이메일을 우리 서버에 저장한 후에 카카오 로그인을 하게 되면 카카오에서 받은 이메일이랑 비교를 하는 방식이다. -> 근데 네이버나 카카오가 사용자 식별 번호와 인증서를 제외한 부가정보인 이메일을 주느냐? 최근에는 주지 않는다고 한다. -> 왜냐면 이 서비스로 다른 웹사이트로 사용자 유탈이 되는 현상이 많이 발생한다고 하기 떄문이다.

그래서, 고안한 방법은 OAuth인증을 한 후에 사용자를 식별할 수 있는 우리 서버만의 고유한 키를 만드는 것이다. 전화번호가 이에 속할 수 있다. 하지만, 우리는 웹사이트니까 이메일을 사용하면 어느정도 식별할 수 있을 거라는 생각이 들었다. 이때 이메일은 소셜에서 받은 이메일이 아닌 사용자로 부터 입력받은 이메일이다.
로직으로는 사용자가 Oauth를 하고 난 후에 회원가입말고, 이메일을 입력을 받으면 디비에 이 이메일이 저장되어 있는지 확인하고 있으면 그 유저의 정보를 불러올 수 있게끔 하는것이다.
이미 등록된 Oauth일 경우 그러면 이메일 인증 없이도 로그인이 될 것이다.
pass는 시중에 출시되어 계약을 맺은 서비스만 이용이 가능해서 못할 것 같다.

그리고 Oauth 절차는 먼저 사용자가 프로바이더(소셜 구글, 네이버 등)애개 id,password를 통해서 신분증을 받아오면 사용자가 서버에게 구글에서 받아온 신분증을 가지고 확인해주세요! 라고 하면 서버가 구글한테 가서 얘 인증해줬어? 물어보고 ok하면 사용자가 접근할 수 있는 권한을 준다.
여기서 id,password는 기존에 구글에 로그인 할 때 쓰는 id,password 이고 신분증에는 사용자의 고유한 식별 번호와 구글이라는 서명정보가 담겨져있다.

profile
알면 쓸데있는 코딩 모음!

0개의 댓글