티스토리 뷰
맙소사! 인증코드와 액세스 토큰에 대한 의문이 조금 남아 있었는데, 오늘 좀 더 윤곽이 드러나는 것 같아 꼭 정리해두고 싶다!
오늘 글의 주제!
내가 카카오 로그인 API 어떤 거를 사용했고, 인증 코드와 액세스 토큰의 차이와 역할, 전반적인 카카오 로그인 로직을 정리해보자.
정리 이유
인증 코드와 액세스 토큰은 비슷한 것 같은데 왜 두 번이나 인증을 하는 건지 의문이 생겨서.
카카오 로그인 로직에 대해 더 고화질로? 정리해두고 싶어서.
인증코드와 액세스토큰
| 인증 코드 | 액세스 토큰 | |
| 비유 | 로그인 성공 후 서버에 임시로 주는 비밀번호 같은 것 | 이 비밀번호를 사용해서 카카오에게 권한 증명 키를 요청함 |
| 정의 | 임시 키 짧은 시간 동안만 유효하고 한 번만 사용 가능함 |
서버가 이후에 카카오 API를 호출할 때 계속 사용되는 권한 증명 키 일정 시간 후 만료되어 재발급이 필요함 |
| 목적과 차이 | 사용자가 로그인에 성공했다는 것을 증명하는 데 사용 목적: 로그인 성공을 한 번만 확인 |
이 키를 가지고 있으면 사용자 정보 조회나 카카오 기능을 사용할 수 있음 목적: 카카오 API를 호출할 때마다 "이 사용자는 인증됐어"를 증명 |
| 장점 | 인증코드와 액세스 토큰을 나누면 클라이언트 정보 유출을 예방할 수 있다. | |
| 액세스 토큰으로 다양한 카카오 API를 호출할 수 있다. | ||
리다이렉트:
다른 곳으로 보내는 것.
어디에 있는 사람 / 요청을 다른 곳으로 이동시키는 것.
사용자가 웹사이트나 페이지를 요청하면 서버가 그 요청을 다른 웹사이트나 페이지로 보내는 방식.
카카오 로그인 흐름 요약
| 1. 카카오 로그인 URL로 리다이렉트 | 2. 인증 코드로 액세스 토큰 요청 | 3. 액세스 토큰으로 사용자 정보 요청 | |
| 사용된 카카오 API | 카카오 로그인 API: https://kauth.kakao.com/oauth/authorize |
카카오 액세스 토큰 발급 API: https://kauth.kakao.com/oauth/token |
카카오 사용자 정보 API: https://kapi.kakao.com/v2/user/me |
| API 요청 방식 | GET | POST | GET |
| 동작 순서 | - 클라이언트를 카카오 로그인 API 페이지로 리다이렉트한다 - 이때 REST API KEY와 REDIRECT URI를 API를 로그인 API에 덧붙여서 사용자에게 전달한다 - 사용자가 로그인 페이지에서 로그인을 하면, 카카오 서버가 인증 코드를 생성해서 서버로 리다이렉트(≒전달) 한다 |
- 서버가 카카오 액세스 토큰 API를 통해 카카오에게 인증 코드와 client_id, client_secret를 보내준다 (쿼리 파라미터로 추가해서 보내준다) - 카카오가 액세스 토큰을 서버에 반환해준다 |
- 카카오 사용자 정보 API를 호출하여 headers > Authorization에 발급받은 액세스 토큰을 기입하여 보내준다 - 카카오가 사용자 정보를 JSON 형식으로 반환해준다 이 정보를 userInfoResponse.data로 받게 된다 * userInfoResponse.data 안에는 user의 id와 연결된 시간을 담고 있다 - 거기서 필요한 사용자 정보를 추출하여 변수에 저장한다 사용자 아이디: userInfoResponse.data.id 사용자 닉네임: userInfoResponse.data.kakao_account.profile.nickname |
| 목적 | 사용자가 카카오 로그인 페이지에 접속하여 로그인을 한 후 인증 코드를 발급 받기 위함. 인증코드를 발급 받으려면 필요한 정보들을 url에 추가하여 보내어 사용자를 리다이렉트하기 위함. oauth/authorize로 사용자를 보낼 때, client_id(= rest_api_key)랑 redirect_uri 값을 템플릿 리터럴로 생성해주는 역할 |
서버가 카카오에게 인증코드를 가지고 가서 액세스 토큰을 발급 받기 위함. 인증코드로 한 번만 인증하고, 그 다음부터는 액세스 토큰으로 카카오 API를 통과할 예정. |
발급받은 액세스 토큰으로 사용자 정보를 요청하기 위함. |
| 점검 사항 | 닉네임이 undefined인지 확인하면 좋을 사항 | ||
서버 |
사용자가 카카오 API 페이지로 리다이렉트(이동)되도록 안내하는 역할 이미 존재하는 카카오 로그인 API URL을 사용하지만, 우리에게 맞는 정보를 추가하여 보내줌 |
||
| - 브라우저를 카카오 로그인 API로 이동 - 인증 코드를 획득하게 도와줌 |
- 받은 인증 코드로 액세스 토큰 발급을 요청함 - 액세스 토큰을 반환받음 |
- 받은 액세스 토큰을 사용자 API로 보내줘서 사용자 정보를 반환 받음 | |
'리액트로 웹 개발 A to Z' 카테고리의 다른 글
| 리액트 컴포넌트에서 페이지를 이동하는 다양한 방법 (with. mypage → login 페이지로 이동하기, 예외처리) (0) | 2025.01.15 |
|---|---|
| 정적 서버와 동적 서버 (with. 비동기 작업) (0) | 2025.01.14 |
| 카카오 로그인 API 구현하기 : 서버와 클라가 요청하고 응답 받는 원리 (with. fetch와 then은 한 팀) (0) | 2025.01.07 |
| 카카오 로그인 API 구현하기 : KOE006 에러 (with. 리다이렉트 uri 에러와 env 파일) (0) | 2024.12.31 |
| 카카오 로그인 기능 : 참고 사이트 (0) | 2024.12.26 |