1. 인증

인증 작성하기

: 서비스내 직접 인증 기능 작성(Local Auth)

: 3자 인증 기능 사용(OAuth)

: OpenID - 인증만 제공해주는 서비스

로컬 인증

: 서비스 자체에서 사용자 가입

: 사용자 로그인 기능

: 사용자 정보 관리

: 필요한 점

: ID/PW가 서버와 클라이언트 메시지에 담겨서 이동

: 서버에 ID/PW 저장

: 사용자 정보 암호화

: 보안 통신 필요 : HTTPS

3자 인증

: 다른 서비스에 등록된 사용자의 인증 정보 사용

: 직접 가입/로그인 절차 없음

: ID/PW 노출 위험 적다

: 다른 서비스에서 토큰 발급

: 새로운 서비스

: 새로운 사용자라면, 인증하라고 요청

: 서비스키 제공- client_id, secret

: 가입된 서비스에 3자 인증 요청

: 가입된 서비스에 인증

: 인증 정보를 새로운 서비스에 전달

: 가입된 서비스에 인증 상황 문의

: 인증된 사용자 인지 문의

: 서비스 사용 가능

2. Passport

인증 모듈

: passport, everyauth

Passport 다루기 절차

1 : 모듈 로딩과 초기화

> var passport = require('passport');

> app.use(passport.initialize());

2 : Strategy 설정

> var Strategy = require('passport-strategy').Strategy;

> passport.use(new Strategy(function username, password, done){})

: 다양한 Strategy 제공

: Local Auth

: facebook, wirtter, google, kakao talk

3 : 인증

> app.port('login',passport,authenticate('local'))

: 인증 성공시

: 성공 메세지와 코드

: 성공 페이지 이동(웹)

: 인증 실패시

: 실패 메시지와 코드, 로그인페이지(웹)

4 : 세션 기록과 읽기

> passport.serializeUser(function(user, done){})

> passport.deserializeUser(function(id,done))

: 요청마다 세션 기록과 읽기

: passport.authenticate 이후 세션기록(serializeUser)

: 일반 요청마다 세션에서 읽기 (deserializeUser)

: 세션에서 읽어온 데이터

> req.user

5 : 사용자 정보

> req.user

3. LocalAuth

로컬 인증용 Strategy

설치

: npm install passport-strategy







'프로그래밍 > Nodejs' 카테고리의 다른 글

디버깅과 테스트와 프로세스 관리  (0) 2017.04.28
보안  (0) 2017.04.28
인증  (0) 2017.04.27
socket.io 를 이용한 실시간 웹서비스  (0) 2017.04.27
소켓을 이용한 실시간 서비스  (0) 2017.04.27

1. 보안과 인증 

인증

: 등록된 사용자 식별

: 사용자 별 권한

보안

: 정보 노출 방지 : 암호화 통신 방법

: 정보 해독 방지 : 데이터 암호화 저장

2. 쿠키

클라이언트의 활동 추적하기

: 로그인 하지 않은 사용자가 쇼핑몰을 사용한다

: 쇼핑몰에서 상품을 장바구니에 넣으면

: 다음 쇼핑몰에 방문했을 때 장바구니는?

: 장바구니 내용을 브라우저에 기록

서버가 웹브라우저에 기록

: 상품을 장바구니에 담기

: 쿠키에 장바구니 내용 저장

웹브라우저는 쿠키 내용 전송

: 서버는 요청에서 쿠키 읽기

: 기존에 기록한 내용 확인

HTTP 메시지와 쿠키

: 서버 -> 클라이언트

: 응답 메세지에 쿠키 기록을 위한 메세지 작성

: 메시지 헤더 : Set-Cookie 필드

: 클라이언트 -> 서버

: 클라이언트의 쿠키를 서버로 전송

: 요청 메시지 헤더의 cookie

HTTP 모듈로 쿠키 다루기

: 쿠키 쓰기

: res.setHeader('Set-Cookie','name=value');

: 쿠키 읽기

: 쿠키 값 파싱 코드 필요

: req.headers.cookie    //    'name = value'

Express 에서 쿠키 다루기

: 쿠키 쓰기 - Express 기본

: res.cookie(이름, 값)

: res.clearCookie(이름)

: 옵션을 통해 시간, 등등을 정함.

: 쿠키 읽기 : 쿠키 파서 모듈

