MEAN Stack Front to Back (MEANAuthApp)

Slides:



Advertisements
Similar presentations
1. 브라우저에서 로 관리창으로 접속해서, 서버 인증서를 설치 할 서버를 선택하고 Manage 버튼을 클릭합니다. 2. Security 탭을 선택한 후, 인증서 Trust.
Advertisements

LOGO Open API 를 이용한 SNS 위젯 개발 프로젝트 최종 발표 4 조 채상혁 윤호선 이재규.
해외전자정보서비스이용교육 EBSCO eBook (NetLibrary)
EBSCO eBooks 이용 방법 및 다운로드 (대출모드) 안내
HTTPS Packet Capture Tutorial
목차 Contents 무선인터넷용 비밀번호 설정방법 Windows 7 Windows 8 Windows XP MAC OS.
정보 보안 개론과 실습 네트워크 해킹과 보안 3부 해킹 전 정보 획득 Chapter 10. 목록화.
Nov Youn-Hee Han Term Project 안내 Nov Youn-Hee Han
Oozie Web API 기능 테스트 이승엽.
MEAN Stack Front to Back (MEANAuthApp)
패스포트로 사용자 인증하기 9장 Do it! Node.js 프로그래밍 이지스퍼블리싱 제공 강의 교안 2017/03
Database Laboratory, Hong Ik University
㈜디아이씨 SSLVPN 협력사 접속방법 2017년 4월.
SSL - VPN 사용자 가이드 - IT 지원실 네트워크 운영팀 -.
웹어플리케이션보안 인증서 활용 중부대학교 정보보호학과 이병천 교수.
데이터 파일 C 데이터 파일과 스트림(Stream) 텍스트 파일 처리
9. Deploying mean applications
MEAN Stack Front to Back
4-1장. MySQL 제13장.
MEAN Stack Front to Back (MEANAuthApp)
3.2 SQL Server 설치 및 수행(계속) 시스템 데이터베이스 master
웹 어플리케이션 보안 2016년 2학기 8. MEAN APP – USER CRM.
MEAN Stack Front to Back (MEANAuthApp)
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
Powerpoint 프리젠테이션을 로 보내기 [twitter]1. 파워포인트 프리젠테이션을 트위터로 보내기[/twitter]
웹 어플리케이션 보안 2016년 2학기 4. Restful node apI 만들기.
웹 어플리케이션 보안 2016년 2학기 3. Mongo db.
웹 어플리케이션 보안 2016년 2학기 5. Node Authentication.
13. 연산자 오버로딩.
(인터페이스 상세 이용 방법 및 다운로드 (대출모드) 안내)
인터넷응용프로그래밍 JavaScript(Intro).
설치 환경 □ 운영체제 버전 : CentOS Linux 7.2 □ 리눅스 커널 버전 :
MEAN Stack Front to Back
2015학년도 PHP 기말 레포트 로그인 홈페이지 제작.
1. SSLVPN 접속 방법 Internet Explorer 실행(타 브라우저 사용 불가)
Naxos Music Library User Guide 낙소스 뮤직 라이브러리 이용 가이드
영상처리 실습 인공지능연구실.
SNS 로그인 API 연동 조휘제.
WZC 무선 연결 방법 (Windows XP Ver.).
MEAN Stack Front to Back (MEANAuthApp)
Go Lang 리뷰 이동은.
MEAN Stack Front to Back (MEANAuthApp)
Adobe 제품 다운로드 및 설치 방법 안내 Adobe Creative Cloud Adobe License 권한을 받으신 분
MEAN Stack Front to Back (MEANAuthApp)
IOS Press Last Update : Jan, 2012.
MEAN Stack Front to Back (MEANAuthApp)
12장 쿠키와 세션 이장에서 배울 내용 : 쿠키와 세션은 웹 페이지 간에 정보를 유지할 때 사용된다. 쿠키와 세션은 사용되는 형태가 비슷하나, 쿠키는 웹 브라우저(클라이언트) 쪽에 저장되고, 세션은 웹 서버 쪽에 저장된다. 이 번장에서는 이들에 대해 학습한다.
PMIS 서버 설정 환경설정 작성자 : 배경환.
MEAN Stack Front to Back (MEANAuthApp)
STS 에서 웹 서버 설치 방법.
WZC 무선 연결 방법 (Windows 7 Ver.).
Oauth 인증 기술.
1. 신규 연세메일(Gmail)에 로그인 합니다. ( yonsei. ac. kr )
암호학 응용 Applied cryptography
KISTI Supercomputing Center 명훈주
오라클 11g 보안.
JSP Programming with a Workbook
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
시스템 인터페이스 Lab1 X-window 및 명령어 사용.
1. Vista Wireless LAN 설정하기
MIDP 네트워크 프로그래밍 ps lab 김윤경.
슬라이드 쇼의 설정 슬라이드 쇼의 실행 파일과 폴더의 관리 글꼴을 포함해서 저장 웹 페이지로 게시 압축 파일
웹어플리케이션보안 난수화 토큰인증 중부대학교 정보보호학과 이병천 교수.
채팅 및 파일전송 프로그램 권 경 곤 김 창 년.
Docker Study 6~7.
Exporting User Certificate from Internet Explorer
MEAN Stack Front to Back
MEAN Stack Front to Back (MEANAuthApp)
20 XMLHttpRequest.
MEAN Stack Front to Back (MEANAuthApp)
Presentation transcript:

