73
멋쟁이사자처럼 2학기 API 서버를 통한 로그인 구현 (쿠키/세션/토큰) 서강대 멋사 박정현

루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

Embed Size (px)

Citation preview

Page 1: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

멋쟁이사자처럼2학기

API 서버를통한로그인구현(쿠키/세션/토큰)

서강대멋사박정현

Page 2: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

프론트엔드

백엔드

요청 응답

Page 3: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

로그인기능구현기억나세요?

Page 4: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

프론트엔드

백엔드

Page 5: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

알아서해주니까

어떻게되는건지모름..

Page 6: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

레일즈가아니면로그인기능을만들수없다

Page 7: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

로그인의원리에대해배워서일반적인(보편적인) 방식으로

구현해보자!

Page 8: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

인터넷의간단한원리

Page 9: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

인터넷의간단한원리

www.google.com

Page 10: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

인터넷의간단한원리

www.google.com

HTTP 통신

Page 11: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

인터넷의간단한원리

www.google.com

HTTP 통신

Page 12: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

HTTP 통신특징

Stateless

Page 13: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

Stateless무상태

즉, 매번의요청/응답이독립적이다

Page 14: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

인터넷의간단한원리www.google.com

1

2

3

3

Page 15: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

인터넷의간단한원리www.google.com

1

2

3

3

이번에통신을하는애가방금전에통신을했던애인지몰라!

Page 16: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

이전통신과이후통신이연결된상태가아니다

즉, 원칙적으로는‘로그인’이라는게불가능하다

Page 17: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

구글로그인페이지

Gmail.com

Page 18: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

구글로그인페이지

Gmail.com

아이디패스워드입력

로그인확인페이지

Page 19: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

구글로그인페이지

Gmail.com

아이디패스워드입력

로그인확인페이지

Gmail.com

구글로그인페이지

Page 20: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

StatelessVS

Stateful

Page 21: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

Stateful

FTP 통신

한번만연결하면계속파일을주고받을수있음

Page 22: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

Stateless 이지만통신을구별할수있는법..?

Page 23: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

쿠키 / 세션 / 토큰

Page 24: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

첫번째방법

쿠키

Page 25: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

유저의웹브라우저에정보를저장해서버에요청을보낼때

헤더에정보를담아서보내는방식

쿠키

Page 26: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

Header

Body

HTTP 통신구조

2단도시락

Page 27: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

Header

Body

HTTP 통신구조

2단도시락

Page 28: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

구글로그인페이지

Gmail.com

Page 29: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

구글로그인페이지

Gmail.com

아이디패스워드입력

로그인확인페이지

아이디패스워드정보가담긴쿠키를브라우저에 저장

Page 30: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

구글로그인페이지

Gmail.com

아이디패스워드입력

로그인확인페이지

Gmail.com

아이디패스워드정보가담긴쿠키를 HTTP 헤더에담아서전송

Page 31: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

구글로그인페이지

Gmail.com

아이디패스워드입력

로그인확인페이지

Gmail.com

내메일함

Page 32: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

실습

https://github.com/Rocket-Hyun/__RailsAPI__RailsLogin

레포지토리클론후Cookies 컨트롤러수정해서로그인기능완성시켜보기

회원가입URL: /signup로그인URL: /signin

bundle install 과 rake db migrate 필수!

Page 33: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)
Page 34: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

쿠키세팅방법

cookies[:key값] = 해당값

Page 35: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

결과시나리오

/signup 에서회원가입후

/signin에서로그인하면

/mypage_cookie 으로이동하고

/mypage_cookie2 까지들어간후로그아웃까지할수있는웹사이트

Page 36: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)
Page 37: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

쿠키브라우저에그대로노출되어저장되므로

털리기쉽다

중요한정보는절대넣으면안된다!!!쇼핑몰둘러봤던물품등정보만저장

Page 38: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)
Page 39: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

두번째방법

세션쿠키의응용!

Page 40: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

기본적으로쿠키를통해통신을구분하지만,

중요한정보는서버에저장하는방식

세션

Page 41: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

구글로그인페이지

Gmail.com

Page 42: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

구글로그인페이지

Gmail.com

아이디패스워드입력

서버프로그램 ‘메모리’에세션변수로유저정보저장

Page 43: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

구글로그인페이지

Gmail.com

아이디패스워드입력

로그인확인페이지

