Kakao Developer setting
1. 카카오 디벨로퍼 사이트에서 (https://developers.kakao.com/) -> 내 애플리케이션 -> 애플리케이션 추가하기
2. 앱 이름 등록후 플랫폼 등록
3. 앱 키에서 REST API 키 복사해서 저장해두기
4. 카카오 로그인 활성화 & Redirect URI 등록
5. 카카오 로그인 API 참고해서 필요한 것들 & 필수 정보 동의하기
https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api
Kakao Login API
https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api
1. 인가 코드를 받아올 간단한 html 폼 작성
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<a href="https://kauth.kakao.com/oauth/authorize?client_id=09201921cd5e210ee03ddd019e256454&redirect_uri=http://127.0.0.1:8080/kakao-login&response_type=code"><img src="/kakao_login_medium_narrow.png" alt=""></a>
</body>
</html>
2. 토큰 발급
package com.example.userservice.Login.token;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Flux;
// 인가코드를 이용하여 Token ( Access , Refresh )를 받는다.
@Component
@RequiredArgsConstructor
public class KakaoTokenData {
private final WebClient webClient = WebClient.create();
private static final String TOKEN_URI = "https://kauth.kakao.com/oauth/token";
private static final String REDIRECT_URI = "http://127.0.0.1:8080/kakao-login";
private static final String GRANT_TYPE = "authorization_code";
private static final String CLIENT_ID = {REST API KEY};
public KakaoToken getToken(String code) {
String uri = TOKEN_URI + "?grant_type=" + GRANT_TYPE + "&client_id=" + CLIENT_ID + "&redirect_uri=" + REDIRECT_URI + "&code=" + code;
Flux<KakaoToken> response = webClient.post()
.uri(uri)
.contentType(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToFlux(KakaoToken.class);
return response.blockFirst();
}
}
package com.example.userservice.Login.token;
import lombok.Data;
@Data
public class KakaoToken {
private String token_type;
private String access_token;
private Integer expires_in;
private String refresh_token;
private Integer refresh_token_expires_in;
}
3. 토큰으로 로그인
package com.example.userservice.Login.service;
import com.example.userservice.Login.dto.ResponseKakaoUserInfo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
@RequiredArgsConstructor
@Component
public class KakaoUserService {
private final WebClient webClient = WebClient.create();
private static final String USER_INFO_URI = "https://kapi.kakao.com/v2/user/me";
public ResponseKakaoUserInfo getUserInfo(String token) {
String uri = USER_INFO_URI;
Mono<ResponseKakaoUserInfo> response = webClient.get()
.uri(uri)
.header("Authorization", "Bearer " + token)
.retrieve()
.bodyToMono(ResponseKakaoUserInfo.class);
return response.block();
}
}
Kakao Friends API
https://developers.kakao.com/docs/latest/ko/kakaotalk-social/rest-api
1. 친구 목록 불러오기
package com.example.userservice.Friends.service;
import com.example.userservice.Friends.vo.KakaoFriendInfo;
import com.example.userservice.Friends.vo.ResponseKakaoFriends;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.util.DefaultUriBuilderFactory;
import java.util.List;
@RequiredArgsConstructor
@Component
public class KakaoFriendService {
private final WebClient webClient = WebClient.create();
private static final String FRIENDS_INFO_URI = "https://kapi.kakao.com/v1/api/talk/friends";
public List<KakaoFriendInfo> getFriendsInfo(String token, Integer offset ) {
String uri = FRIENDS_INFO_URI;
DefaultUriBuilderFactory factory = new DefaultUriBuilderFactory(uri);
factory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);
WebClient webClient = WebClient.builder().uriBuilderFactory(factory).baseUrl(uri).build();
return webClient.get()
.uri(uriBuilder -> uriBuilder
.queryParam("limit", 20)
.queryParam("offset", offset)
.build())
.header("Authorization", "Bearer " + token)
.retrieve()
.bodyToMono(ResponseKakaoFriends.class)
.block()
.getFriends();
}
}
친구 객체는 required와 본인이 원하는 데이터로 작성하면 된다.
참고자료
https://devtalk.kakao.com/t/faq-api-api/82152
'개발 > API' 카테고리의 다른 글
[spring] Naver Session Login (0) | 2023.07.31 |
---|---|
[Spring] Google Session Login (0) | 2023.07.31 |