써드파티 앱에서 카카오 사용자 관리를 사용할 때의 프로세스가 궁금합니다

안녕하세요.
저는 현재 카카오 사용자 관리를 통해 사이트의 로그인 처리를 하고 싶습니다.
REST API 개발가이드를 보고 로그인, 로그아웃, 앱 연결, 사용자 정보 요청 등은 따라 해본 상태입니다.

그런데 우리 쪽 앱과 연동절차가 어떻게 되는지 아직 확신이 들지 않습니다.

저는 현재 브런치 같은 방식의 로그인을 원하는 상태입니다.
그리고 제가 이해한 바를 먼저 설명 드려보겠습니다.

한 사용자가 서비스에 최초 유입되어 <카카오로 서비스 이용하기> 버튼을 눌렀을때
로그인을 하고, code를 받아서 access code를 받고, 카카오 API를 통해 프로필 정보 등을 획득하고, 사용자가 입력한 이메일을 입력받아 회원가입을 진행합니다.
여기까지 진행했을때 서비스 DB에는 해당 사용자가 입력한 이메일과 관련 정보를 넣어줍니다.

우선 여기까지의 프로세스가 맞는지가 궁금합니다.

그리고 그 이후로 해당 사용자가 로그인을 하려 할때
저는 우리쪽엔 저장된 비밀번호가 없이 어떻게 카카오 로그인만으로 해당 사용자가 어떻게 우리 유저인지 판별해야 하는지
access code는 카카오 API를 호출하는데 이용하는 코드인데 그것만으로 어떻게 api호출을 컨트롤 하는지 (스프링 시큐리티와 같은)
등의 절차적인 의문이 들고 있습니다.

전반적인 흐름을 설명해주시면 정말 감사하겠고
제가 모르고 있는 부분이 너무 많다보니 중요 키워드 정도만이라도 알려주신다면 감사하겠습니다.

@rea1me.gyu 일단 카카오계정으로 소셜 로그인을 한 경우 사용자 정보 요청을 통해 email까지 받을 수 있습니다.
보통 회원 연동을 할때 기존 회원이 존재하는지, 아니면 새롭게 오픈되면서 소셜 로그인을 같이 붙여 오픈하는지에 따라 다를 수 있을것 같아요.
왠지 후자일것 같은데요, 후자의 경우는 보다 간단합니다.

OAuth2의 경우 크게 두단계로 나뉘어져 있습니다. authorization code를 받는 1단계, authorization code를 통해 access token 및 refresh token을 받는 2단계. 1단계의 경우, 카카오서비스에서 이루어집니다. 톡이나 카카오계정의 id/password view를 통해 authentication이 되면 code가 발급되고, 카카오서비스는 해당 code를 3rd party에게 redirect를 해 줍니다. 3rd party는 해당 임시 code를 통해 access token, refresh token을 받습니다.

이후 로그인이 되었나?의 유무는 3rd 서비스 구현에 따라 달라집니다. 가장 쉬운것은 access token/refresh token과 lifecycle을 함께 가지고 가는 것이고, 대용량 서비스의 경우 자체 고유 session/cookie를 생성하여 관리하기도 합니다. access token의 경우 유효성을 판별할 수 있습니다. 이 유저가 올바른 유저인지 토큰이 만료되었는지 변조되었는지 등을 access token info API 또는 user me API를 통해 확인 가능합니다.

access token의 경우 짧은 만료시간을 가지고 있으며, access token의 만료가 짧기 때문에 refresh token이 존재합니다. access token 만료시 refresh token으로 다시 로그인 없이 access token을 갱신 할 수 있습니다. refresh token(long time token)의 경우도 만료가 있는데, 이때는 refresh token이 만료되기 전에 refresh token으로 access token을 갱신할때 response로 새로운 refresh token이 반환되어 집니다.

SDK나 앱, 웹서비스에서는 이렇게 token을 관리해 주어야 합니다. 일반적으로 SDK를 사용하신다면, 유저가 로그인할때, 또는 어떤 중요한 session 활동을 할때 어떠한 API를 한번 호출해주면(예를들어 access token info 또는 user me) SDK내(iOS, Android)에서 자동갱신등을 내부적으로 수행하여 항상 최신의 토큰을 유지 시켜 줍니다.

보안상 JS SDK는 refresh를 SDK에서 제공하지 않으며, REST API로그인과 비슷하게 3rd 서버사이드에서 이 재갱신을 관리해 주셔야 합니다. (쉽지 않죠 ㅠㅜ)

요약하자면 로그인 유무의 경우 발급받은 access token으로 user/me를 수행할때 고유한 user id를 반환해 주는데 그 호출이 성공하면 로그인이라고 보시면되고, user id를 통해 해당 user를 식별하시면 됩니다. 물론 user/me를 호출하기 위해서는 자동가입 옵션을 사용하지 않았을 시 signup(앱 연결) API를 호출해 주셔야 가입이 됩니다. 만약 API를 호출하였는데 만료 되었다면? 저장하고 있는 refresh token을 통해 access token을 갱신해 줍니다. (위에 설명처럼 refresh token도 만료될 수 있기 때문에 만약 refresh token이 응답으로 온다면 저장하고 있는 refresh token도 update필요). 또는 재갱신을 안할 수도 있습니다. 매번 token만료시 다시 로그인을 시키는 방법도 있습니다. 이럴 경우 refresh token, access token 관리도 필요 없기는 하겠지요.

회원 탈퇴의 경우 unlink API를 호출해 주시면 됩니다.

또한 탈퇴 콜백기능을 개발자 웹사이트에서 제공하는데, 이는 사용자가 카카오톡, 카카오스토리, 또는 계정페이지에서 강제로 계정을 탈퇴할때가 있는데, 이때 3rd에게 계정이 탈퇴된다는것을 알려주면서, 해당 3rd가 탈퇴된다는 신호를 주게 됩니다. 3rd 서비스에서 회원 탈퇴시 후처리가 있다면 이 callback을 통해 후처리를 해 주시면 됩니다.

좀 도움이 되셨으면 좋겠네요 ㅠㅜ

3개의 좋아요

정말 큰 도움이 되었습니다.
도구들을 손에 쥐었는데 어떻게 휘둘러야할지 감이 안오는 상태였거든요 ㅠㅠ
해당 내용 참고해서 열심히 만들어보겠습니다. 감사합니다.

1개의 좋아요

@rea1me.gyu 넵. 사실 사용자 관리 인증이 절반 이상일꺼에요 ^^; 이부분이 한번 잘못되면 두고두고 고생을 하실 수 있어서요. 하시면서 언제든 이상하거나 모르는것이 있으면 또 질문주세요!