본문 바로가기

JSP

블로그 카카오 로그인

나중에 프레임워크에 구글 로그인, 페이스북 로그인이 있어요.

구조 파악하는게 어려울 수 있음.

 

그래서 오늘은 카카오 로그인 코드 날로 짜면서 구조 파악하고 원리를 이해해 볼거에요. 

그럼 나중에 프레임 워크로 할 때 수월할 거에요.

 

일반 사용자 (리소스 오너)

블로그나 사이트(클라이언트)

인증 서버(카카오 API)

resourse 서버는레파지토리가 있어요

디비에 연결되어있음.

 

카카오는 API 서버를 들고 있음
GET POST PUT DELETE로 요청을 할 수 있음
카카오 API서버는 응답을 JSON으로 해준다.

 

카카오 API 서버는 컨트롤러인데
요청을 받으면 Resource서버에 요청을 한다.
->API서버는 인증서버라고 한다.
->Resource서버에서 분기를하고 DB에 간다.
->그리고 그대로 되돌아가서 응답해줌

 

Resource서버는 DB랑 연결되어 있다.

 

 

 

카카오 로그인 목적

1) 인증 : 블로그 서버(클라이어트)에 code받음 즉 사용자(클라이어트)가 인증 받았다는 것

2) 인증 + 사용자 정보 : 이 code를 통해서 다시 요청해서 token을 받아요. 이 토큰은 Resourse에 접근할 수 있는 키.

 

이 토큰을 

 

음 코드받자 마자 회원가입을 알아서 시킴

아니면 다른 사이트는 토큰을 받아서 Oauth로그인이라고 하는데

만약에 추가적인 정보가 필요하면 회원가입을 유도함

 

카카오로그인 하는데 그러면 쇼핑몰 같은 사이트는 사용자 정보에 주소가 없으니까 

 

일반 사용자가 resuorse owner

블로그나 사이트가 클라이언트(대리인같음)

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

리소스 서버

 

CRUD+@를 하고 싶으면 API를 통해서 가능하다
API에서는 service만 실행하고 리소스서버에서 처리함

 

카카오 로그인창에서 유저아이디 비번으로 로그인 할때 &clientId=주호 을 가지고 감

 

user가 카카오로그인 요청을하면 
(이때 ID+PW+&clientId=blog서버주인)

 

아무나 로그인 인증 페이지를 쓸 수 없으니까

로그인할때

신청한 사람의 클라이언트 아이디도 같이 넣어서 보낸다.

 

블로그나 사이트도 카카오에 인증되어있어야 하니까 내 애블리케이션을 등록

 

 

 

토큰 - 어떤 시간만큼 리소스서버에 프리패스권. 

 

사이트 유저네임하고 카카오 리소스

 

 

코드를 받으면 인증 끝났다는거 

토큰을 받는 이유는 카카오 리소스 접근해서 정보 가져오려고

만약 이 정보로 클라이언트 사이트나 블로그에 (내 유저테이블에 있는 정보와 일치하지않고 부족)그런면 회원 가입 유도 충분하면 그냥 바로 그대로 회원가입시킴

 

카카오로그인 장점 클라이언트가 패스워드 안들고 있어도 됨.

 

앱 이름 jsp-blog

회사 이름 busanIT

 

네이티브 앱 키 ->  iOS, Android 앱 개발시 필요한 key
->앱한다

REST API 키 -> 최종 목적지 : 웹브라우저
->웹한다

JAVAScript 키 -> 최종 목적지 : 웹
JAVAScript 특이한점 : 서버가 없음, 다이렉트로 받음
->JAVAScript로 요청하는것임

 

Admin키는 모든것이 다 가능함

->웹, 앱

 

http://localhost:8000

 

 

 

 

Redirect URI 설정하면 로그인했을때 어디로 돌려줄지 설정함

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

 

 

 

 

 

Logout redirect URI 등록 : 카카오 로그아웃하고 어디고 갈지 설정

http://localhost:8000/blog

인덱스로 가면 되겠죠

 

 

 

정보를 얻기 위해서 동의 항목을 설정할 수 있음

 

프로필 정보
클라이언트 서버에 회원정보를 구축하기 위해
이메일을 필수정보로 등록해야하는데
카카오 인증에서 선택동의라서
동의를 안하면 회원가입창으로.
동의하면 회원가입 완료로 될 것이다.

 

 

 

민감한 정보라서 필수동의를 하려면 사업자 등록을 내야함

그래서 우리는 지금은 선택동의로 가져옴

 

 

토큰을 통해서 username이랑 email 받아 올거에요.

 

 

 

블로그나 사이트에서 카카오스토리에 POST할 수 있는 권한을 준다는 것임.

내 사이트에서 카카오에 글쓰도록 하게 하는 거

 

클라이언트 아이디

클라이언트 시크릿(선택임) - 보안을 조금더 강화 시키는 거임

유저내임

패스워드

 

클라이언트 시크릿말고 이3개 받아옴

 

 

간편가입은 편하지만

프로퍼티를 만들 수 도 있음(카카오 어드레스에 저장)

 

