React로 카카오 로그인 연동하기
이번 프로젝트에서 카카오 로그인 기능을 구현하였다. 배우는 곳은 무조건 공식문서가 짱이지 !
하고 공식문서에 들어가봤다.
인증과 인가
오… OAuth 2.0 기반으로 인증과 인가를 간편, 안전하게 처리할 수 있다는 장점이 있군?!
토큰
토큰이라는 사용자의 카카오 로그인 인증 및 인가 정보를 담은 권한 증명을 제공한다. Access Token, Refresh Token 두 종류를 발급해준다.
로그인 과정 이해하기
1단계. 카카오 로그인
클라이언트에서 백엔드서버로 로그인 요청을 보낸다.
백엔드 서버에서 인가 코드를 카카오에게 요청한다.
카카오는 인증과 동의 요청을 클라이언트에게 보낸다.
클라이언트가 동의 항목 체크하고 로그인한다.
앱에 등록된 Redirect URI로부터 인가 코드를 받고 이를 가지고 토큰을 요청한다.
카카오가 토큰을 발급해준다.
카카오 로그인이 완료된다 !
2단계. 회원 확인 및 가입
클라이언트가 발급받은 토큰으로 카카오 API 서버로 요청을 보내 사용자 정보를 가져온다.
카카오 API 서버는 요청의 토큰을 검증하여 처리한다.
백엔드 서버는 제공받은 사용자 정보로 서비스 회원인지 확인하고 신규 사용자인 경우 회원가입 시킨다.
3단계. 서비스 로그인
- 백엔드에서 세션을 발급해주고 클라이언트에서 로그인 완료 처리해준다.
필수 설정 항목
1. 플랫폼 등록
나의 서비스를 연결해줄 플랫폼을 등록한다.
플랫폼 등록에 가보면 Android, ios, Web을 선택할 수 있고 생성하면 API Key를 발급해준다.
- 사이트 도메인을 설정해줘야한다.
- http://, https://, file:// 형식의 도메인을 등록할 수 있으며, http와 https 도메인은 둘 중 한 가지만 등록해도 사용할 수 있습니다.
- 최대 10개의 도메인을 등록할 수 있습니다.
2. 카카오 로그인 활성화
카카오 로그인에 가서 활성화 버튼을 ON으로 바꿔줘야한다.
3. Redirect URI 등록
인가 코드를 요청받은 URI를 등록해준다.
1 | http://localhost:3000/oauth/callback/kakao |
해당 Redirect URI로 요청을 보낼 때 필수 파라미터들이 있다.
- cliend_id : 내 애플리케이션의 REST API 앱 키
- redirect_uri : Redirect URI
- response_type :
code
고정값
4. 동의 항목
어떤 동의항목을 받을 것인지 설정해준다. 필수만 체크해주자 편의상
5. 구현 방법 선택
- REST API
- JavaScript
- Android
- IOS
- Flutter
로 구현할 수 있는데, REST API로 하자.
실습
1. 카카오 로그인 요청을 보낼 버튼을 하나 만들자
1 | // api_key.js |
1 | import { REST_API_KEY, REDIRECT_URI } from "./api_key.js"; |
1 | GET /oauth/authorize?client_id=${REST_API_KEY}&redirect_uri=${REDIRECT_URI}&response_type=code HTTP/1.1 |
- 카카오 로그인 인가 코드받기 부분에 가면 Host와 GET 요청 URI가 나와있다.
- 이렇게 하여 로그인 버튼을 누르면 URL이 이동하여 카카오 로그인과 회원인증을 처리한다.
2. 카카오 로그인 동안 수행 내용을 컴포넌트에 작성하자
1 | function KakaoLogin() { |
1 | POST /oauth/token HTTP/1.1 |
1 | <!-- Request --> |
- 토큰을 얻기 위해서는 POST 요청을 위 URL로 요청을 보내라고 알려주고 있다.
- Request에서 나온대로 fetch 함수에 적어주면 된다.
-d로 나와있는 부분이 body부분에 넣어주면된다. “”로 구분된 것들은
&
기호로 구분해준다.
- 인가 코드를 사용하기 위해서 Redirect URI에서
localhost:3000/auth/callback/kakao?code=
뒷부분을 사용하기 위해 split 코드를 사용하였다.
URLSearchParams를 사용하여도 가능하다.
결과
이렇게 코드를 짜면 localStorage에 토큰까지 저장되며 로그인이 성공한 것을 알 수 있다.
이제는 토큰을 가지고 로그인 했다고 처리를 해주면 된다.
소감
이번에 OAuth2.0 기반의 카카오 로그인을 연동해보았는데 처음 해봐서 신기하기도 하고 토큰을 받고 이후에 어떻게 로그인 유지와 로그아웃 처리를 해줘야하는지도 고민할 수 있는 시간이 있어서 배운 점이 많았다.
앞으로 OAuth 연동에 대해 두려움이 줄어든 것 같다.