카카오 로그인
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
카카오 로그인 과정
https://developers.kakao.com/docs/latest/ko/kakaologin/js#before-you-begin-process
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
카카오 로그인 데모
그대로 복사해서 jsp 파일에 body 태그 안에 넣으면 된다.
<script src="https://t1.kakaocdn.net/kakao_js_sdk/2.7.4/kakao.min.js"
integrity="sha384-DKYJZ8NLiK8MN4/C5P2dtSmLQ4KwPaoqAfyA/DfmEc1VDxu4yyC7wy6K1Hs90nka" crossorigin="anonymous"></script>
<script>
Kakao.init('c089c8172def97eb00c07217cae17495'); // 사용하려는 앱의 JavaScript 키 입력
</script>
<a id="kakao-login-btn" href="javascript:loginWithKakao()">
<img src="https://k.kakaocdn.net/14/dn/btroDszwNrM/I6efHub1SN5KCJqLm1Ovx1/o.jpg" width="222"
alt="카카오 로그인 버튼" />
</a>
<p id="token-result"></p>
<script>
function loginWithKakao() {
Kakao.Auth.authorize({
redirectUri: 'https://developers.kakao.com/tool/demo/oauth',
});
}
// 아래는 데모를 위한 UI 코드입니다.
displayToken()
function displayToken() {
var token = getCookie('authorize-access-token');
if(token) {
Kakao.Auth.setAccessToken(token);
Kakao.Auth.getStatusInfo()
.then(function(res) {
if (res.status === 'connected') {
document.getElementById('token-result').innerText
= 'login success, token: ' + Kakao.Auth.getAccessToken();
}
})
.catch(function(err) {
Kakao.Auth.setAccessToken(null);
});
}
}
function getCookie(name) {
var parts = document.cookie.split(name + '=');
if (parts.length === 2) { return parts[1].split(';')[0]; }
}
</script>
Step 1: 간편 로그인
애플리케이션 추가하기
내 애플리케이션 -> 애플리케이션 추가하기
앱 이름, 회사명, 카테고리를 입력한 다음 아래 체크박스 체크 후 저장
카카오 로그인 활성화 설정
카카오 로그인이 꺼져있기 때문에 내 애플리케이션 -> 대시보드 -> 설정하기 클릭
카카오 로그인 ON으로 바꾸기
앱 키 등록
내 애플리케이션 -> 앱 키
앱 키를 보면 4가지의 앱 키가 있다.
여기서 JavaScript 키 복사
jsp에 script 태그 안에 있는 코드에 JavaScript 키를 붙여넣는다.
<script>
Kakao.init('1711~~~'); // 앱 키 붙여넣기
</script>
카카오 로그인 동의항목 설정
내 애플리케이션 -> 카카오 로그인 -> 동의항목
여기서 개인 정보 동의 항목을 설정할 수 있다.
일단 닉네임만 받아올 것이기 때문에 닉네임 오른쪽에 설정 클릭
필수 동의 체크 후 동의 목적 입력
저장하기!
입력하고 저장하면 상태에 '필수 동의'가 떠있는 걸 확인할 수 있다.
Redircet URI
우리 서버의 주소를 등록해놓고 카카오가 이 주소로 응답을 보내게 설정
내 애플리케이션 -> 카카오 로그인 -> Redirect URI
IP 주소 + 요청 받을 url을 입력한다.
js 코드에서도 같은 url 값을 넣어준다.
KakaoController.java
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/kakao/*")
public class KakaoController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String action = req.getPathInfo();
if("/code".equals(action)) {
System.out.println("카카오가 코드를 보냈다");
System.out.println(req.getParameter("code"));
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String action = req.getPathInfo();
}
}
로그인을 하면 Redirect URI로 code 값을 넣어서 보내준다.
IntelliJ에서도 출력이 잘 된다.
Step 2: 토큰 받기
https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#request-token
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
전체 코드
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String action = req.getPathInfo();
if ("/code".equals(action)) {
System.out.println("카카오가 코드를 보내줬다.");
// 인가 코드
String code = req.getParameter("code");
System.out.println(code);
// 인가 코드로 토큰 발급 요청 (HTTP POST로 https://kauth.kakao.com/oauth/token 에 요청 보내기)
try {
// HttpClient 생성
HttpClient client = HttpClient.newHttpClient();
String formData = String.format(
"grant_type=authorization_code&client_id=내 REST API 키&redirect_uri=설정해준 Redirect URI&code=%s",
URLEncoder.encode(code, StandardCharsets.UTF_8)
);
// HttpRequest 생성
HttpRequest httpRequest = HttpRequest.newBuilder()
.uri(URI.create("https://kauth.kakao.com/oauth/token"))
.header("Content-Type", "application/x-www-form-urlencoded;charset=utf-8")
.POST(HttpRequest.BodyPublishers.ofString(formData))
.build();
// 요청 보내고 응답 받기
HttpResponse<String> httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
// 응답 출력
System.out.println("Response Code: " + httpResponse.statusCode());
System.out.println("Response Body: " + httpResponse.body());
} catch (Exception e) {
e.printStackTrace();
}
}
}
요청
필수로 나와있는 4가지를 같이 넣어서 요청을 보내야 한다.
HttpClient 생성
필수로 넣어야 되는 내용들을 String 변수에 만들어준다.
grant_type은 authorization_code로 고정이니까 그대로 적어주고,
client_id는 앱의 REST API 키를 복사해서 적어준다.
redirect_uri은 아까 설정해준 Redirect URI를 복사해서 적어주고,
code는 파라미터로 받은 응답 코드를 req.getParameter("code")로 가져와서 넣어준다.
// HttpClient 생성
HttpClient client = HttpClient.newHttpClient();
String formData = String.format(
"grant_type=authorization_code&client_id=내 REST API 키&redirect_uri=설정해준 Redirect URI&code=%s",
URLEncoder.encode(code, StandardCharsets.UTF_8)
);
HttpRequest 생성
헤더에 필수로 들어가야 되는 헤더를 넣어주고,
본문으로 아까 만든 String 변수를 넣어준다.
// HttpRequest 생성
HttpRequest httpRequest = HttpRequest.newBuilder()
.uri(URI.create("https://kauth.kakao.com/oauth/token"))
.header("Content-Type", "application/x-www-form-urlencoded;charset=utf-8")
.POST(HttpRequest.BodyPublishers.ofString(formData))
.build();
요청 보내고 응답 받기
카카오에게 요청을 보내고 응답을 받는다.
// 요청 보내고 응답 받기
HttpResponse<String> httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
응답 출력
// 응답 출력
System.out.println("Response Code: " + httpResponse.statusCode());
System.out.println("Response Body: " + httpResponse.body());
Step 3: 사용자 로그인 처리
https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#req-user-info
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
발급 받은 토큰으로 사용자 정보를 조회하고, 서비스 회원 정보를 확인하거나 가입 처리를 한다.
전체 코드
// acces_token 뽑아내기 (문자열 파싱)
String accessToken = httpResponse.body().split("\"access_token\":\"")[1].split("\"")[0];
HttpRequest userHttpRequest = HttpRequest.newBuilder()
.uri(URI.create("https://kapi.kakao.com/v2/user/me"))
.header("Content-Type", "application/x-www-form-urlencoded;charset=utf-8")
.header("Authorization", "Bearer " + accessToken)
.POST(HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> userHttpResponse = client.send(userHttpRequest, HttpResponse.BodyHandlers.ofString());
System.out.println("Response Code: " + userHttpResponse.statusCode());
System.out.println("Response Body: " + userHttpResponse.body());
토큰 뽑아내기 (문자열 파싱)
access_token 값만 뽑아내서 변수에 저장해준다.
// acces_token 뽑아내기 (문자열 파싱)
String accessToken = httpResponse.body().split("\"access_token\":\"")[1].split("\"")[0];
요청 생성
사용자 정보를 가져오기 위한 요청을 생성한다.
카카오 문서에 나와있는 대로 요청 URL과 헤더를 작성해준다.
HttpRequest userHttpRequest = HttpRequest.newBuilder()
.uri(URI.create("https://kapi.kakao.com/v2/user/me"))
.header("Content-Type", "application/x-www-form-urlencoded;charset=utf-8")
.header("Authorization", "Bearer " + accessToken)
.GET()
.build();
요청 보내고 응답 받기
카카오 서버에게 요청을 보내고 응답을 받는다.
HttpResponse<String> userHttpResponse = client.send(userHttpRequest, HttpResponse.BodyHandlers.ofString());
응답 출력
받은 응답을 출력해준다.
System.out.println("Response Code: " + userHttpResponse.statusCode());
System.out.println("Response Body: " + userHttpResponse.body());
'BE > Java' 카테고리의 다른 글
[Java] JWT란? / JWT 생성, 검증 (0) | 2025.01.17 |
---|---|
[Java] PortOne 카카오페이 결제 연동 (JSON 데이터 처리, 장바구니 기능) (0) | 2025.01.15 |
[Java] DTO 설계 시 고려사항 (0) | 2025.01.10 |
[Java] multipart/form-data란? / form 태그로 서버에 파일 전달하기 (0) | 2025.01.09 |
[Java] SQL Injection, PreparedStatement (2) | 2025.01.09 |