[DRF] Kakao + JWT 인증

Android 앱에 Kakao + JWT 인증을 적용하는 법에 대해 공부한다.

Posted by Seoyoung Lee on August 28, 2020 · 2 mins read

전체 흐름

카카오, 페이스북 등의 SMS 연동 인증 방식을 JWT로 진행하기 위해서는, 카카오/페이스북으로부터 Access Token을 획득하여 이를 장고 서버를 통해 JWT 토큰을 획득하면 된다.

1. (앱 - 카카오톡 서버)
- 안드로이드 앱에서 "카카오톡 로그인" 버튼을 클릭하면, 카카오톡 서버와 인증을 수행
- 카카오톡 서버와의 인증에 성공하면, 카카오톡으로부터 Access Token 을 획득

2. (앱 - 장고 서버)
- 획득된 Access Token을 장고 서버 인증 Endpoint(/accounts/rest-auth/kakao/)를 통해, JWT 토큰 획득
- 획득한 JWT 토큰이 만료되기 전에, 갱신(refresh)
- 획득한 JWT 토큰이 만료되었다면, Access Token을 서버로 전송하여 JWT 토큰 재획득


Kakao 관리자 페이지에서 App Key 얻기

카카오 연동 인증을 구현하기 위해서는 카카오 개발자 페이지에 접속한다. 거기서 새로운 애플리케이션을 생성한 후, "사용자 관리" 옵션을 켜고 "기본 정보"에서 App Key 를 메모한다.

DRF에서 필요한 App Key 로는 네이티브 앱 키REST API 키가 있다. 네이티브 앱 키는 안드로이드/아이폰 앱에서 kakao_app_key 값으로 활용되는 키이고, REST API 키는 Django Server 측에서 활용되는 키이다.


Django 서버 설정

kakao 관리자 페이지에서 App Key를 얻었으면, django-rest-auth / django-allauth를 통해 카카오/페이스북 인증을 적용해본다.

방법은 아래와 같다.

1. django-rest-auth의 설치가이드대로 진행
2. /admin/ 에서 새 "Social Application" 생성 - kakao
- Provider: kakao
- Name: 자유
- Clinet id: "네이티브 앱 키" 지정
- Secret key: 아무거나
- Sites: example.com 선택

앱에서 로그인을 수행 후에 Access Token을 획득할 수 있다. 또는, 카카오 개발자 페이지에서 REST API 도구 페이지를 통해 획득할 수도 있다. Access Token을 획득한 후, 이를 통해 JWT토큰을 얻는다.

$ http POST http://localhost:8000/accounts/rest-auth/kakao/ access_token="Kakao로그인을통해획득한JWT토큰"

{
    "token": "JWT 토큰 값",
    "user": { 
        "email": "",
        "first_name": "",
        "last_name": "",
        "pk": 2,
        "username": "user"
    } 
}

이제 장고 서버에서 할 일은 끝이 났고 앱 단에서 추가적인 설정과 코드를 작성해야한다. 그 부분에 대해서는 여기서는 다루지 않는다.