이오이오이오
코딩하는헬린이
이오이오이오
전체 방문자
오늘
어제
  • 분류 전체보기 (39)
    • 기타 (2)
      • 잡다한 (2)
      • 헬스 (0)
    • 개발 (21)
      • Sql (3)
      • Java (2)
      • Spring (8)
      • OAuth (4)
      • node.js (1)
      • AWS (1)
      • Linux (2)
    • 이론 (11)
    • Dev Tool (1)
      • IntelliJ IDEA (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Spring
  • 로이필링
  • 니모닉
  • springboot
  • POW
  • java
  • Spring Boot
  • reactive streams
  • restfulapi
  • db 성질
  • kakaologin
  • webflux
  • 블록체인지갑
  • bip
  • RESTful
  • pos
  • 카카오로그인
  • blockchain
  • nft
  • Ipfs
  • oauth
  • isolation level
  • 블록체인

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
이오이오이오

코딩하는헬린이

[OAuth] Spring 카카오톡 Login 연동 (2)
개발/OAuth

[OAuth] Spring 카카오톡 Login 연동 (2)

2020. 7. 20. 15:11
반응형

안녕하세요 코드짜는헬창 입니다.

 

카카오톡 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
    '개발/OAuth' 카테고리의 다른 글
    • [OAuth] Spring 카카오톡 Login 연동 (3)
    • [OAuth] Spring 카카오톡 Login 연동 (1)
    • [OAuth] 카카오 로그인 API 예제!
    이오이오이오
    이오이오이오

    티스토리툴바