웹 어플리케이션 보안 2016년 2학기 5. Node Authentication.

Slides:



Advertisements
Similar presentations
Mining the by Graph API. 1. 페이스북 소셜 그래프와 Graph API, OGP 2. 페이스북 페이지와 친구들에서 좋아요 분석하기 3. 소셜 그래프 분석을 위한 결속집단 분석 4. 소셜 그래프 시각화.
Advertisements

Korea Virtual Payment 모바일 안전결제 (ISP) 서비스 모델 - iPhone 한국버추얼페이먼트㈜ 기술연구소
박 제욱 이 재민. Web Caching 이란 ? 1 Web Caching 시스템 2 Web Caching 구조 3 Web Caching 동작 4 Web Caching 의 일관성 문제 5 프록시 서버 사용방법 6 참고도서 7.
2016 유성환 Hybrid MOBILE.
목차 Contents 무선인터넷용 비밀번호 설정방법 Windows 7 Windows 8 Windows XP MAC OS.
Chapter 07 : 서블릿 고급2. chapter 07 : 서블릿 고급2 학습목표 세션 tracking hidden 태그 이용 encodeURL 메소드 사용법 URL 파라미터 이용 쿠키 이용 세션 이용 encodeURL 메소드 사용법.
1. 신뢰할 수 있는 싸이트 등록 인터넷 익스플로러 실행 후 실행
4강. Servlet 맛보기 Servlet 문서 작성 하기 web.xml에 서블릿 맵핑 어노테이션을 이용한 서블릿 맵핑
Ch.07-5 xml-rpc 사용하기 김상엽.
PHP입문 Izayoi 김조흔.
웹 서버 동작 HTTP 클라이언트가 서버와 대화하는 방법과 데이터를 서버에서 클라이언트로 전송 하는 방법을 정의한 프로토콜
Taylor & Francis Mobile 서비스 이용안내
9. Deploying mean applications
MEAN Stack Front to Back (MEANAuthApp)
웹 애플리케이션 아키텍쳐 웹 클라이언트 서버 요청 응답 전송 애플리케이션 데이터베이스 커넥터 N-계층.
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
Chapter 7. RAS(전화접속,VPN) & IAS
8장. 원격지 시스템 관리하기.
Visual Basic .NET 처음 사용하기.
파티션 할당 및 공유(PAPS) of iATA-based Virtual Storage
FTP 프로그램 채계화 박재은 박수민.
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
모바일 자바 프로그래밍 JDBC / WAP Ps lab 오민경.
Chapter 03 : 서블릿 ( Servlet ) 개요. chapter 03 : 서블릿 ( Servlet ) 개요.
제 01 장 인터넷 프로그래밍 개요 학기 인터넷비즈니스과 강 환수 교수.
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
Wireless Java Programming
Grade Server Team14. Attention Seeker
웹 어플리케이션 보안 2016년 2학기 3. Mongo db.
Web Basic 김영성 인천대 OneScore
1. SSLVPN 접속 방법 Internet Explorer 실행(타 브라우저 사용 불가)
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Wi-Fi 취약점 분석 본 프로젝트는 Wi-Fi 환경에서의 취약점 분석을 위한 프로젝트로 다양한 공격방법을 테스트
Adobe 제품 다운로드 및 설치 방법 안내 Adobe Creative Cloud Adobe License 권한을 받으신 분
뇌를 자극하는 Windows Server 장. 원격 접속 서버.
Day-27(Tue_10.16) 파일 서비스 설정 AD 가 설치된 환경에서 DHCP 설치 할 경우 권한 자격을 주어야함.
USN(Ubiquitous Sensor Network)
8장 쿠키와 세션 한빛미디어(주).
ASP.NET AJAX / AJAX Control Toolkit 응용 2008 컴퓨터공학실험( I )
웹디자인
CGI란 무엇인가? CGI(Common Gateway Interface)의 정의
MEAN Stack Front to Back (MEANAuthApp)
12장 쿠키와 세션 이장에서 배울 내용 : 쿠키와 세션은 웹 페이지 간에 정보를 유지할 때 사용된다. 쿠키와 세션은 사용되는 형태가 비슷하나, 쿠키는 웹 브라우저(클라이언트) 쪽에 저장되고, 세션은 웹 서버 쪽에 저장된다. 이 번장에서는 이들에 대해 학습한다.
화이트 보드와 채팅 기능을 제공하는 웹 기반 공동작업 지원 시스템
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
14강. 세션 세션이란? 세션 문법 Lecturer Kim Myoung-Ho Nickname 블스
SSL, Secure Socket Layer
웹(WWW).
“웹과 모바일을 연동한 평가 간편 시스템” vol
STS 에서 웹 서버 설치 방법.
12강. 컨트롤러 컨트롤러 클래스 제작 요청 처리 메소드 제작 뷰에 데이터 전달
클러스터 시스템에서 효과적인 미디어 트랜스코딩 부하분산 정책
암호학 응용 Applied cryptography
웹 어플리케이션 보안 2016년 2학기 11. Enhancing Security.
Introduction to JSP & Servlet
1. 신규 연세메일(Gmail)에 로그인 합니다. ( yonsei. ac. kr )
암호학 응용 Applied cryptography
~27 윤형기 Python 프로그래밍 (보충) ~27 윤형기
3장 JSP프로그래밍의 개요 이장에서 배울 내용 : JSP페이지의 기본적인 개요설명과 JSP페이지의 처리과정 그리고 웹 어플리케이션의 구조에 대해서 학습한다.
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
JSP Programming with a Workbook
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
9 브라우저 객체 모델.
프로그래밍 언어 학습을 위한 가상실습환경 창원대학교 이수현.
채팅 및 파일전송 프로그램 권 경 곤 김 창 년.
CHAP 15. 데이터 스토리지.
7 생성자 함수.
AJAX? Cho Hyun Min.
중간 결과 보고 ( Server & Client )
디지털광고 구동 원리 전중달 CTO.
Presentation transcript:

