카카오 로그인 목적

1. 인증
블로그 만드는 것보다 인증절차가 더 복잡한데, 그런 것을 카카오 로그인에서 대신해준다.

2.인증 + 사용자 정보

 

 

 

 

1. 유저가 블로그 서버에 카카오 로그인 요청

2. 카카오 로그인창에서 로그인

3. 카카오 api서버(+리소스서버)에서 인증을 하여 블로그 서버로 인증결과(코드)를 반환

4. 유저가 정보를 제공하지 않겠다면 코드를 블로그 서버로 주고 과정이 끝나고,

5. 유저 정보를 제공하겠다고 체크하면 다시 카카오 서버로 통신하여 토큰을 받아온다.

6. 토큰을 이용하면 블로그 서버에서 바로 리소스 서버로 유저정보 요청이 가능해진다.

7. 리소스 서버에서 가져온 회원정보가 블로그 회원가입 테이블 조건에 부적합하다면
  인증만 된 상태에서 회원가입을 따로 시켜야한다.
  적합하다면 바로 로그인 시키면 된다.

-----------------카카오 입장에서 보았을 때------------------

유저(웹브라우저) = 리소스 오너

블로그 = 클라이언트

카카오api = api 인터페이스 서버

리소스 서버

 

 

 

카카오 개발자 사이트 접속

--------------------------------------------------------------------------

 

 

 

내 애플리케이션에서 애플리케이션 추가를 클릭

 

 

앱키의 종류

 

내 사이트 주소 설정

 

 

 

 

주소입력

 

 

카카오 로그인 활성화

 

 

요청주소 등록

 

 

주소를 설정해준다

 

 

로그아웃 요청

 

 

 

 

동의항목 설정

 

 

 

 

 

 

 

 

 

 

 

문서를 읽어본다

https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#request-code

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

 

 

 

 

 

 

 

GET /oauth/authorize?client_id={app_key}&redirect_uri={redirect_uri}&response_type=code HTTP/1.1
Host: kauth.kakao.com

 

app_key

 

redirect_uri

 

 

https://kauth.kakao.com/oauth/authorize?client_id=아이디&redirect_uri=http://localhost:8000/blog/oauth/kakao?cmd=callback&response_type=code

 

 

결과가 뜸

 

보내면

클라이언트ID
콜백주소
response_type : code
eamil
profile (사진, 닉네임)
유저ID, 비밀번호

 

 

 

더보기
package com.cos.blog.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.cos.blog.action.Action;
import com.cos.blog.action.kakao.KakaoCallbackAction;

// http://localhost:8000/blog/board
@WebServlet("/oauth/kakao")
public class KakaoController extends HttpServlet {
	private final static String TAG = "BoardController : ";
	private static final long serialVersionUID = 1L;
       
    public KakaoController() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}
	
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// http://localhost:8000/blog/user?cmd=join
		String cmd = request.getParameter("cmd");
		System.out.println(TAG+"router : "+cmd);
		Action action = router(cmd);
		action.execute(request, response);
	}
	
	public Action router(String cmd) {
		
		if(cmd.equals("callback")) {
			return new KakaoCallbackAction();
		}
		
		return null;
		
	}
	
}

 

 

 

더보기
package com.cos.blog.action.kakao;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.cos.blog.action.Action;

public class KakaoCallbackAction implements Action{

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String code = request.getParameter("code");
		System.out.println("카카오 인증 완료됨");
		System.out.println(code);
		
	}

}

 

 

 

POST /oauth/token HTTP/1.1
Host: kauth.kakao.com
Content-type: application/x-www-form-urlencoded;charset=utf-8

kauth.kakao.com/oauth/token  포스트타입

HTTP 1.1 = get post put delete 다가능

Content-type: application/x-www-form-urlencoded;charset=utf-8 타입으로 보내라는 뜻

 

 

 

 

body에 담겨야할 값

grant_type=authorization_code

client_id=내 restapi 키

redirect_uri=http://localhost:8000/blog/oauth/kakao?cmd=callback

code=리턴받은 코드

 

 

-------------------------------

리턴받은 내용을 자동으로 파싱해주는 라이브러리

resttemplate - object wrapper

retrofit2 - gson - 인기 많음

okhttp

volly

-----------------------

httpurlconnection

--------------------------

 

 

 

 

유저정보 가져오기

https://developers.kakao.com/docs/latest/ko/user-mgmt/rest-api

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

 

 

 

 

 

 

 

+ Recent posts