Spring Boot 을 사용해서 Kakao, Naver 로그인하기 2편 (OAuth 20) 코드 구현

Spring Boot 을 사용해서 Kakao, Naver 로그인하기 2편 (OAuth 20) 식별숫자 구현

했습니다. 2편에서는 바로 코드를 구현하면서 최종적으로 API 만들어봅니다. 샘플 코드를 볼 때 다음 내용들을 참고해주세요. 2. Server 의 역할서버에서 구현해야 하는 로직은 크게 세가지 입니다.


Configuration
Configuration

Configuration

Email, Nickname 과 같은 프로필 정보나 인가 타입을 갖고 있습니다. 작업 성격에 따라 회원 Member 도메인과 인가 Authentication 도메인을 분리하는 경우도 있으니 이 부분 설계하기에 따라 바뀔 수 있습니다. 6. 외부 API 요청

외부 API 요청을 위한 Client 클래스를 만들어봅니다. API 요청을 위해 RestTemplate 을 사용했지만, 선호도에 따라 다른 걸 사용해도 됩니다.

인터페이스를 많게 사용했는데 다음과 같은 장점이 있습니다.

OAuthLoginService
OAuthLoginService

OAuthLoginService

카카오네이버와 같은 OAuth 플랫폼에 인가 후 프로필 인포 불러오기 email 정보로 소비자 검증 없으면 새로 가입처리 Access Token 생성 후 내려주기 취향에 따라 findOrCreateMember 부분을 별도 MemberService 로 분리해도 상관없습니다. 코드를 보면 알 수 있듯이 네이버, 카카오에 특화된 로직이 아닌 공통적으로 로직이며 인터페이스만을 사용했습니다. 대신 login 메서드 호출 시 KakaoLoginParams, NaverLoginParams 둘 중에 뭐가 들어오냐에 따라 API 요청하는 곳이 달라집니다.

만약 새로운 Google, Facebook 로그인이 추가된다고 하더라도 이 코드는 수정할 필요가 없기 때문에 안전하게 추가 가능합니다.

로그인하는 방법

1. 컴퓨터 구글에서 로그인하기 위해 아이디를 아이디이메일 입력합니다. 2. 컴퓨터화면의 다음곽 같이 인가 번호가 보입니다. 3. 스마트폰의 화면이 꺼져있고, 잠겨있디먄 잠금을 풀어줍니다. 4. 스마트폰에서 컴퓨터와 같은 번호를 누릅니다. 5. 컴퓨터의 크롬에서 구글로그인이 완료되었습니다. 컴퓨터에서 로그인하기 위해 구글 아이디를 입력 rarr 다음 rarr 컴퓨터화면의 숫자가 보임 rarr 스마트폰에서 같은 숫자를 누름 rarr 결과 컴퓨터에서 구글 로그인이 자동으로 됩니다.

RequestOAuthInfoService

참고해서 List 를 주입받으면 해당 인터페이스의 구현체들이 모두 List 에 담겨옵니다. 7. JWTAccess Token 생성

네이버, 카카오 인증이 완료되면 클라이언트에게 Access Token 을 내려주어야 합니다. 이곳에서 Access Token 은 내 서비스의 인가 토큰이지, 네이버나 카카오의 토큰이 아닙니다. OAuth 플랫폼들의 Access Token 을 클라이언트에게 내려주면 플랫폼 별로 만료 기간 관리도 번거롭고 혹여나 탈취라도 당하면 안되기 때문에 반드시 바로 토큰을 만들어서 내려줍니다.

JWT 연관 부분 이 글의 핵심 주제는 아니기 때문에 구체적인 설명은 생략합니다.

위와 똑같이 따라 했는데, signIn 함수 내에 있는 로그인을 다시 시도해 주세요 토스트가 지속적으로 뜨시는 분 계신가요? 아니라면 안 보셔도 됩니다. 자, 아래 두 가지가 실패의 예입니다. 숫자여서 에러가 나는 것인가? 아닙니다. 문자로 바꿔도 같은 토스트가 계속해서 나왔어요. 분명 다른 프로젝트를 진행하면서 식별숫자 상의 차이점은 발견하지 못하였습니다. 에러 로그를 발견하여 구글링을 했습니다. 에러는 Ignoring header XFirebaseLocale because its value was null.라고 나왔어요.

이것입니다. Password must be at least 6 characters 비밀번호가 6자리 이상이어야 하네요 그래서 1234에서 회원 가입이 되지 않던 비밀번호가 123456789에서는 성공했던 것입니다.

자주 묻는 질문

Configuration

Email Nickname 과 같은 프로필 정보나 인가 타입을 갖고 있습니다. 자세한 내용은 본문을 참고 해주시기 바랍니다.

카카오네이버와 같은 OAuth 플랫폼에 인가 후 프로필 인포 불러오기 email 정보로 소비자 검증 없으면 새로 가입처리 Access Token 생성 후 내려주기 취향에 따라 findOrCreateMember 부분을 별도 MemberService 로 분리해도 상관없습니다. 더 알고싶으시면 본문을 클릭해주세요.

로그인하는 방법

1 자세한 내용은 본문을 참고 해주시기 바랍니다.