일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 리액트
- 알고리즘
- 스프링부트
- 프로세스
- SpringBoot
- 백엔드개발자
- 코드업
- 프로그래머스
- db
- 자바
- 자바알고리즘
- 국비지원
- 자바스크립트
- Java
- 데이터베이스
- 프로그래밍
- 국비지원코딩
- React
- 운영체제
- 자바의정석
- 프로그래머
- 코딩
- 자바개발자
- Codeup
- 소셜로그인구현
- 혼공컴운
- 개발자
- 백엔드
- 개발자일기
- 미라클모닝
- Today
- Total
초코딩(chocoding)
[Project - Spring Boot] 소셜 로그인/API - 카카오 : 기본 초기 세팅 / 401에러 해결법 / client secret key 지정 본문
[Project - Spring Boot] 소셜 로그인/API - 카카오 : 기본 초기 세팅 / 401에러 해결법 / client secret key 지정
sweetychocoding 2024. 1. 18. 15:58기본적인 초기 세팅은 다른 블로그들을 참고했다.
<기본 초기 세팅 - 참고 블로그>
[개인프로젝트] 소셜로그인 기능 추가 (구글, 카카오, 네이버/ Rest API, Spring Boot)
목차 1. 각각의 소셜 플랫폼에서 환경구성하기 2. 소셜로그인 Rest API 구현하기 1) 로그인 최초 요청 처리 (code 받기) 2) 로그인 이후 요청 처리 (받은 code로 token 받기) 3) 클라이언트에 반환하기 (받
yeees.tistory.com
<kakao developers>
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
1. 플랫폼 - web 플랫폼 등록
2. 앱 권한 신청하기
3. 보안 - client secret key 지정
4. 카카오 로그인
: Redirect URL은 http://localhost:8080
: 활성화 설정 꼭 해주기
하지만 설정을 하면서 ip 주소를 넣지 않으면 401에러가 발생할 수 있다.
-> (java.io.IOException: Server returned HTTP response code: 401 for URL: https://kauth.kakao.com/oauth/token)
-> 고급 설정 - 허용 IP 설정 - 본인의 ip 주소를 넣어주어야 함.
그리고 client secret을 설정하기 위해서는 파라미터 값으로 값을 넘겨주어야 한다.
-> client secret은 설정할거면 파라미터 값으로 넘겨주어야 함
-> sb.append("&cliend_secret=MP2DGb1FU2Xa3QcDKodnB1zTzEQLzGn5");
.
.
.
매번 구글링을 하며 다른 사람들의 클래스들이 어떻게 구성되어 있는지 궁금했었다.
일단 카카오 회원가입 및 로그인 개발을 끝낸 나의 클래스 구성은 아래와 같다.
먼저 kakao api 를 사용하여 로그인이 되도록 만들었다.
하지만 다음 작업에서는 로그인한 ( db에 있으면 로그인 , 없으면 회원가입) user 정보를
db에 저장하는 작업을 해야한다.
우선 아래 코드는 kakao로 로그인까지 완료되는 코드이다.
.
.
.
KakaoAPI (Service)
package com.hj.pjt.service;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import org.springframework.stereotype.Service;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
@Service
public class KakaoAPI {
public String getAccessToken (String authorize_code) {
String access_Token = "";
String refresh_Token = "";
String reqURL = "https://kauth.kakao.com/oauth/token";
try {
URL url = new URL(reqURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// POST 요청을 위해 기본값이 false인 setDoOutput을 true로
conn.setRequestMethod("POST");
conn.setDoOutput(true);
// POST 요청에 필요로 요구하는 파라미터 스트림을 통해 전송
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
StringBuilder sb = new StringBuilder();
sb.append("grant_type=authorization_code");
sb.append("&client_id=****328753238fc180284b373832262a");
sb.append("&redirect_uri=http://localhost:8080/social/login");
sb.append("&code=" + authorize_code);
sb.append("&cliend_secret=****Gb1FU2Xa3QcDKodnB1zTzEQLzGn5");
bw.write(sb.toString());
bw.flush();
// 결과 코드가 200이라면 성공
int responseCode = conn.getResponseCode();
System.out.println("responseCode : " + responseCode);
// 요청을 통해 얻은 JSON타입의 Response 메세지 읽어오기
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = "";
String result = "";
while ((line = br.readLine()) != null) {
result += line;
}
System.out.println("response body : " + result);
//Gson 라이브러리에 포함된 클래스로 JSON파싱 객체 생성
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(result);
access_Token = element.getAsJsonObject().get("access_token").getAsString();
refresh_Token = element.getAsJsonObject().get("refresh_token").getAsString();
System.out.println("access_token : " + access_Token);
System.out.println("refresh_token : " + refresh_Token);
br.close();
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return access_Token;
}
}
loginPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="https://kauth.kakao.com/oauth/authorize?client_id=****0b218caf1b7c5c6faed3222c37d3&redirect_uri=http://localhost:8080/social/login&response_type=code">
<img src="/resources/images/kakao_login_medium_wide.png" alt="kakaoLogin IMG" />
</a>
<a>google 로그인</a>
<a>kakao 로그인</a>
</body>
</html>