id : 카카오 서버에 있는 PK임

nickname은 

 

id+ nickname으로 PK를 만들어야한다.

 

프로바이더 + 프로바이더Id

프로바이더 = cos 또는 kakao, facebook이고

프로바이더id는 cos, kakao, faceboo에서 가져온 id

 

따로빼서 만들면 된다.

-> 프로바이더가 있는 애들은 Oauth로 로그인한 애들

 

프로바이더+프로바이더id로 키를 묶는다

 

nickname만으로 찾으면 충돌날 수 있으니까 id도 같이 묶어서 프라이머리키 설정

 

 

따로 테이블 만들기

provider name 

provider id

 

필요하니까 조인해서 사용한다.

 

 

아 그리고 프로퍼티 추가로 주소라던지 그런 것도 추가 할 수 있음

 

 

 

 

 

 

 

받아오는 정보도 사이트나 블로그에서 user테이블 구축하기에 충분하면 바로 그냥 회원가입 해버리고

아니면 회원가입유도.

 

 

 

인증코드 받기->CODE

get 방식으로 받을 준비가 되어 있어야 한다.

 

redirect_uri 설정 확인하기

여기로 데이터 받을예정

Query Sring으로 전달 받으며 get으로 받을 준비가 되어 있어야 한다.

카카오 로그인 창이 카카오 api에 요청함 이때 주소가 

 

href에다가 이 주소 만들어서 넣어두고

리소스 오너가 누르면 이 주소 + 유저네임+ 패스워드 들고 요청함

 

 

이 주소로 요청함

 

 

 

이것을 이용해서 보내면 된다.

 

 

 

 

 

 

 

 

 

 

 

 

카카오 로그인 버튼 달기

image에 버튼을 넣고 주소를 넣음

  <a href=""><img height="38" src="/blog/image/kakao_login_button.png"></a>

 

 

 

 

 

 

 

 

 

SSL

 

https

일반 사용자 - SSL서버 - 내 사이트 서버

 

암호화 복호화 해서 데이터 요청 응답하게 해주고 보장도 해줌. 보험 같음.

 

http는 모든 데이터가 노출되어있다.
https는 모든 데이터가 암호화 되어있다는것

전기로 데이터가 왓다갔다 해서 무법지대이기때문에
데이터가 나갈때 암호화 들어올때 암호화가 되어야한다.

 


 

 

 

ssar

비번

클라이언트ID

응답type

콜백주소

email

nickname

profile

 

이걸로 이래서 

클라이언트 서버에다가 (고유한)code값을 던져줌. 이 서버가 병근이를 대리할 수 있는 인증만 받은 것임.

 

 

 

 

 

 

 

 

 

 

 

 

우리 쪽에 회원가입시키려고

 

HTTP 1.1 CRUD 4가지 방식

 

Content-type에 맞춰서 주면된다.

만약 JSON으로 주면 에러 500이 나옴

 

 

redirect_uri를 다시 보내라는건

kakao 서버에 저장하기 싫어서 다시 보내라는 것이다.

중간에 하이재킹을 당할수도 있어서?

 

RestTemplate으로 폼 만들어서 전송하는거, 비동기 처리도 해줌

사용자가 토큰을 신청할수는 없으니까

 

RestTemplate Object

Retrofit-2 Gson

Okhttp

volly

 

하지만 아직 maven 안배워서 라이브러리 다운받으려고 하니까 의존하고 있는 것들이 대충 20개라서 나중에 spring할 때 배울예정. 그래서 직접 코드 짜고 동기로! (비동기로 할시에는Thread로 Callback 받아서 만들어도 되지만 나중에 어려워짐.)

 

post로 요청, json으로 응답

code 받고 토큰 받을때까지 동기적으로 처리해야한다.

 

token_type bearer 

access_token

refresh_token -> access_token만료되면 일반 사용자 귀찮게 하지말고 다시 요청해라고 

 

우리는 access_token만 refresh_token는 안하고 시간지나면 다시 사용자에게 로그인하라고 할거임.

 

 

사용자토큰으로 주소를 짜게 되면

 

 

 


코드 설명

 

 

post 

헤더에 마임타입가지고 가기

 

 

endpoint 최종목적지

이 url이 카카오

 

bodyData를 stream에 byte로 보내요. byte로 직렬화할 때 utf-8로.

 

json은 Buffered로 읽음

 

이 헤더를 어디 ?request헤더 값에 붙이려고 

 

clientId는 서버 처음부터 끝까지 다 필요하니까 application에 담아두면 되겠네

 

 

 

토큰 받았으면 카카오 로그인 끝

 

주소 받아야함

scope에 맞는 것들만 응답줄 것 임 (닉네임, 프로파일, 이메일) 하지만 

 

dto만들어야 함

 

카카오api에서 가져온 데이터가 충분하지 않은면 회원가입 유도 password없어도 되도록 DB users테이블에 null가능하도록 편집하기

 

 

 

토큰 한 번 쓰고 버리기로...

회원가입 중복으로 안되게도 했음... 쌤이.. 깃에...