-
[JavaScript] JWT와 Sessionweb study/JavaScript 2021. 7. 16. 17:47
자바 스크립트의 기본적인 보안을 위한 토큰과 세션에 대해 포스팅 해보자!
Session이란
웹 사이트의 여러 페이지에 걸쳐 사용되는 사용자 정보를 저장하는 방법을 뜻한다.
사용자가 브라우저를 닫아 서버와의 연결을 끝내는 시점까지를 세션이라고 한다.
세션은 다른 보안 수단과 달리 서버 측에 데이터를 저장하고 세션의 키 값을 클라이언트에 저장하는 방식을 사용한다.
Session 동작 순서
Session은 session을 생성하는 요청-응답 처리와 이후 이 세션을 가지고 요청과 응답을 처리하는 2가지 방법으로 구성된다.
- 클라이언트에서 서버에 요청을 보낸다.
- 서버는 클라이언트를 식별하는 session id를 생성한다.
- 서버는 session id로 key와 value를 저장하는 Httpsession을 생성하고, session id를 저장하고있는 쿠키를 생성한다.
- 생성된 쿠키를 클라이언트에 전달한다.
- 클라이언트가 서버로부터 받은 session 쿠키를 담은 요청을 보낸다.
- 서버에서는 쿠키에 저장된 정보를 확인해 저장소에 담긴 정보를 확인한다.
- 확인 여하에 따라 요청에 대한 응답을 처리한다.
session 특징
- session은 클라이언트가 서버에 접속하는 순간 생성된다.
- 특별히 지정하지 않으면 세션의 유지 시간의 기본 값이 30분으로 설정된다.
- 세션의 유지 시간이란 서버에 접속한 후 서버에 요청을 하지 않는 최대 시간이다.
- 30분 이상 서버에 전혀 반응을 보이지 않으면 세션이 자동으로 끊어진다.
- 세션 데이터가 서버의 메모리에 저장되므로 확장 시 모든 서버가 접근할 수 있도록 하는 중앙 세션 관리 시스템이 필요하다.
- 중앙 세션 관리 시스템이 없으면, 시스템 확장에 어려움이 생긴다.
- 중앙 세션 관리 시스템이 장애가 일어나면, 시스템 전체가 문제가 생긴다.
- 메모리에 세션 정보가 들어있다면, 메모리가 많이 사용될 수 있다.
JWT란
JSON Web Token의 약자로 전자 서명된 URL-safe의 JSON이다.
말이 어려운데 JSON으로 전자 서명을 하여 URL-safe 문자열로 표현한 것이다라고 할 수 있다.
JWT는 헤더, 페이로드, 서명이라는 3가지 점으로 구분하는 구조를 가지고 있다.
- 헤더
- 헤더(Header)는 JWT를 어떻게 검증(Verify)하는가에 대한 내용을 담고 있다.
- alg는 서명 시 사용하는 알고리즘이고, kid는 서명 시 사용하는 키(Public/Private Key)를 식별하는 값
- 페이로드
- 토큰에 담을 내용을 뜻한다.
- JWT에 대한 내용(토큰 생성자(클라이언트)의 정보, 생성 일시 등)이나 클라이언트와 서버 간 주고 받기로 한 값들로 구성된다.
- 서명
- 서명은 헤더의 alg에 정의된 알고리즘과 비밀 키를 이용해 성성하고 Base64 URL-Safe로 인코딩한다.
JWT 동작 순서
- 클라이언트에서 로그인 요청을 보냅니다.
- 서버에서 JWT를 만든다.
- 서버에서 만들어진 JWT를 클라이언트에 보낸다.
- 클라이언트는 요청 시 JWT를 담아서 요청을 보낸다.
- 서버는 서명을 확인하고 정보를 클라이언트에 제공한다.
JWT 특징
- JWT 인증은 업계 표준 프로토콜 인 OAuth2를 이용한다.
- Login with Google , Login with Facebook 과 같은 service to service 로그인 옵션을 제공할 수 있다.
- 사용자 계정을 차단하거나 비활성화해야하는 경우 응용 프로그램은 잠금이 완전히 적용되도록 토큰이 만료 될 때까지 기다려야한다.
- 사용자가 비밀번호를 변경해야하는 경우 (예 : 계정 도용의 경우) 사전에 인증을 수행 한 경우 이전 비밀번호로 생성 된 토큰은 만료 될 때까지 유효합니다.
- 토큰 수명에 의해 만료가 되는 경우 재로그인을 해야하는 문제점이 발생할 수 있다.
- access token의 수명이 길면 해커에게 해독될 가능성이 있다.
- 짧은 수명은 refresh token으로 해결이 가능하다.
- 저장 방식이 2가지가 존재한다.
- local/session storage를 이용한 방식
- cookies를 이용한 방식
오늘은 로그인 시 사용되는 기본적인 보안에 대해 알아봤다.
보안관련 지식은 매번 공부할 때만 기억하고 이후에는 까먹는 경우가 많았는데 정리를 어느정도 해놨으니
차후에는 내 블로그를 보면서 상기하면 될 것 같다
참고 자료
https://velog.io/@geunwoobaek/JWT%EB%9E%80
'web study > JavaScript' 카테고리의 다른 글
[JavaScript] this와 Execution Context (0) 2021.07.16 [javascript] 자바스크립트 작동 원리 (0) 2021.07.13 [server] express 미들웨어 함수 (0) 2021.03.27