웹 어플리케이션 보안 2016년 2학기 5. Node Authentication

5. Node Authentication Chap 10. Node Authentication

토큰기반 인증 토큰기반 인증이란? 클라이언트가 ID/pass를 제공하고 서버에 로그인하면 서버가 토 큰을 만들어 클라이언트에게 제공, 클라이언트에 토큰을 저장 클라이언트가 다음번에 서버에 접근시 토큰을 제시하고 접근하 면 ID/pass를 묻지 않고 사용할 수 있게 허용 사례: 페이스북, 트위터, 구글, github 등 한번 로그인하면 일정기 간동안 패스워드를 묻지 않고 로그인된 상태로 사용 가능

토큰기반 인증 토큰기반 인증의 장점 Stateless and scalable servers (서버는 세션정보를 저장하지 않 아도 되므로 사용자 관리가 편리) Mobile applications ready (모바일 디바이스에선 토큰기반 인증 이 필수, 패스워드 입력이 불편하기 때문) Pass authentication to other applications (타 사이트에도 인증 제공 가능, 사례: 페이스북/카카오톡으로 로그인하기) Extra security

기존의 인증방법 세션정보를 서버에 저장 Http 프로토콜은 stateless (사용자 정보를 저장하지 않음) 정보 요청시마다 로그인을 요구하는 것은 매우 번거로움 로그인을 유지하는 방법으로 사용자 로그인 정보를 서버에 저장 (세션정보를 서버의 메모리나 디스크에 저장) 이런 방법은 모바일 어플리케이션에 적용하기 어려움 세션정보를 서버에 저장

서버기반 인증의 문제점 세션정보 저장 (메모리) 확장성 CORS (cross-origin resource sharing) 사용자 수가 많아지면 서버에 부하가 큼 확장성 클라우드 환경에서 많은 분산서버들을 사용하여 서비스하는데 세션정보를 메모리에 저장하면 이러한 확장이 어려움 CORS (cross-origin resource sharing) 복수개의 모바일 기기에서 동일 데이터를 이용하는 환경 데이터 이용의 권한 관리에 어려움 CSRF (cross-site request forgery) 사이트간 요청 위조. 웹 사이트의 취약점을 이용하여 사용자가 의도하지 않는 요청을 송신하도록 하는 공격 사용자 기기가 CSRF 공격에 악용될 소지가 있음

토큰기반 인증의 동작 방법 서버는 사용자 로그인 관련 정보를 저장하지 않음 1. 클라이언트는 사용자의 ID/password로 접근 요청 2. 서버는 ID/password로 사용자 인증 3. 서버는 서명된 토큰을 생성하여 클라이언트에 제공 4. 클라이언트는 토큰을 저장, 이후의 모든 요청에 토큰을 제시 5. 서버는 토큰을 검증하고 사용자 인증 Permission-based token 생성도 가능 토큰을 클라이언트에 저장

토큰기반 인증 방식의 유용성 확장성, 유연성 (Stateless, scalable) 보안성 (Security) 인증의 확대 토큰은 클라이언트에 저장 서버는 정당한 토큰을 가지고 접근하는 클라이언트에 서비스 제공 보안성 (Security) 토큰은 쿠키가 아님, CSRF 방지 가능 토큰은 일정 시간이 지나면 무효화됨. 다시 로그인 필요 인증의 확대 토큰을 이용하여 다른 사이트와 인증 공유 가능 Selective permission to third-party applications 사례: 페이스북에 글 posting 허용 등 Multiple platforms and domains 모든 종류의 디바이스, 어플리케이션에 토큰이 있으면 접근 허용 표준기술 http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html

JSON Web Token (JWT) JSON Web Tokens (JWT) http://jwt.io Auth0 에서 만들었음 https://auth0.com/ Pronounced “jot”