고유한세션ID가 담긴쿠키를브라우저에 저장

서버프로그램 ‘메모리’에세션변수로유저정보저장

Page 44: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

구글로그인페이지

Gmail.com

아이디패스워드입력

로그인확인페이지

Gmail.com

고유한세션ID가 담긴쿠키가자동으로 HTTP 헤더에담겨서전송

Page 45: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

구글로그인페이지

Gmail.com

아이디패스워드입력

로그인확인페이지

Gmail.com고유한세션ID를 통해서세션을찾아유저식별

Page 46: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

구글로그인페이지

Gmail.com

아이디패스워드입력

로그인확인페이지

Gmail.com

내메일함

고유한세션ID를 통해서세션을찾아유저식별

Page 47: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

실습

Sessions 컨트롤러수정해서로그인기능완성시켜보기

주의!signin.html 부분코드수정해야함!

Page 48: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

주의!signin.html

Page 49: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

할일 1

Page 50: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

세션세팅방법

session[:key값] = 해당값

Page 51: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

할일 2

Page 52: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

결과시나리오

/signup 에서회원가입후

/signin에서로그인하면

/mypage_session 으로이동하고

/mypage_session2 까지들어간후로그아웃까지할수있는웹사이트

Page 53: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)
Page 54: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

*HTTP only 쿠키 (세션용쿠키)

클라이언트에서임의로 ‘조작불가’즉, 탈취당할확률도적고안전함

브라우저를종료하거나서버측에서삭제를해야함

Page 55: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

/mypage2_session.html Sessions 컨트롤러

Page 56: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

세션은좋은방법!하지만…

Page 57: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

1. 모바일의등장

Page 58: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

모바일앱은일반적인웹작동방식과다르다세션이적합하지않다.

Page 59: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

인터넷의간단한원리

www.google.com브라우저에서띄울HTML 파일을줘!

.html 모든동작마다 통신을해야함즉, 세션이적합하다

일반서버

Page 60: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

모바일앱의간단한원리

모바일클라이언트 API 서버

화면은앱자체에다있으니까필요한정보만줘!

여기너가요청한정보!(주로 JSON)

정보가필요할때만 통신통신에상태를유지하는세션은부적합

Page 61: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

2. 대규모서비스들의등장

Page 62: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

로드밸런싱

Page 63: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

서버프로그램이처리하는세션은로드밸런싱에부적합!

Page 64: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

세번째방법

토큰

Page 65: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

모바일클라이언트 API 서버

Login화면

*모바일어플리케이션작동방법

유저정보획득을위해아이디패스워드정보전송

Page 66: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

유저정보획득을위해아이디패스워드정보전송

모바일클라이언트 API 서버

Login화면

*모바일어플리케이션작동방법

아이디패스워드검증후암호화된토큰생성

*만료기간설정

Page 67: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

모바일클라이언트 API 서버

Login화면

*모바일어플리케이션작동방법

아이디패스워드검증후암호화된토큰생성

유저정보와토큰을반환

유저정보획득을위해아이디패스워드정보전송

*만료기간설정

Page 68: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

모바일클라이언트 API 서버

Login화면

*모바일어플리케이션작동방법

아이디패스워드검증후암호화된토큰생성

유저정보와토큰을반환

토큰을로컬저장소에저장

유저정보획득을위해아이디패스워드정보전송

*만료기간설정

Page 69: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

모바일클라이언트 API 서버

Login화면

*모바일어플리케이션작동방법

유저정보와토큰을반환

*헤더에토큰을함께전송유저의중요정보요청

유저정보획득을위해아이디패스워드정보전송

Page 70: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

모바일클라이언트

Login화면

*모바일어플리케이션작동방법

유저정보와토큰을반환

유저정보획득을위해아이디패스워드정보전송

토큰유효성검증후유저중요정보반환

*헤더에토큰을함께전송유저의중요정보요청

Page 71: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

모바일클라이언트

Login화면

*모바일어플리케이션작동방법

유저정보와토큰을반환

유저정보획득을위해아이디패스워드정보전송

토큰유효성검증후유저중요정보반환

*헤더에토큰을함께전송유저의중요정보요청

유저중요정보반환

Page 72: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

대표적인토큰인증방식

JWT(Json Web Token)

Page 73: 루비온레일즈 API 서버 - 4) api 서버 인증 구현 (쿠키/세션/토큰)

소셜로그인의구현원리!