반응형
안녕하세요 코드짜는헬창 입니다.
카카오톡 Login 연동에 대한 두번째 포스팅을 하도록 하겠습니다.
저와 같은 환경셋팅을 원하시는 분은 https://eblo.tistory.com/54 를 참고해주세요 ~
저는 Spring boot에 그래들, 타임리프를 사용했으며 메이븐 및 JSP를 사용 하셔도 됩니다.
시작하도록 하겠습니다!
1) 인증 코드 받기
카카오톡 로그인 할 때 카카오톡 전용 화면이 뜨면서 로그인하라고 나오죠?
그러면 화면을 띄어 보고 code 파라미터를 받아와보죠!
아래와 같이 코드를 작성 부탁드립니다.
컨트롤러에서 프론트 호출해 주시고 로그인 진행해주시면 됩니다!
@RequestMapping("/login")
public String home(@RequestParam(value = "code", required = false) String code) throws Exception{
System.out.println("#########" + code);
return "testPage";
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="https://kauth.kakao.com/oauth/authorize
?client_id=730975601d99f3b911f8fb8fff4edafa
&redirect_uri=http://localhost:8080/login
&response_type=code">로그인</a>
</body>
</html>
***** href 내용은 그대로 쓰시는게 아니라 본인의 client_id , redirect_uri 으로 변경을 해주셔야 합니다. ******
그러면 이렇게 로그인 화면이 나오고 로그인 진행해주시면 로그를 보시면
code 파라미터 값을 가져오실걸 볼 수 있습니다!
#########GJ0ouweigBr9fDyCfu-SsfZVjY69LOz0SDS2xJat1bMecBZeBAthQGQD-gSoac-2GqYyHgorDKcAAAFzarIl2g
2) 사용자 토큰 받기!
문서를 보시면 아래와 같은 내용을 볼 수 있습니다.
얼추 보니까 해당 post 방식으로 원하는 값을 보내면 될 듯 하고
성공하면 저런 내용의 값들을 받아올수 있는거 같네요!
아래와 같이 코드를 작성해주시면 됩니다!
@Controller
public class KakaoController {
@Autowired
private KakaoService kakaoService;
@RequestMapping("/login")
public String home(@RequestParam(value = "code", required = false) String code) throws Exception{
System.out.println("#########" + code);
String access_Token = kakaoService.getAccessToken(code);
System.out.println("###access_Token#### : " + access_Token);
return "testPage";
}
}
@Service
public class KakaoService {
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=730975601d99f3b911f8fb8fff4edafa"); //본인이 발급받은 key
sb.append("&redirect_uri=http://localhost:8080/login"); // 본인이 설정해 놓은 경로
sb.append("&code=" + authorize_code);
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;
}
}
* 결과값이 200이면 통신이 잘된겁니다! 바꾸셔야 하는 부분은 확실히 바꿔주세요!
JsonParser 빨간줄이 나오면 Gson 라이브러리 추가하셔야 합니다.
----결과값-----
responseCode : 200
response body : {"access_token":"LilJmueUBPlH6pIuAnEra6igTiRllke-n6RnFQo9dZwAAAFzatW0ew","token_type":"bearer","refresh_token":"zHKhaFpAmDXwNJmSLa-wdwvx4g69Rt6CrP_qgQo9dZwAAAFzatW0eg","expires_in":21599,"scope":"account_email profile","refresh_token_expires_in":5183999}
access_token : LilJmueUBPlH6pIuAnEra6igTiRllke-n6RnFQo9dZwAAAFzatW0ew
refresh_token : zHKhaFpAmDXwNJmSLa-wdwvx4g69Rt6CrP_qgQo9dZwAAAFzatW0eg
###access_Token#### : LilJmueUBPlH6pIuAnEra6igTiRllke-n6RnFQo9dZwAAAFzatW0ew
성공하시면 해당 내용과 같이 내용이 나옵니다!
다음 포스팅때는 로그인 정보를 가져와 보도록 하겠습니다! .
반응형
'개발 > OAuth' 카테고리의 다른 글
[OAuth] Spring 카카오톡 Login 연동 (3) (2) | 2020.07.21 |
---|---|
[OAuth] Spring 카카오톡 Login 연동 (1) (0) | 2020.07.20 |
[OAuth] 카카오 로그인 API 예제! (4) | 2020.06.22 |