참고)
Kakao Developers 문서
카카오 로그인은 카카오계정으로 다양한 서비스에 로그인할 수 있도록 하는 OAuth 2.0기반의 소셜 로그인 서비스이다.
카카오 로그인 사용 시, 서비스는 ID 및 비밀번호를 입력받고 검증하는 과정을 직접 구현하지 않고도 사용자에 대한 인증과 인가를 간편하고 안전하게 처리할 수 있다.
아래는 카카오에서 제공해주는 기능이다.
카카오 로그인은 카카오 계정의 사용자 자격 정보로 인가 코드를 받아오고, 인가 코드로 액세스 토큰과 리프레스 토큰을 얻는 두 단계로 구성되어있다.
백엔드 부분
프론트에서 저장해둔 카카오의 사용자 토큰을 이용해서 카카오에 사용자 정보를 요청해야한다. (사용자 토큰을 받는 과정까지는 대부분 클라이언트 측에서 구현을 해준다. )
사용자 액세스 토큰 또는 어드민 키와 사용자 ID를 헤더에 담아 GET/POST로 요청한다. 사용자 정보 요청 성공 시 응답 바디는 JSON 객체로 사용자 정보들을 포함한다.
스프링 부트로 구현한 코드
(body값으로 클라측에서 Access Token을 받은 뒤 헤더에 담아서 카카오 서버측에 요청한다.)
RestTemplate rt2 = new RestTemplate();
HttpHeaders headers2 = new HttpHeaders();
headers2.add("Authorization", "Bearer "+ postUserReq.getAccessToken());
headers2.add("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
HttpEntity<MultiValueMap<String, String>> kakaoProfileRequest2 =
new HttpEntity<>(headers2);
ResponseEntity<String> response2 = rt2.exchange(
"https://kapi.kakao.com/v2/user/me",
HttpMethod.POST,
kakaoProfileRequest2,
String.class
);
ObjectMapper objectMapper2 = new ObjectMapper();
KakaoProfile kakaoProfile = null;
objectMapper2.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
try {
kakaoProfile = objectMapper2.readValue(response2.getBody(), KakaoProfile.class);
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (JsonProcessingException e) {
e.printStackTrace();
}
kakaoProfile 객체
public class KakaoProfile {
public String id;
public String connected_at;
public Properties properties;
public KakaoAccount kakao_account;
@Data
public class Properties {
public String nickname;
public String profile_image;
public String thumbnail_image;
}
@Data
public class KakaoAccount {
public Boolean profile_needs_agreement;
public Profile profile;
public Boolean has_email;
public Boolean email_needs_agreement;
public Boolean is_email_valid;
public Boolean is_email_verified;
public String email;
public Boolean has_birthday;
public Boolean birthday_needs_agreement;
public String birthday;
public String birthday_type;
public boolean has_gender;
public String gender;
public boolean gender_needs_agreement;
@Data
public class Profile {
public String nickname;
public String thumbnail_image_url;
public String profile_image_url;
public Boolean is_default_image;
}
}
}
성공적으로 진행된다면, 사용자의 정보를 Kakao Proflie 객체로 받을 수 있다. 이후에는 사용자의 정보로 우리 서비스의 회원가입, 로그인 정책대로 구현해주면 된다!
'Backend Study > Server' 카테고리의 다른 글
쿠키, 세션, JWT (0) | 2022.08.23 |
---|---|
From 절 서브 쿼리 (=인라인뷰 서브 쿼리) (0) | 2022.08.01 |
OAuth 2.0 (0) | 2022.07.30 |
쿼리문(Join, Group by, Union, Having, 변수) (0) | 2022.07.24 |
리눅스 사용시 root? (0) | 2021.08.03 |