: npm install cookie-parser

: 미들웨어에 쿠키파서를 넣으면됨.

: req.cookies.이름

서명 쿠키

: 쿠키 서명하기

: 쿠키 변조 방지

: 서명된 쿠키 사용하기

: 쿠키파서 설정

: 쿠키쓰기

: 쿠키 읽기

쿠키의 문제

: 메시지 크기가 커진다. 느려진다

: 다른 웹브라우저, 보안에 취약

3. 세션

: 서버에 정보 저장

: 클라이언트에는 세션 식별 정보(세션 ID)

: 세션 ID는 쿠키 사용

: 세션 모듈    :    express-session

: 미들웨어에 넣는다.

: 읽고 쓰기가 간단하게 처리된다.

세션 저장

: 세션 - 서버에 기록    

     : 서버 재시작 -> 세션 기록 삭제

: 서버 메모리

: 서버 클러스터링

: 세션을 데이터 베이스에 저장

: Session Store 모듈

: 어디에 저장하는냐를 결정

: connect-mongo

: connect-redis





'프로그래밍 > Nodejs' 카테고리의 다른 글

보안  (0) 2017.04.28
passport를 통한 인증  (0) 2017.04.28
socket.io 를 이용한 실시간 웹서비스  (0) 2017.04.27
소켓을 이용한 실시간 서비스  (0) 2017.04.27
Nodejs와 MongoDB  (0) 2017.04.27

1. 실시간 웹서비스와 socket.io

실시간 서비스 작성하기

: HTTP의 한계

: socket

: 데스크탑 애플리케이션 - 가능

: 모바일 애플리케이션 - 가능

: 웹 브라우저 - 불가능

웹브라우저에서 실시간 웹 서비스 사용하기

: ajax, polling, long poling, 웹 소켓...

: 다양한 시도가 있었지만, 다양한 웹 브라우저 때문에 한계가 존재.

: 여러 기술을 한번에 사용해야 된다는 어려움

실시간 서비스 작성하기

: socket.io : 호환되는 기술을 자동 선택

: npm install socket.io

socket.io 서버와 클라이언트

: 서버

: HTTP 서버

: socket.io 서버

: 클라이언트 

: HTTP 클라이언트, 모바일...

: socket.io 클라이언트

: 서비스 시작

: HTTP 서버 준비

: socket.io 서버 준비

: socket.io 클라이언트 요청 - HTML로 응답

: socket.io 초기화 및 서버 접속

: 연결이 끊어 졌을 경우 자동 재접속 시도

2. 데이터 교환

데이터 교환

: TCP 방법과의 차이이다. 스트림이 아니라, 이벤트를 이용하여 처리한다!

: 메시지 주고받기 - 이벤트 기반

: 메시지 이벤트 정의

: 메시지 전송

: socket.emit('EVENT', data)

: 이벤트 수신

: socket.on('EVENT',function(data){});

이벤트로 메시지 주고 받기

: 서버에 이벤트 등록

: 클라이언트 이벤트 등록

: 서버에서 이벤트 발생

: 소켓 하나에 이벤트 발생

: 연결된 모든 소켓에 이벤트 발생

3. 네임스페이스와 룸

: socket.io 기본연결

: 소켓과 1:1 연결

: 모든 소켓과 통신

: 1:N 통신

: 개별 소켓과 1:1통신 N번 반복

: 네임스페이스

: 룸

: 네임스페이스로 socket.io 연결 구분

: 같은 네임 스페이스에서만 메시지 주고 받음

: 기본 네임 스페이스 : /

: 커스텀 네임 스페이스 : /NAME-SPACE

: var system = require('socket.io')(server).of('/system')

: 네임스페이스 내 채널

: 같은 룸에서만 데이터 교환

: 룸에 입장, 여러 룸에 입장 가능

: 룸에서 떠나기

: 서버쪽에서 클라이언트를 룸에 입장 시키고 퇴장시킬 수 있음.


'프로그래밍 > Nodejs' 카테고리의 다른 글

passport를 통한 인증  (0) 2017.04.28
인증  (0) 2017.04.27
소켓을 이용한 실시간 서비스  (0) 2017.04.27
Nodejs와 MongoDB  (0) 2017.04.27
Node.js와 MySQL  (0) 2017.04.27

+ Recent posts