-
[Spring Boot] 카카오 로그인 - 1Backend/개발 2022. 5. 1. 13:20반응형
oauth 로그인을 구현하는 방법
oauth의 기본 로직은 다음과 같다.
출처 : https://datatracker.ietf.org/doc/html/rfc6749
보통 OAuth의 인증 종류(grant type)으로 Autorization Code을 주로 사용한다.
- Resouce Owner로 부터 리소스 사용 동의를 받으면 Authorization Server는 Client에게 Token을 발급해준다.
- Client는 Token을 가지고 Resource Server에게 Resource Owner의 정보를 요청한다.
- Client는 받은 정보를 이용해서 로그인을 진행하거나, 추가적인 회원가입으로 애플리케이션에 필요한 기능을 개발한다
- Access Token이 만료되면 웹페이지를 사용하고 있는 Resource Owner모르게 Authorizaion Server에게 refresh token을 이용해 새로운 accessToken을 발급받고, 2~3을 반복한다.
- 이런 식으로 oauth를 이용한 로그인이 진행되고 3,4번은 oauth에서 발급받은 토큰을 사용할 수도 있고 jwt 토큰을 사용해서 서비스만의 로그인을 다시 구현할 수도 있다.
보통 SSR 방식으로 템플릿 엔진을 이용해서 백엔드로만 서비스를 구현하면 Spring Security+oauth2-client를 사용해서 쉽게 로그인할 수 있다. spring security를 사용하면 code, token, user info 발급 등이 다 자동화되게 구현할 수 있다.
그런데 프론트엔드와 백엔드를 분리해서 로그인을 구현하게 되면 프론트엔드단에서 code나 token까지 발급해주고 로그인 요청으로 jwt 토큰을 발급해주는 방식을 많이 사용하는데 그럼 굳이 Spring Security를 쓰지 않아도 HTTP Client로 직접 Oauth api 요청을 보내서 구현할 수 있다.
그래서 한번 HTTP Client를 이용해서 직접 카카오 로그인을 구현해보려고 한다.
대략 이런 흐름으로 동작한다.
1. 준비
- [developers.kakao.com](https://developers.kakao.com/console/app) 에서 애플리케이션 추가
- REST API 키
- 앱 설정 - 플랫폼 - Web 사이트 도메인에 http://localhost:8080 추가
- 제품 설정 - 카카오 로그인 - Redirect URI 추가 (예 : http://localhost:8080/oauth/kakao/callback)
Authorization Code 발급
GET /oauth/authorize?client_id=${REST_API_KEY}&redirect_uri=${REDIRECT_URI}&response_type=code HTTP/1.1 Host: kauth.kakao.com
REST API KEY , REDIRECT_URI에 준비에서 발급, 설정한 값 입력하고 GET 요청
@RestController public class OAuthController { @GetMapping("/oauth/kakao/callback") public String authCallback(String code){ return code; } }
redirect uri에 해당하는 path로 컨트롤러를 생성하면 code를 받을 수 있다.
2. Access Token 발급
발급받은 code를 이용해서 HTTP Client 모듈을 이용해서 카카오에 HTTP 요청을 보내 토큰을 발급받아야 한다.
다음에 계속 . .
'Backend > 개발' 카테고리의 다른 글
[Spring Boot] @Transactional Rollback 관련 트러블슈팅 (0) 2023.01.30 [Spring Boot] List의 null값 처리하기2 - 일급컬렉션, @RequestBody (0) 2022.05.15 [Spring Boot] JPA Flush 특징, 문제 해결 (0) 2022.04.17 [Spring Boot] List의 null 값 처리하기1 - CustomConverter로 @RequestParam (0) 2022.04.07 [DB] 인덱스로 조회시 개선되는 성능 확인해보기 (0) 2022.02.23