MEAN Stack Front to Back (MEANAuthApp) 4. API Authentication and Token

목차 1. 환경 구축 2. Express Setup & Routes 3. User Model and Register 4. API Authentication and Token 5. Angular 4 Components & Routes 6. Register Component, Validation & Flash messages 7. Auth Service & User Registration 8. Login & Logout 9. Protected Requests & Auth Guard 10. App Deployment to Heroku

이번 장에서 할 일 인증에 대한 개념 소개 패스포트 로그인 특정 루트 보호 토큰 인증

초기인증 vs. 인증유지 초기인증(initial login) 기술 인증유지(keeping logged in) 기술 처음 접속시의 사용자 신분 인증 ID/pass, 인증서, 고유주소, Biometrics, 멀티팩터 인증 엄밀한 인증 절차 필요 사용자 계정 DB 확인 필요 인증유지(keeping logged in) 기술 초기 인증 완료된 사용자의 인증상태를 유지하는 기술 쿠키, 세션, 토큰 등 무상태 서비스 (stateless service) 요구 사용자 계정 DB 확인 필요없는 기술 많은 사용자를 위한 확장성, 효율성이 있는 기술 필요

Passport 패스포트란? Node.js를 위한 인증 미들웨어 http://passportjs.org/ 다양한 인증정책(strategy) 적용 가능

Passport Strategy 300개 이상의 인증 정책(Strategy) 로컬인증 페이스북 인증, 트위터 인증, 구글 인증 OAuth 인증

OAuth OAuth란? OAuth = Authentication + Authorization 인증 및 권한관리 프레임워크 https://oauth.net/

JSON Web Token (JWT) JWT란? 토큰 인증을 위한 표준 기술 https://jwt.io/

JSON Web Token (JWT) JWT란? open, industry standard RFC 7519 method for representing claims securely between two parties. a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed. JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA.

JSON Web Token (JWT) 토큰 발급 절차 Server’s secret

JSON Web Token (JWT) - 토큰 디코딩 및 정보 획득 가능 - 서명은 서버 비밀값을 이용한 HMAC 계산으로 서버만 계산 가능 Server’s secret

패스포트 로그인 적용 App.js에 패스포트 미들웨어 추가 // Body Parser Middleware app.use(bodyParser.json()); // Passport Middleware app.use(passport.initialize()); app.use(passport.session()); app.use('/users', users);

패스포트 로그인 적용 Passport-jwt 사용 Config 폴더에 passport.js 파일 작성 https://www.npmjs.com/package/passport-jwt 참조 A Passport strategy for authenticating with a JSON Web Token JWT 인증을 사용하기 위한 패스포트 정책 > npm install passport-jwt Config 폴더에 passport.js 파일 작성 Passport 관련 기능을 별도의 파일로 관리