JWT의 특징 토큰 정보를 JSON 형태로 저장, 전송함 많은 프로그래밍 언어 플랫폼에서 JWT 기능을 제공 .NET, Python, Node.js, Java, PHP, Ruby, Go, JavaScript, and Haskell 사용자 인증에 필요한 모든 정보가 토큰 내에 존재 토큰 정보는 쉽게 전송될 수 있음 (http header, URL등의 형태로)

JWT의 구조 JWT의 구조 Header Payload Signature Base64encode를 이용하여 인코딩

JWT 구조 헤더 페이로드 (전송할 내용) 서명 (위 내용에 대한 서버의 서명) 타입, 알고리즘 Registered claims Public claims Private claims 서명 (위 내용에 대한 서버의 서명) Registered claims secret은 서버가 가진 비밀정보 토큰은 발급한 서버만이 검증 가능함 해쉬함수를 이용하여 해쉬값 계산

JWT 사례 Base64encoded 헤더 페이로드 서명 JWT 토큰 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 eyJpc3MiOiJzY290Y2guaW8iLCJleHAiOj EzMDA4MTkzODAsIm5hbWUiOiJDaHJp cyBTZXZpbGxlamEiLCJhZG1pbiI6dHJ1ZX0 페이로드 03f329983b86f7d9a9f5fef85305880101d 5e302afafa20154d094b229f75773 서명 JWT 토큰

JWT 기능 테스트 사이트 https://jwt.io/

Node.js API에서의 인증 활용 웹서비스 인증 설계 해야 할 작업 기본 루트페이지(home page)는 인증 없이 사용 사용자 로그인 루트 제공 (login) API 루트는 인증 요구 (토큰인증 사용) 토큰을 이용한 서비스 사용 해야 할 작업 사용자의 ID/password를 이용하여 인증하는 인증 루트 설치 ID/password가 맞는 경우 토큰을 생성하여 클라이언트에 제공 API 루트는 토큰을 이용하여 접속시에만 서비스 제공

작업 절차 세팅 앞장의 node-api 폴더의 사본을 만들고 node-auth로 폴 더 이름을 변경 1. jsonwebtoken 패키지 설치 2. jsonwebtoken 객체 생성 3. 토큰 생성 및 검증시 사용하는 서버의 비밀값 설정 별도로 저장, 관리할 필요가 없으므로 복잡해도 상관없음 npm install jsonwebtoken --save var jwt = require('jsonwebtoken'); var superSecret = 'ilovescotchscotchyscotchscotch';

샘플 사용자 생성 Postman 이용 - POST http://localhost:8080/api/users

사용자 인증 및 토큰 생성 POST http://localhost/api/authenticate 루트 생성 ID, password로 인증하고 맞으면 토큰을 생성하여 제공하는 기능 다른 미들웨어보다 앞에 추가 사용자 인증은 서비스제공 전에 체크되어야 함

POST http://localhost/api/authenticate 토큰 생성 토큰을 JSON형식으로 클라이언트에게 제공 브라우저 화면에 표시

인증 및 토큰 생성 인증하고 토큰을 받은 모습

인증 실패 사례 User not found Wrong password

API 루트를 보호하기 위한 미들웨어 설정 Jwt.verify() 메서드 이용하여 토큰 검증 POST 파라메터로 제공 URL 파라메터로 제공 HTTP 헤더로 제공 Jwt.verify() 메서드 이용하여 토큰 검증

토큰을 이용한 인증 테스트 토큰을 제공하지 않고 /api에 접근하면 실패

HTTP Header를 통한 토큰 전달 사용자의 토큰을 복사한 후 헤더에 x-access-token으로 입력  인증 성공

URL 파라메터를 통한 토큰 전달 GET - http://localhost:8080/api/users?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJu YW1lIjoiQ2hyaXMiLCJ1c2VybmFtZSI6ImNocmlzIiwiaWF0IjoxNDcwOTk5OTk0LCJleH AiOjE0NzEwODYzOTR9.2BTjCaBdllrNv01S8V6tpgTC0-mXtjZx0zR0p6_JU7A 인증성공

로그인된 사용자 정보 제공을 위한 루트 GET http://localhost:8080/api/me

인증을 위한 다른 모듈들 PassporJS Express-jwt http://passportjs.org/ 가장 발전된 구현방식?! 다양한 인증방식 제공: session based security social based authentication JWT security Express-jwt https://github.com/auth0/express-jwt 인증을 위한 미들웨어를 자동 생성

요약 토큰 인증 기능이 부가된 API 완성  Facebook, Google, Twitter, GitHub 등 대형 회사들이 이 러한 인증기술을 이용 이런 인증기술을 기반으로 발전된 인증기능 구현 가능 user specific permissions group permissions 웹 어플리케이션에서 보안과 인증은 매우 중요한 요소 공격기술, 방어기술이 계속 발전하고 있으므로 최신기술 에 관심을 기울여야 함