nerdsa
202
2022-04-20 17:58:33
1
444

구글/애플 소셜로그인 및 JWT 인증 방식 문의


안녕하세요, 


최근 시스템에서 구글/애플 소셜로그인 방식을 구현하는데, 제가 설계한 프로세스에 대한 확신이 들지 않아서 문의드립니다.

Django 백엔드에 Graphql 을 추가하여 사용하고 있습니다. Graphql 에는 JWT(access_token, refresh_token)을 유저별로 생성하는 라이브러리가 있습니다.


프로세스 요약


(회원 가입)
1. 모바일앱(리액트 네이티브) SDK를 통해 구글 소셜 로그인 진행 후 구글에서 발행한 access_token과 이메일주소(구글주소) 을 장고 백엔드에 graphql API로 요청

2. Django 에서는 전송받은 `access_token` 으로 구글 UserInfo 서버에 유저데이터 요청.

3. 구글 userinfo 서버의 요청에 대한 응답이 성공하면 모바일로부터 전달받은 access_token이 유효한것으로 verify 한 것으로 확인

4. 상기 과정에서 오류가 없으면 Email 을 user_name 으로 하는 Django 유저 생성

5. 생성된 이용자에게 JWT 리프레시 토큰과 액세스토큰을 신규 생성하여 회원가입성공 status와 함께 토큰을 반환

(* 여기서 반환되는 refresh_token, access_token 은 구글에서 발행한것이 아닌, 백엔드에서 유저 생성 후에 해당 유저에게 부여한 토큰들입니다.)

5. 프론트엔드에서는 앞서 전송받은 access_token 으로 graphql 과 통신


* 여기서, 의문점이 google에서 발행한 access_token을 `grpahql` API 통신의 Authorization 에서 사용하지 않고 백엔드에서 생성한 access_token 으로 graphql API 통신을 진행합니다.


이 경우가 안티 패턴인거나 위험성이 있는지 의견 부탁드립니다.

보통 소셜로그인 구현 후에 access_token 을 Provider(google,apple,facebook 등의 플랫폼) 가 제공하는 access_token 과 refresh_token 을 그대로 사용하시는 지 궁금하니다.

0
  • 답변 1

  • 김치전
    179
    2022-04-20 19:01:02

    질문 형식이 깔끔하게 이해하기 편했습니다 :)

    타사 auth access token 의 경우 프로필 조회 등 다양한 API 를 사용하는 곳에 사용됩니다. 제 짧은 생각으로는 개인서버에서 발급하는 토큰을 발급하는 형태는 유지하시고 발급 받은 토큰정보를 별도로 저장하여 타사 API 호출에 사용하시는 구조로 가면 좋을 듯 싶습니다. 인증 외 시스템에서 사용하는 케이스가 없는 경우는 별도 토큰 저장 없이 지금 방식이 좋아보입니다. 


  • 로그인을 하시면 답변을 등록할 수 있습니다.