개요
kakao Oauth 로그인 기능을 구현하는 과정이다.
동작 방식 (자료)
기존 자료는 서비스 서버가 F.E, B.E 구분 없이 하나의 개체로 표현되어, REST API를 통해 구분지어 개발할 경우 혼동이 생길 수 있어 다시 정리함.
Step1 : 카카오 로그인
- Kakao Authorization Code 발급
-
사용자가 서비스에서 카카오 로그인 버튼을 클릭한다.
⇒ 버튼은 http://kauth.kakao.com/oauth/authorize 주소로 연결한다. 이때 client_id, Redirection URI가 함께 입력된다.
-
카카오 인증 서버는 사용자 인증, 동의항목 동의, 로그인 요청 과정을 거쳐, **인가 코드(Authorization Code)**를 발급해 서비스 앱에 등록된 **Redirect URI(F.E)**로 전달한다.
- Kakao Access Token 발급
- 인가 코드를 발급받은 **Redirect URI(F.E)**에서는 해당 인가 코드를 HTTP요청을 통해 **서비스 인증 서버(B.E)**에 전달한다.
- **서비스 인증 서버(B.E)**는 인가 코드와 함께, https://kauth.kakao.com/oauth/token 주소로 POST 요청을 보낸다. 이때 사용되는 Redirect URI은 인가코드를 발급받을 때 사용한 URI와 동일한 F.E측 URI를 사용해야한다. 그렇지 않으면
KOE010 에러가 발생할 수 있다.
- 카카오 인증 서버는 모든 정보가 올바르게 입력되었을 경우 REST API Access Token을 반환해준다. ****
Step2 : 회원 확인 및 가입
- Access Token으로 사용자 정보 가져오기
- **서비스 인증 서버(B.E)**는 Access Token를 사용하여, https://kapi.kakao.com/v2/user/me 주소로 POST 요청을 보낸다. 여기서부터 사용되는 주소는 kapi.kakao.com으로 변경되니 주의하자.
- 카카오 REST API 서버에서 받아온 회원 정보를 통해, **서비스 인증 서버(B.E)**내에서 회원 여부를 판단하여, 회원가입 처리를 진행한다. 이후 곧바로 서비스 로그인 처리를 진행하게 된다.
Step3 : 서비스 로그인
- 서비스 내 로그인 처리 진행
- 회원 확인 및 가입 절차가 종료되면, 즉시 로그인 처리를 진행한다. 세션 또는 JWT를 사용하여 사용자의 로그인 상태를 증명할 수 있도록 적절한 REST API 요청의 응답을 보낸다.
- 사용자가 서비스에 로그인 되었다.
구현 과정
테스트 링크
https://kauth.kakao.com/oauth/authorize?client_id=4272a0b3892816ffa5ef615c430ca7a9&redirect_uri=http://localhost:3000/login/kakao&response_type=code
controller 구성
@GetMapping("/oauth/kakao")
public OauthKakaoResponse kakaoCalllback(@RequestParam(value = "code") String code) {
String accessToken = kakaoOauthService.getKakaoAccessToken(code);
KakaoRegisterDto kakaoRegisterDto = kakaoOauthService.getKakaoProfile(accessToken);
User user = authService.kakaoRegisterUser(kakaoRegisterDto);
return authService.oauthLogin(user);
}
Kakao Authorization Code 발급
-
사용자가 서비스에서 카카오 로그인 버튼을 클릭(URI로 링크)한다.
REST_API_KEY 발급 및 REDIRECT_URI 등록은 해당 블로그를 참고하자. (앱 등록)
<aside>
➡️ https://kauth.kakao.com/oauth/authorize?client_id=${REST_API_KEY}&redirect_uri=${REDIRECT_URI}&response_type=code
</aside>
- REDIRECT_URI : F.E에서 로그인 페이지 이후 Redirection 될 페이지 주소를 입력한다. F.E에선 해당 Redirect를 통해 인가 코드를 B.E 서버로 전달한다.
-
카카오 인증 서버는 사용자 인증, 동의항목 동의, 로그인 요청 과정을 거쳐, **인가 코드(Authorization Code)**를 발급해 서비스 앱에 등록된 **Redirect URI(F.E 측)**로 전달한다.