config/passport.js 파일 작성 const JwtStrategy = require('passport-jwt').Strategy; const ExtractJwt = require('passport-jwt').ExtractJwt; const User = require('../models/user'); const config = require('../config/database'); module.exports = function(passport){ let opts = {}; opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken(); opts.secretOrKey = config.secret; passport.use(new JwtStrategy(opts, (jwt_payload, done) => { User.getUserById(jwt_payload. _doc._id, (err, user) => { if (err) { return done(err, false); } if (user) { return done(null, user); } else { return done(null, false); }); })); 옵션을 작성 - 토큰은 AuthHeader에서 Bearer token으로 전송 - 토큰생성을 위한 비밀키 설정 패스포트에 JWT strategy 적용 에러 발생시 에러 출력 인증에 성공하면 user 정보 출력 https://www.npmjs.com/package/passport-jwt 참조

토큰 전송 토큰은 여러 가지 방법으로 보낼 수 있음

패스포트 로그인 App.js에서 passport.js를 읽어옴 // Body Parser Middleware app.use(bodyParser.json()); // Passport Middleware app.use(passport.initialize()); app.use(passport.session()); require('./config/passport')(passport); app.use('/users', users);

인증(/authenticate) 기능 추가 router.post('/authenticate', (req, res, next) => { const username = req.body.username; const password = req.body.password; User.getUserByUsername(username, (err, user) => { if(err) throw err; if(!user) { return res.json({success: false, msg: 'User not found'}); } User.comparePassword(password, user.password, (err, isMatch) => { if(isMatch) { const token = jwt.sign(user, config.secret, { expiresIn: 604800 // 1 week }); res.json({ success: true, token: 'JWT '+token, user: { // 패스워드를 제외한 나머지 필요한 정보를 리턴 id: user._id, name: user.name, username: user.username, email: user.email } else { return res.json({success: false, msg: 'Wrong password'}); routes/users.js 파일에 router.post('/authenticate’,…) 기능 추가 사용자가 입력하는 로그인 정보를 변수로 할당 username으로 DB를 검색 입력 패스워드와 DB에서 읽어온 암호화된 패스워드 정보를 비교 (함수를 아직 만들지 않았음) 패스워드가 일치하면 토큰을 생성 서버비밀정보 이용, 유효기간 지정 토큰과 사용자 정보를 브라우저에 리턴 패스워드를 제외한 정보를 보내기 위해 User객체를 재구성함 (패스워드 제외)

인증(/authenticate) 기능 추가 Config.secret 변수 사용을 위해 routes/users.js 파일에 다음 선언을 추가해야 함 const config = require('../config/database');

models/user.js에 comparePassword 함수 추가 module.exports.addUser = function(newUser, callback){ bcrypt.genSalt(10, (err, salt) => { bcrypt.hash(newUser.password, salt, (err, hash) => { if(err) throw err; newUser.password = hash; newUser.save(callback); }); } module.exports.comparePassword = function(candidatePassword, hash, callback){ bcrypt.compare(candidatePassword, hash, (err, isMatch)=>{ callback(null, isMatch); https://www.npmjs.com/package/bcrypt 참조

Postman으로 로그인 테스트 (1) 새로운 탭 열기 (3) Send (4) 서버의 응답 토큰이 생성되어 발급받았음 사용자 정보 받음 (패스워드 제외) (2) 위 주소로 POST 선택 Headers 정보 입력 Body/raw 로 username/password 입력

특정 루트 보호 특정 루트는 로그인 이후에만 사용 가능하도록 보호 프로필 루트는 토큰을 이용하여 접근하도록 설정 http://localhost:3000/users/profile 로그인 안된 상태에서는(토큰이 없으면) 접근 금지 routes/users.js 파일에서 프로필 보기 부분을 수정 // Profile router.get('/profile', passport.authenticate('jwt', {session:false}), (req, res, next) => { res.json({user: req.user}); }); 토큰인증 된 경우에만 서버가 응답한 user 데이터를 보여줌

Postman을 이용한 테스트 앞의 로그인 결과에서 Token 부분을 복사

Postman을 이용한 테스트 (1) GET (2) 프로필 주소 (4) Send (3) Headers의 Authorization 값에 앞에서 복사한 토큰을 붙여넣기

Postman을 이용한 테스트 토큰으로 로그인 성공